]> Git Repo - linux.git/commit
ocfs2: fix deadlock in ocfs2_get_system_file_inode
authorMohammed Anees <[email protected]>
Tue, 24 Sep 2024 09:32:57 +0000 (09:32 +0000)
committerAndrew Morton <[email protected]>
Thu, 26 Sep 2024 21:01:44 +0000 (14:01 -0700)
commit7bf1823e010e8db2fb649c790bd1b449a75f52d8
treee32508ae6645dd9e9824403682e4531d51ffce79
parent5ca60b86f57a4d9648f68418a725b3a7de2816b0
ocfs2: fix deadlock in ocfs2_get_system_file_inode

syzbot has found a possible deadlock in ocfs2_get_system_file_inode [1].

The scenario is depicted here,

CPU0 CPU1
lock(&ocfs2_file_ip_alloc_sem_key);
                               lock(&osb->system_file_mutex);
                               lock(&ocfs2_file_ip_alloc_sem_key);
lock(&osb->system_file_mutex);

The function calls which could lead to this are:

CPU0
ocfs2_mknod - lock(&ocfs2_file_ip_alloc_sem_key);
.
.
.
ocfs2_get_system_file_inode - lock(&osb->system_file_mutex);

CPU1 -
ocfs2_fill_super - lock(&osb->system_file_mutex);
.
.
.
ocfs2_read_virt_blocks - lock(&ocfs2_file_ip_alloc_sem_key);

This issue can be resolved by making the down_read -> down_read_try
in the ocfs2_read_virt_blocks.

[1] https://syzkaller.appspot.com/bug?extid=e0055ea09f1f5e6fabdd

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Mohammed Anees <[email protected]>
Reviewed-by: Joseph Qi <[email protected]>
Reported-by: <[email protected]>
Closes: https://syzkaller.appspot.com/bug?extid=e0055ea09f1f5e6fabdd
Tested-by: [email protected]
Cc: Mark Fasheh <[email protected]>
Cc: Joel Becker <[email protected]>
Cc: Junxiao Bi <[email protected]>
Cc: Changwei Ge <[email protected]>
Cc: Gang He <[email protected]>
Cc: Jun Piao <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
fs/ocfs2/extent_map.c
This page took 0.069075 seconds and 4 git commands to generate.