Received: by 2002:a05:7412:8d09:b0:fa:4c10:6cad with SMTP id bj9csp188323rdb; Mon, 15 Jan 2024 17:53:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IGD9oYRs83njl9d6Y2K6SW1kP1hE1gk59jx+Dks61Mxk2SJqKvtFUQHeOdHnxt+th4UBHLp X-Received: by 2002:a05:6808:11d0:b0:3bd:58db:e961 with SMTP id p16-20020a05680811d000b003bd58dbe961mr6161308oiv.19.1705369981568; Mon, 15 Jan 2024 17:53:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1705369981; cv=none; d=google.com; s=arc-20160816; b=vKuyQ1bYQrf3D+osEKC/XUHZeeCCr7amoOP4Zz9URMZP0g2MnDASBUXY7yjudQg7Bj jBVEFyznLdX4DgwPCTqv3GlVq3Vmmz0qXwyE94JwjlqfjxH1uCeSpni1FNlVyJYvGROy aIZgaUS25Aua9GQZ2POOIpB131yuJouMgnIBC17nnljqjiy0ppu/RLiaOpHNiMTCgIXo BvPTTQEdFkmcx4F/cizCPjRyNipbJ3RiP8BV71KH9TaoZ6n6KtDKm8Tr/puh6+1Q/G4i +/lKuUEsiWxS3LkIRi7/OS8mc3RRH/IxqO8yGkZYLFmsy1wB+ruxT00rrKwN3OR5C6cs D6vg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:date :subject:cc:to:from:message-id:dkim-signature; bh=DCpBVg+aQyT3L+Kdy97dklgtgdBCPPQELOohdN2IBLs=; fh=RVtd3CdGhh4h1liVjZ+/LqDHP+9bADTwgnxaMCRrBuw=; b=N9nuYd9x89FPvbIdV3Gv1+sW2KXbZmFgn4Ddt/ameFdNMrWWZxavoCmHRCH7cfVHk0 0hdvdIBz4WwJbWHLcVi2BvYK2q4uJhxwjke4l6MUUvTctfA37VXSVYrN+/SB5j+8Nb7M WJ5RN/oi9Acve5+J8g0LZmy26SNEyEFqKMhcLgrwFYPGLNyiURjBwao/adjBPgAk96K3 SUDJHtcmI5bZZA4UQXNlctVrx+pzL5r3auepvCIJZWUTnRx79aIXInJn5TEGhZGLjjGA boTl9KuMPA/rfeY2/JyKk8NzOXxniB1TJeE/9AJR9+HwfvBWZjjeOgxAgRq4QLQTg6Lt qWqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@qq.com header.s=s201512 header.b=ACMwnKx8; spf=pass (google.com: domain of linux-kernel+bounces-26903-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-26903-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=qq.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id s3-20020a05620a29c300b007819e1c8594si10074910qkp.129.2024.01.15.17.53.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jan 2024 17:53:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-26903-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@qq.com header.s=s201512 header.b=ACMwnKx8; spf=pass (google.com: domain of linux-kernel+bounces-26903-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-26903-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=qq.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 5378E1C22C5C for ; Tue, 16 Jan 2024 01:53:01 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E35077482; Tue, 16 Jan 2024 01:15:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=qq.com header.i=@qq.com header.b="ACMwnKx8" Received: from out203-205-221-236.mail.qq.com (out203-205-221-236.mail.qq.com [203.205.221.236]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1702A6FC8; Tue, 16 Jan 2024 01:14:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=qq.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qq.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512; t=1705367390; bh=DCpBVg+aQyT3L+Kdy97dklgtgdBCPPQELOohdN2IBLs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ACMwnKx8OkePAo+TKkh4mm6VLRW+bwd3znbVNaqB5AKe72gorFllQqcdy96Ni/xPB wP/Mm6sYlsJN3YldUyZXdGwE4u/tva+fdY2mJmmuzCzWeDW7DcCNAjwIoW7pzSIim6 RXmflkXYt0ubQpdqfksJ5ItJKEDxw+O63axATAGA= Received: from pek-lxu-l1.wrs.com ([111.198.225.215]) by newxmesmtplogicsvrszb6-0.qq.com (NewEsmtp) with SMTP id 26E31ED2; Tue, 16 Jan 2024 09:09:46 +0800 X-QQ-mid: xmsmtpt1705367386t9z3vls8a Message-ID: X-QQ-XMAILINFO: OOPJ7pYMv25t/i5xDARED5DFubYiZPfDhGJ1pTdWxzL7vQ4ffXDKzsES3yFW87 5Vt/xVbjPBm9GcMfJtspWmJSTFYrIGXGlUpjvs88aUaWIKLpUTBB2p0vEtnigSRWZ5XZi2blXijN +m820GKQgqIjJT4n9O0Apgq0ACVXVjW9yBvf0aoarXaaPnlWCn8wZtLSPLT1K34GqBlxCGSzXNqZ VijDbRMlsdjetKemCP+25+ncH6Wz2Q+CEdga7Ffn0ODPUko6lAaFL1pA5mbp0zFJELydIyXRwjw8 wxvl8KPVTqnUQOMuyhQXX87xYF2QQZc/jPWH1gGNYgfiVkM1/R34xY1Dq2hEZVPgWcyoIGsga7WE p/xqJEn+LwB5iUAW1hfCJQB7b9KORLXYJihBbcMvvIVbrJoFdXfyxgATy3y/jXXB1XWjLHtp/K9g aDLyu2zCIGAQ+EHAaNZZWFShDQgx3jtDRH4phaMa3fBSiQGOhP0pRbnaSD/n39TyhxMZf7kiZQdO beg7RLrOsXPOcHwzL0nkfPVvKOhO/i2hmYlHsSD9n5208v1IdoTyagAMwp8ph0akQyVUl+ZrLHit 7ScVjzZdmULr85wGj0j9nip/SNr8ZRXHEERwLA5/na1DKWdgR4VF95HRVzMM6mhiH8uvJRMRQYjY bmeAtPbOSauv+gE/iLLT9JHMgX92GwVQKRPSGH1X8GEEKdrxjU24hfKi5vPMSg4hD2qik7OeOpde ahAZIMSbDV2wLcZkhYRfnGyZ92/X0lnd9AizHsDJ4G7y6YcUR3TtbvZvEBCfIeiEhnh0KuI51Mld 3ioHVAdM3EQ9D5vm+LODJAlZoT/oqvNkQ+ukqaYNN60R44rTUG0MxCy7eDLwGwsadzmtPETstnmh b/iu79xrQo7P2nLt6Vg7veqeGFXmhWpj4x6aNZ9a28WZ/vsZFLw7YoG/OR8FMxszZubV9vXXZ7J8 L8LgKtf7DQLM7dI2ZA+YWGrk8u1+iABcK5zAE6Hcc= X-QQ-XMRINFO: Mp0Kj//9VHAxr69bL5MkOOs= From: Edward Adam Davis To: dsterba@suse.cz Cc: clm@fb.com, daniel@iogearbox.net, dsterba@suse.com, eadavis@qq.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, syzbot+33f23b49ac24f986c9e8@syzkaller.appspotmail.com, syzkaller-bugs@googlegroups.com Subject: Re: [syzbot] [btrfs?] KASAN: slab-out-of-bounds Read in getname_kernel (2) Date: Tue, 16 Jan 2024 09:09:47 +0800 X-OQ-MSGID: <20240116010946.58705-2-eadavis@qq.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240115190824.GV31555@twin.jikos.cz> References: <20240115190824.GV31555@twin.jikos.cz> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit On Mon, 15 Jan 2024 20:08:25 +0100, David Sterba 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 > > > --- > > > 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; This is not correct, 1. The maximum length of tgtdev_name is BTRFS_DEVICE_PATH_NAME_MAX + 1 2. strnlen should be used to confirm the presence of \0 in tgtdev_name 3. Input values should not be subjectively updated 4. The current issue only involves tgtdev_name > > ret = btrfs_dev_replace_start(fs_info, args->start.tgtdev_name, > args->start.srcdevid,