Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp3222599ioo; Tue, 24 May 2022 16:44:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzq3Q7FNix8I2fHDTVe0sThO4VelKHA4lT63N5nEh6rKPUiDOH36ucHczIQo0YfANB2Q8Lg X-Received: by 2002:a17:907:60d3:b0:6f9:6ac6:2335 with SMTP id hv19-20020a17090760d300b006f96ac62335mr26137690ejc.628.1653435862058; Tue, 24 May 2022 16:44:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653435862; cv=none; d=google.com; s=arc-20160816; b=tbHogplo6/K8dUI/vbkydoj+5Qd9kdPAVe+30AeU75b+xIRpmHugGpb/WSpyUet3yw +J4foeVYLuYBtBmVujlTPsqVEgW6I6QSTQnWTtRgzPHfkJSQNEbRttg7RxHcCfTi4CE+ h4JSpdc+/agGnSgma/BT3ED68YWhfrexOqhF306oB3R4di/iOLzWYv5iTlWzj0XIiVz0 NZzT2pi+kF5tZiHUWdKrthQNczH2c18JFOpDKVXvxhC3Azg8CGVYzoeG0FREThtrpLCD cjhfOlbRWhg8KnXCnhlYbHCDx5TZJJhVP6NBYrhLKDkOMD8OvOsqQE8MOpbAaruNb9C/ ia/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=PPAHCr5neZTO5dDk3mCWvedxuHzUssgvW2coYrOgLp8=; b=a5tJWPh02rjVy6ZTQZ8IhN7yFCmTCZCHhq7N4L26+OecgXOvUHNPmWsEwmvUDWyDVn 9D/ReW3VkGGWKhvoSViOSkryRzwn47CBmlUpumU95bIOYSQCHajRifu2ZN+ZjZMx3gHz 6hxp+t7s+ZW6qqMsDI15uFk0H8BNpE+dukfXo2khD5XqHhmcNsfb65Om3Yz3HZeJea0g u+3UBmtcW0ph4rvzCjFOh5spfT34BUeCx//DVLl8oxdp6V0553WyHPfCzlrguV7Mi2yD RPwY0P8C4T0YHNpNcXXwW7H+Y6E40rscrWoTOQ8BVs9JEpKCcNc4laH0c1kewczpU7X9 Hg9g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=CDwbNgcI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gn12-20020a1709070d0c00b006e7fe1e4eb4si18326364ejc.847.2022.05.24.16.43.56; Tue, 24 May 2022 16:44:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=CDwbNgcI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237291AbiEXOoL (ORCPT + 99 others); Tue, 24 May 2022 10:44:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52848 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234550AbiEXOoK (ORCPT ); Tue, 24 May 2022 10:44:10 -0400 Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AED3B67D25 for ; Tue, 24 May 2022 07:44:08 -0700 (PDT) Received: by mail-lf1-x136.google.com with SMTP id j10so7734271lfe.12 for ; Tue, 24 May 2022 07:44:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=PPAHCr5neZTO5dDk3mCWvedxuHzUssgvW2coYrOgLp8=; b=CDwbNgcIbs6tKKmFiIIU9Ca+4UURFxGkK49ljr7S76LCKBrdYzVV0kGP+kSzdBlDF2 X22GxneS4WxITht4E5CvGQttmenaNVUujCHOlNwSLeEhrdrsjt+2gvD5z59DbKH0msR5 VS3s8xJEjjQoVP81DM7BExqMCNqT/mSZSUUifjQ6Hh1LKXPF5eLpLxcbWL7ELdPg+xqw pnUBGjpYlspfZHEWbT2nhQeLdX1udwgexQXscJ9UIdU+XY2BXFIRKPxRXZgPm6Dn3mf5 N4jdRwUq8QP5m1S8fm/UJ/Z2qRYhnnTZPQfxVBaFfJbPexU++imLyTWOWuy2d6Wy0ddN izjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=PPAHCr5neZTO5dDk3mCWvedxuHzUssgvW2coYrOgLp8=; b=y5h1gybWaoaeMbuZeL4fQTpLNCmh03PzM9N8EzCBkqpV+uR5AhtRcpkhgYKGsQFE9N eeVYx5CYi7wrC8LHMFTfUC85xKXqBzzwktAbqeuZN7kuUW0bj0IpCMZMsum9SF7+sgIs E7HitfopvIxxdzlzoBrzOBIWENTz9Bm7D4kXIqmdbOsdP+x8m35n0hrigZoTyU/d3eu5 4Jnjm54/gs/Gzc5Ydl8OAaI8tGi5KWng5JHNzb8L9dyR8Bpa+JUDrc7SU8rX/7j3ii8Z +TAQ3MjtwoKPaEymrFEMtf4rUMQyKd6xKS8jc1SUOM2xpntEMgSQDjbfHkbsGLtMpgGf jtow== X-Gm-Message-State: AOAM531xNXJ/+Kvjno0tIM5cf2RGDdAdT/HW/jaiVXRY828oMEUySaOM o6ZenbsezWNVGBFrwyaspy7bRwm9M+V7LtFk/m+3sw== X-Received: by 2002:a05:6512:3c94:b0:477:ba25:de54 with SMTP id h20-20020a0565123c9400b00477ba25de54mr19950013lfv.137.1653403446614; Tue, 24 May 2022 07:44:06 -0700 (PDT) MIME-Version: 1.0 References: <00000000000056e02f05dfb6e11a@google.com> <20220524103246.opewohl7da34k2ry@quack3.lan> <20220524104658.xxbl53pshdzwvaxx@pali> <20220524113704.gdwvao43b23hyf7z@quack3.lan> In-Reply-To: <20220524113704.gdwvao43b23hyf7z@quack3.lan> From: Dmitry Vyukov Date: Tue, 24 May 2022 16:43:54 +0200 Message-ID: Subject: Re: [syzbot] KASAN: use-after-free Write in udf_close_lvid To: Jan Kara Cc: =?UTF-8?Q?Pali_Roh=C3=A1r?= , syzbot , akpm@linux-foundation.org, alden.tondettar@gmail.com, hch@infradead.org, jack@suse.com, linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 24 May 2022 at 13:37, Jan Kara wrote: > > On Tue 24-05-22 12:46:58, Pali Roh=C3=A1r wrote: > > On Tuesday 24 May 2022 12:32:46 Jan Kara wrote: > > > > > > Hello! > > > > > > I had a look into this bug and I actually think this reproducer progr= am does > > > something that is always going to be problematic. The reproducer has: > > > > > > #{"threaded":true,"repeat":true,"procs":6,"slowdown":1,"sandbox":"","= close_fds":false} > > > > > > syz_mount_image$udf(...) > > > r0 =3D syz_open_dev$loop(&(0x7f0000000080), 0x0, 0x109002) > > > mmap(addr, 0x600000, PROT_WRITE, MAP_SHARED | MAP_FIXED, r0, 0x0) > > > pipe(addr) > > > > > > So the reproducer effectively corrupts random loop devices with outpu= t from > > > pipe(2) syscall while there are filesystems mounted on them by other > > > threads. This is a guaranteed way to shoot yourself in the foot and c= rash > > > the kernel. You can say the kernel should not allow writing to mounte= d devices > > > and I'd generally agree but there are some cornercases (e.g. bootload= ers or > > > lowlevel filesystem tools) which happen to do this so we cannot forbi= d that due > > > to compatibility reasons. So syzbot probably needs to implement some > > > internal logic not to futz with loop devices that are currently mount= ed. > > > > > > Honza > > > > Hello! Bootloaders and other similar software in most cases needs to > > update first sector or sectors with bootloader data or main superblock > > of filesystem (where are metadata like label or UUIDs)... In most cases > > these "write" operations do not touch filesystem data. > > Well, we generally try to move away from updating superblock directly by > userspace - e.g. these days we have ioctls to update label or uuid so tha= t > coordination with the kernel is done properly. But there are still cases > where this happens. > > > So I'm thinking if it would not make sense to add some kernel config > > option to disallow write operations on mounted block devices, with some > > filesystem hook/callback which can allow writing to specific block. > > > > E.g. UDF filesystem does not use first 32kB of disk and userspace > > software can overwrite it as it wants even when fs is mounted, without > > crashing kernel. So that udf hook/callback would allow write access to > > this area. > > > > Userspace applications always invent "smart" things and I think it is a > > good idea to protect kernel if it is possible. > > > > I understand that there is need to overwrite mounted block device. > > Updating bootloader stored at the beginning of the rootfs disk is > > important operation. Also changing filesystem label at runtime / mounte= d > > fs is something which users want and it is legitimate requirement. For > > UDF this change is not easy operation and userspace software (e.g. > > udflabel) needs to update lot of blocks on device, which can really > > break mounted udf fs. > > Well, the difficulty is with identifying where writing is OK and where no= t. > It is not always is simple range at the beginning of the device where > writes can happen (although that probably covers majority of cases). But > thinking more about it the problem is not so much with applications > modifying disk contents (we don't trust disk contents much) but with > applications modifying buffer cache where we believe we have validated da= ta > structures. So we could somehow disallow buffer cache modification under > mounted filesystem. Either the filesystem and app view of buffer cache > would be inconsistent or apps would be doing direct IO when the filesyste= m > is mounted. Either option has its consequences but maybe we could create > something working out of that. Did not know it's not OK to write loop-associated fd. It's quite hard to prohibit the fuzzer from doing this. It's possible to prohibit whole syscalls, or opening particular files, or executing particular ioctl commands. But there are lots of interesting ways how an fd can be shared/messed with. We could prohibit opening /dev/loop*, or associating loop with fd, but it will inhibit all useful loop testing. And will also prohibit testing mounting of all filesystems. It will be good if the kernel provides some config that prohibits such unsafe operation. Or, of course, if it prohibits only "buffer cache modification". > > > On Mon 23-05-22 17:17:21, syzbot wrote: > > > > Hello, > > > > > > > > syzbot found the following issue on: > > > > > > > > HEAD commit: 4b0986a3613c Linux 5.18 > > > > git tree: upstream > > > > console output: https://syzkaller.appspot.com/x/log.txt?x=3D125ba35= 5f00000 > > > > kernel config: https://syzkaller.appspot.com/x/.config?x=3D1350d39= 7b63b3036 > > > > dashboard link: https://syzkaller.appspot.com/bug?extid=3D60864ed35= b1073540d57 > > > > compiler: Debian clang version 13.0.1-++20220126092033+75e33f= 71c2da-1~exp1~20220126212112.63, GNU ld (GNU Binutils for Debian) 2.35.2 > > > > syz repro: https://syzkaller.appspot.com/x/repro.syz?x=3D1732a= 04df00000 > > > > C reproducer: https://syzkaller.appspot.com/x/repro.c?x=3D1518963= 9f00000 > > > > > > > > The issue was bisected to: > > > > > > > > commit 781d2a9a2fc7d0be53a072794dc03ef6de770f3d > > > > Author: Jan Kara > > > > Date: Mon May 3 09:39:03 2021 +0000 > > > > > > > > udf: Check LVID earlier > > > > > > > > bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=3D14de= ecd3f00000 > > > > final oops: https://syzkaller.appspot.com/x/report.txt?x=3D16de= ecd3f00000 > > > > console output: https://syzkaller.appspot.com/x/log.txt?x=3D12deecd= 3f00000 > > > > > > > > IMPORTANT: if you fix the issue, please add the following tag to th= e commit: > > > > Reported-by: syzbot+60864ed35b1073540d57@syzkaller.appspotmail.com > > > > Fixes: 781d2a9a2fc7 ("udf: Check LVID earlier") > > > > > > > > UDF-fs: error (device loop0): udf_fill_super: Error in udf_iget, bl= ock=3D96, partition=3D0 > > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > BUG: KASAN: use-after-free in udf_close_lvid+0x68a/0x980 fs/udf/sup= er.c:2072 > > > > Write of size 1 at addr ffff8880839e0190 by task syz-executor234/36= 15 > > > > > > > > CPU: 1 PID: 3615 Comm: syz-executor234 Not tainted 5.18.0-syzkaller= #0 > > > > Hardware name: Google Google Compute Engine/Google Compute Engine, = BIOS Google 01/01/2011 > > > > Call Trace: > > > > > > > > __dump_stack lib/dump_stack.c:88 [inline] > > > > dump_stack_lvl+0x1e3/0x2cb lib/dump_stack.c:106 > > > > print_address_description+0x65/0x4b0 mm/kasan/report.c:313 > > > > print_report+0xf4/0x210 mm/kasan/report.c:429 > > > > kasan_report+0xfb/0x130 mm/kasan/report.c:491 > > > > udf_close_lvid+0x68a/0x980 fs/udf/super.c:2072 > > > > udf_fill_super+0xde8/0x1b20 fs/udf/super.c:2309 > > > > mount_bdev+0x26c/0x3a0 fs/super.c:1367 > > > > legacy_get_tree+0xea/0x180 fs/fs_context.c:610 > > > > vfs_get_tree+0x88/0x270 fs/super.c:1497 > > > > do_new_mount+0x289/0xad0 fs/namespace.c:3040 > > > > do_mount fs/namespace.c:3383 [inline] > > > > __do_sys_mount fs/namespace.c:3591 [inline] > > > > __se_sys_mount+0x2e3/0x3d0 fs/namespace.c:3568 > > > > do_syscall_x64 arch/x86/entry/common.c:50 [inline] > > > > do_syscall_64+0x2b/0x70 arch/x86/entry/common.c:80 > > > > entry_SYSCALL_64_after_hwframe+0x44/0xae > > > > RIP: 0033:0x7fd64e59b08a > > > > Code: 48 c7 c2 b8 ff ff ff f7 d8 64 89 02 b8 ff ff ff ff eb d2 e8 a= 8 00 00 00 0f 1f 84 00 00 00 00 00 49 89 ca b8 a5 00 00 00 0f 05 <48> 3d 01= f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48 > > > > RSP: 002b:00007fd64e546168 EFLAGS: 00000286 ORIG_RAX: 0000000000000= 0a5 > > > > RAX: ffffffffffffffda RBX: 00007fd64e5461c0 RCX: 00007fd64e59b08a > > > > RDX: 0000000020000000 RSI: 0000000020000700 RDI: 00007fd64e546180 > > > > RBP: 000000000000000e R08: 00007fd64e5461c0 R09: 00007fd64e5466b8 > > > > R10: 0000000000000810 R11: 0000000000000286 R12: 00007fd64e546180 > > > > R13: 0000000020000350 R14: 0000000000000003 R15: 0000000000000004 > > > > > > > > > > > > The buggy address belongs to the physical page: > > > > page:ffffea00020e7800 refcount:0 mapcount:0 mapping:000000000000000= 0 index:0x0 pfn:0x839e0 > > > > flags: 0xfff00000000000(node=3D0|zone=3D1|lastcpupid=3D0x7ff) > > > > raw: 00fff00000000000 ffffea00020e7808 ffffea00020e7808 00000000000= 00000 > > > > raw: 0000000000000000 0000000000000000 00000000ffffffff 00000000000= 00000 > > > > page dumped because: kasan: bad access detected > > > > page_owner info is not present (never set?) > > > > > > > > Memory state around the buggy address: > > > > ffff8880839e0080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff > > > > ffff8880839e0100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff > > > > >ffff8880839e0180: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff > > > > ^ > > > > ffff8880839e0200: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff > > > > ffff8880839e0280: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff > > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > > > > > > > > > --- > > > > This report is generated by a bot. It may contain errors. > > > > See https://goo.gl/tpsmEJ for more information about syzbot. > > > > syzbot engineers can be reached at syzkaller@googlegroups.com. > > > > > > > > syzbot will keep track of this issue. See: > > > > https://goo.gl/tpsmEJ#status for how to communicate with syzbot. > > > > For information about bisection process see: https://goo.gl/tpsmEJ#= bisection > > > > syzbot can test patches for this issue, for details see: > > > > https://goo.gl/tpsmEJ#testing-patches > > > -- > > > Jan Kara > > > SUSE Labs, CR > -- > Jan Kara > SUSE Labs, CR > > -- > You received this message because you are subscribed to the Google Groups= "syzkaller-bugs" group. > To unsubscribe from this group and stop receiving emails from it, send an= email to syzkaller-bugs+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgi= d/syzkaller-bugs/20220524113704.gdwvao43b23hyf7z%40quack3.lan.