From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752676AbdJGKLj (ORCPT ); Sat, 7 Oct 2017 06:11:39 -0400 Received: from m12-12.163.com ([220.181.12.12]:34669 "EHLO m12-12.163.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750816AbdJGKLi (ORCPT ); Sat, 7 Oct 2017 06:11:38 -0400 From: Jia-Ju Bai Subject: [BUG] fs/afs/flock: possible sleep-in-atomic bugs in afs_do_setlk To: viro@zeniv.linux.org.uk, dhowells@redhat.com Cc: linux-afs@lists.infradead.org, linux-kernel@vger.kernel.org Message-ID: <8aff89e4-e880-7e97-8b29-37822f4d2e02@163.com> Date: Sat, 7 Oct 2017 18:11:01 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US X-CM-TRANSID: DMCowAC3e7g7qNhZdC6CIQ--.50054S2 X-Coremail-Antispam: 1Uf129KBjvdXoWrtr45Cw1DJw48uF17Jw47urg_yoWxArgEga n5tr15Ja1kXwsavw4vkrsaqrWv9a4vgFn7G393uw4Iq345XFZakF1DG3W3ur97XF1DZ395 Ar4vqwn8uF17CjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUvcSsGvfC2KfnxnUUI43ZEXa7IUYOtxDUUUUU== X-Originating-IP: [166.111.70.12] X-CM-SenderInfo: xedlyx5dmximizq6il2tof0z/1tbiThtqelUC0IiSVAAAsM Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org According to fs/afs/flock.c, the kernel may sleep under a spinlock, and the function call paths are: afs_do_setlk (acquire the spinlock: inode->i_lock) afs_vnode_fetch_status schedule --> may sleep afs_do_setlk (acquire the spinlock: inode->i_lock) wait_event_interruptible --> may sleep These bugs may be introduced by only considering "vnode->lock" but ignoring "inode->i_lock". A possible fix is to unlock "inode->i_lock" before calling afs_vnode_fetch_status and wait_event_interruptible, and lock "inode->i_lock" again after them. These bugs are found by my static analysis tool and my code review. Thanks, Jia-Ju Bai