lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <58e07322349210ea1c7bf0a23278087724e95dfd.camel@dubeyko.com>
Date: Wed, 14 May 2025 19:01:31 -0700
From: Viacheslav Dubeyko <slava@...eyko.com>
To: Yangtao Li <frank.li@...o.com>, glaubitz@...sik.fu-berlin.de, Andrew
 Morton	 <akpm@...ux-foundation.org>, "Ernesto A."
 Fernández	 <ernesto.mnd.fernandez@...il.com>
Cc: linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org, 
	syzbot+8c0bc9f818702ff75b76@...kaller.appspotmail.com
Subject: Re: [PATCH] hfsplus: remove mutex_lock check in hfsplus_free_extents

On Sun, 2025-05-11 at 05:08 -0600, Yangtao Li wrote:
> Syzbot reported an issue in hfsplus subsystem:
> 

Could you please add the issue into the issues list [1] (if it is not
there yet) and to assign it on yourself?

> ------------[ cut here ]------------
> WARNING: CPU: 0 PID: 4400 at fs/hfsplus/extents.c:346
> 	hfsplus_free_extents+0x700/0xad0
> Call Trace:
> <TASK>
> hfsplus_file_truncate+0x768/0xbb0 fs/hfsplus/extents.c:606
> hfsplus_write_begin+0xc2/0xd0 fs/hfsplus/inode.c:56
> cont_expand_zero fs/buffer.c:2383 [inline]
> cont_write_begin+0x2cf/0x860 fs/buffer.c:2446
> hfsplus_write_begin+0x86/0xd0 fs/hfsplus/inode.c:52
> generic_cont_expand_simple+0x151/0x250 fs/buffer.c:2347
> hfsplus_setattr+0x168/0x280 fs/hfsplus/inode.c:263
> notify_change+0xe38/0x10f0 fs/attr.c:420
> do_truncate+0x1fb/0x2e0 fs/open.c:65
> do_sys_ftruncate+0x2eb/0x380 fs/open.c:193
> do_syscall_x64 arch/x86/entry/common.c:50 [inline]
> do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80
> entry_SYSCALL_64_after_hwframe+0x63/0xcd
> 
> To avoid deadlock, Commit 31651c607151 ("hfsplus: avoid deadlock
> on file truncation") unlock extree before hfsplus_free_extents(),
> and add check wheather extree is locked in hfsplus_free_extents().
> 
> However, when operations such as hfsplus_file_release,
> hfsplus_setattr, hfsplus_unlink, and hfsplus_unlink are executed
> concurrently in different files, it is very likely to trigger the
> WARN_ON, which will lead syzbot and xfstest to consider it as an
> abnormality.
> 

Which particular xfstests' test-case(s) triggers the issue? Do we have
the easy reproducing path of it? How can I check the fix, finally?

> Since we already have alloc_mutex to protect alloc file modify,
> let's remove mutex_lock check.
> 

I don't think that I follow the point. The two mutexes are namely the
basis for potential deadlocks. Currently, I am not sure that we are
fixing the issue. Probably, we are trying to hide the symptoms of the
real issue without the clear understanding what is going wrong. I would
like to hear the explanation how the issue is happening and why the
warning removal can help here.

> Fixes: 31651c607151f ("hfsplus: avoid deadlock on file truncation")
> Reported-by: syzbot+8c0bc9f818702ff75b76@...kaller.appspotmail.com
> Closes:
> https://lore.kernel.org/all/00000000000057fa4605ef101c4c@google.com/
> Signed-off-by: Yangtao Li <frank.li@...o.com>
> ---
>  fs/hfsplus/extents.c | 3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/fs/hfsplus/extents.c b/fs/hfsplus/extents.c
> index a6d61685ae79..b1699b3c246a 100644
> --- a/fs/hfsplus/extents.c
> +++ b/fs/hfsplus/extents.c
> @@ -342,9 +342,6 @@ static int hfsplus_free_extents(struct
> super_block *sb,
>  	int i;
>  	int err = 0;
>  
> -	/* Mapping the allocation file may lock the extent tree */
> -	WARN_ON(mutex_is_locked(&HFSPLUS_SB(sb)->ext_tree-
> >tree_lock));
> -

I am not sure that it's the good idea to remove any warning because,
probably, we could not understand the real reason of the issue and we
simply trying to hind the symptoms of something more serious.

Current explanation doesn't sound reasonably well to me. I am not
convinced yet that it is proper fix and we see the reason of the issue.
I would like to hear more clear justification that we have to remove
this check.

Thanks,
Slava. 

>  	hfsplus_dump_extent(extent);
>  	for (i = 0; i < 8; extent++, i++) {
>  		count = be32_to_cpu(extent->block_count);

[1] https://github.com/hfs-linux-kernel/hfs-linux-kernel/issues

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ