From: Al Viro <viro@zeniv.linux.org.uk>
To: Lizhi Xu <lizhi.xu@windriver.com>
Cc: almaz.alexandrovich@paragon-software.com, brauner@kernel.org,
jack@suse.cz, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org, ntfs3@lists.linux.dev,
syzbot+73d8fc29ec7cba8286fa@syzkaller.appspotmail.com,
syzkaller-bugs@googlegroups.com
Subject: Re: [PATCH V2] fs: improve the check of whether i_link has been set
Date: Tue, 19 Nov 2024 16:36:47 +0000 [thread overview]
Message-ID: <20241119163647.GJ3387508@ZenIV> (raw)
In-Reply-To: <20241119112945.767118-1-lizhi.xu@windriver.com>
On Tue, Nov 19, 2024 at 07:29:45PM +0800, Lizhi Xu wrote:
> syzbot reported a null-ptr-deref in pick_link. [1]
>
> First, i_link and i_dir_seq are in the same union, they share the same memory
> address, and i_dir_seq will be updated during the execution of walk_component,
> which makes the value of i_link equal to i_dir_seq.
> In this case, setting i_dir_seq is triggered by move_mount, and the calltrace
> is as follows:
> move_mount()->
> user_path_at()->
> filename_lookup()->
> path_lookupat()->
> lookup_last()->
> walk_component()->
> __lookup_slow()->
> ntfs_lookup()->
> d_splice_alias()->
> __d_add()->
> end_dir_add()
>
> In pick_link(), the simple "if (!i_link)" is used to determine whether i_link
> has been set, which is not rigorous enough.
>
> On the other hand, the mode value of the symlink inode becomes REG because
> attr_set_size() fails to set the attribute and calls ntfs_bad_inode().
> By confirming that the i_link pointer value is valid, the null-ptr-deref
> problem in pick_link can be avoided.
So basically your theory is that make_bad_inode() is called on a live directory
inode (already reachable from dcache and remaining there), whereas the sucker
somehow gets a new dentry alias which looks like a symlink. Right?
NAK on the "mitigation", just in case anyone decides to pick that - no matter
how we deal with the problem, sprinkling virt_addr_valid() is *NOT* a solution.
next prev parent reply other threads:[~2024-11-19 16:36 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-14 18:08 [syzbot] [ntfs3?] general protection fault in pick_link syzbot
2024-11-15 8:26 ` [syzbot] " syzbot
2024-11-15 9:49 ` [PATCH] fs: add check for symlink corrupted Lizhi Xu
2024-11-15 11:43 ` Jan Kara
2024-11-16 1:02 ` Lizhi Xu
2024-11-16 1:25 ` Al Viro
2024-11-15 13:06 ` Al Viro
2024-11-15 13:24 ` Al Viro
2024-11-16 1:39 ` Lizhi Xu
2024-11-16 2:32 ` Al Viro
2024-11-19 11:29 ` [PATCH V2] fs: improve the check of whether i_link has been set Lizhi Xu
2024-11-19 16:36 ` Al Viro [this message]
2024-11-20 3:04 ` [PATCH V3] fs/ntfs3: check if the inode is bad before creating symlink Lizhi Xu
2024-11-20 16:10 ` Al Viro
2024-11-21 3:13 ` Lizhi Xu
2024-11-21 3:55 ` Al Viro
2024-11-21 5:27 ` Lizhi Xu
2024-11-22 7:49 ` Lizhi Xu
2024-11-22 8:10 ` [PATCH V4] " Lizhi Xu
2024-11-22 11:50 ` Jan Kara
2024-11-23 1:09 ` [PATCH V5] " Lizhi Xu
2024-11-23 1:32 ` Al Viro
2024-11-24 4:43 ` [PATCH V6] fs/ntfs3: check if the inode is bad before instantiating dentry Lizhi Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241119163647.GJ3387508@ZenIV \
--to=viro@zeniv.linux.org.uk \
--cc=almaz.alexandrovich@paragon-software.com \
--cc=brauner@kernel.org \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizhi.xu@windriver.com \
--cc=ntfs3@lists.linux.dev \
--cc=syzbot+73d8fc29ec7cba8286fa@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.