From: David Sterba <dsterba@suse.cz>
To: Edward Adam Davis <eadavis@qq.com>
Cc: David Sterba <dsterba@suse.cz>,
syzbot+33f23b49ac24f986c9e8@syzkaller.appspotmail.com,
clm@fb.com, daniel@iogearbox.net, dsterba@suse.com,
john.fastabend@gmail.com, josef@toxicpanda.com,
linux-btrfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org, liujian56@huawei.com,
syzkaller-bugs@googlegroups.com
Subject: Re: [PATCH] btrfs: fix oob Read in getname_kernel
Date: Mon, 15 Jan 2024 20:08:25 +0100 [thread overview]
Message-ID: <20240115190824.GV31555@twin.jikos.cz> (raw)
In-Reply-To: <20240110155545.GW28693@twin.jikos.cz>
On Wed, Jan 10, 2024 at 04:55:46PM +0100, David Sterba wrote:
> On Tue, Dec 19, 2023 at 06:19:10PM +0800, Edward Adam Davis wrote:
> > If ioctl does not pass in the correct tgtdev_name string, oob will occur because
> > "\0" cannot be found.
> >
> > Reported-and-tested-by: syzbot+33f23b49ac24f986c9e8@syzkaller.appspotmail.com
> > Signed-off-by: Edward Adam Davis <eadavis@qq.com>
> > ---
> > fs/btrfs/dev-replace.c | 6 ++++--
> > 1 file changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
> > index f9544fda38e9..e7e96e57f682 100644
> > --- a/fs/btrfs/dev-replace.c
> > +++ b/fs/btrfs/dev-replace.c
> > @@ -730,7 +730,7 @@ static int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info,
> > int btrfs_dev_replace_by_ioctl(struct btrfs_fs_info *fs_info,
> > struct btrfs_ioctl_dev_replace_args *args)
> > {
> > - int ret;
> > + int ret, len;
> >
> > switch (args->start.cont_reading_from_srcdev_mode) {
> > case BTRFS_IOCTL_DEV_REPLACE_CONT_READING_FROM_SRCDEV_MODE_ALWAYS:
> > @@ -740,8 +740,10 @@ int btrfs_dev_replace_by_ioctl(struct btrfs_fs_info *fs_info,
> > return -EINVAL;
> > }
> >
> > + len = strnlen(args->start.tgtdev_name, BTRFS_DEVICE_PATH_NAME_MAX + 1);
> > if ((args->start.srcdevid == 0 && args->start.srcdev_name[0] == '\0') ||
> > - args->start.tgtdev_name[0] == '\0')
> > + args->start.tgtdev_name[0] == '\0' ||
> > + len == BTRFS_DEVICE_PATH_NAME_MAX + 1)
>
> I think srcdev_name would have to be checked the same way, but instead
> of strnlen I'd do memchr(name, 0, BTRFS_DEVICE_PATH_NAME_MAX). The check
> for 0 in [0] is probably pointless, it's just a shortcut for an empty
> buffer. We expect a valid 0-terminated string, which could be an invalid
> path but that will be found out later when opening the block device.
Please let me know if you're going to send an updated fix. I'd like to
get this fixed to close the syzbot report but also want to give you the
credit for debugging and fix.
The preferred fix is something like that:
--- a/fs/btrfs/dev-replace.c
+++ b/fs/btrfs/dev-replace.c
@@ -741,6 +741,8 @@ int btrfs_dev_replace_by_ioctl(struct btrfs_fs_info *fs_info,
if ((args->start.srcdevid == 0 && args->start.srcdev_name[0] == '\0') ||
args->start.tgtdev_name[0] == '\0')
return -EINVAL;
+ args->start.srcdev_name[BTRFS_PATH_NAME_MAX] = 0;
+ args->start.tgtdev_name[BTRFS_PATH_NAME_MAX] = 0;
ret = btrfs_dev_replace_start(fs_info, args->start.tgtdev_name,
args->start.srcdevid,
next prev parent reply other threads:[~2024-01-15 19:08 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-18 14:43 [syzbot] [btrfs?] KASAN: slab-out-of-bounds Read in getname_kernel (2) syzbot
2023-12-19 10:19 ` [PATCH] btrfs: fix oob Read in getname_kernel Edward Adam Davis
2024-01-10 15:55 ` David Sterba
2024-01-15 19:08 ` David Sterba [this message]
2024-01-16 1:09 ` [syzbot] [btrfs?] KASAN: slab-out-of-bounds Read in getname_kernel (2) Edward Adam Davis
2024-01-17 20:08 ` David Sterba
2024-01-31 18:43 ` David Sterba
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=20240115190824.GV31555@twin.jikos.cz \
--to=dsterba@suse.cz \
--cc=clm@fb.com \
--cc=daniel@iogearbox.net \
--cc=dsterba@suse.com \
--cc=eadavis@qq.com \
--cc=john.fastabend@gmail.com \
--cc=josef@toxicpanda.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=liujian56@huawei.com \
--cc=syzbot+33f23b49ac24f986c9e8@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox