* [syzbot] [mm?] KMSAN: uninit-value in swap_writeout @ 2025-12-22 12:18 syzbot 2025-12-23 22:46 ` Barry Song 0 siblings, 1 reply; 7+ messages in thread From: syzbot @ 2025-12-22 12:18 UTC (permalink / raw) To: akpm, baohua, bhe, chrisl, kasong, linux-kernel, linux-mm, nphamcs, shikemeng, syzkaller-bugs Hello, syzbot found the following issue on: HEAD commit: ea1013c15392 Merge tag 'bpf-fixes' of git://git.kernel.org.. git tree: upstream console output: https://syzkaller.appspot.com/x/log.txt?x=11d2e31a580000 kernel config: https://syzkaller.appspot.com/x/.config?x=b3903bdf68407a14 dashboard link: https://syzkaller.appspot.com/bug?extid=178fff6149127421c2cc compiler: Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8 userspace arch: i386 Unfortunately, I don't have any reproducer for this issue yet. Downloadable assets: disk image: https://storage.googleapis.com/syzbot-assets/27172fba4316/disk-ea1013c1.raw.xz vmlinux: https://storage.googleapis.com/syzbot-assets/ac8c65aa1d08/vmlinux-ea1013c1.xz kernel image: https://storage.googleapis.com/syzbot-assets/42241f684d1d/bzImage-ea1013c1.xz IMPORTANT: if you fix the issue, please add the following tag to the commit: Reported-by: syzbot+178fff6149127421c2cc@syzkaller.appspotmail.com ===================================================== BUG: KMSAN: uninit-value in is_folio_zero_filled mm/page_io.c:188 [inline] BUG: KMSAN: uninit-value in swap_writeout+0x468/0x1390 mm/page_io.c:263 is_folio_zero_filled mm/page_io.c:188 [inline] swap_writeout+0x468/0x1390 mm/page_io.c:263 shmem_writeout+0x1abb/0x1f60 mm/shmem.c:1662 writeout mm/vmscan.c:649 [inline] pageout mm/vmscan.c:698 [inline] shrink_folio_list+0x5920/0x7fc0 mm/vmscan.c:1418 evict_folios+0x999d/0xbf30 mm/vmscan.c:4711 try_to_shrink_lruvec+0x12b6/0x17e0 mm/vmscan.c:4874 lru_gen_shrink_lruvec mm/vmscan.c:5023 [inline] shrink_lruvec+0x46f/0x4f10 mm/vmscan.c:5784 shrink_node_memcgs mm/vmscan.c:6020 [inline] shrink_node+0xf1e/0x51e0 mm/vmscan.c:6061 shrink_zones mm/vmscan.c:6300 [inline] do_try_to_free_pages+0x849/0x26b0 mm/vmscan.c:6362 try_to_free_mem_cgroup_pages+0x3ae/0x950 mm/vmscan.c:6690 try_charge_memcg+0x80f/0x1c50 mm/memcontrol.c:2388 obj_cgroup_charge_pages+0x2ed/0x600 mm/memcontrol.c:2823 __memcg_kmem_charge_page+0x14a/0x4c0 mm/memcontrol.c:2867 __alloc_frozen_pages_noprof+0x3ba/0xab0 mm/page_alloc.c:5227 alloc_pages_mpol+0x328/0x860 mm/mempolicy.c:2486 alloc_frozen_pages_noprof mm/mempolicy.c:2557 [inline] alloc_pages_noprof+0x102/0x280 mm/mempolicy.c:2577 io_mem_alloc_compound io_uring/memmap.c:30 [inline] io_region_allocate_pages+0x164/0x900 io_uring/memmap.c:165 io_create_region+0x6d0/0x830 io_uring/memmap.c:220 io_allocate_scq_urings+0x1e3/0x8a0 io_uring/io_uring.c:3379 io_uring_create+0x7b5/0x1040 io_uring/io_uring.c:3643 io_uring_setup io_uring/io_uring.c:3718 [inline] __do_sys_io_uring_setup io_uring/io_uring.c:3752 [inline] __se_sys_io_uring_setup+0x3f0/0x410 io_uring/io_uring.c:3743 __ia32_sys_io_uring_setup+0x76/0xb0 io_uring/io_uring.c:3743 ia32_sys_call+0x2c57/0x4340 arch/x86/include/generated/asm/syscalls_32.h:426 do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline] __do_fast_syscall_32+0x15a/0x330 arch/x86/entry/syscall_32.c:307 do_fast_syscall_32+0x38/0x80 arch/x86/entry/syscall_32.c:332 do_SYSENTER_32+0x1f/0x30 arch/x86/entry/syscall_32.c:370 entry_SYSENTER_compat_after_hwframe+0x84/0x8e Uninit was created at: __alloc_frozen_pages_noprof+0x421/0xab0 mm/page_alloc.c:5233 alloc_pages_mpol+0x328/0x860 mm/mempolicy.c:2486 folio_alloc_mpol_noprof+0x56/0x1d0 mm/mempolicy.c:2505 shmem_alloc_folio mm/shmem.c:1890 [inline] shmem_alloc_and_add_folio+0xc56/0x1bd0 mm/shmem.c:1932 shmem_get_folio_gfp+0xad3/0x1fc0 mm/shmem.c:2556 shmem_get_folio mm/shmem.c:2662 [inline] shmem_symlink+0x562/0xad0 mm/shmem.c:4129 vfs_symlink+0x42f/0x4c0 fs/namei.c:5514 do_symlinkat+0x2ae/0xbb0 fs/namei.c:5541 __do_sys_symlinkat fs/namei.c:5562 [inline] __se_sys_symlinkat fs/namei.c:5559 [inline] __ia32_sys_symlinkat+0xf5/0x180 fs/namei.c:5559 ia32_sys_call+0x385e/0x4340 arch/x86/include/generated/asm/syscalls_32.h:305 do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline] __do_fast_syscall_32+0x15a/0x330 arch/x86/entry/syscall_32.c:307 do_fast_syscall_32+0x38/0x80 arch/x86/entry/syscall_32.c:332 do_SYSENTER_32+0x1f/0x30 arch/x86/entry/syscall_32.c:370 entry_SYSENTER_compat_after_hwframe+0x84/0x8e CPU: 0 UID: 0 PID: 7862 Comm: syz.2.517 Tainted: G L syzkaller #0 PREEMPT(none) Tainted: [L]=SOFTLOCKUP Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025 ===================================================== --- 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. If the report is already addressed, let syzbot know by replying with: #syz fix: exact-commit-title If you want to overwrite report's subsystems, reply with: #syz set subsystems: new-subsystem (See the list of subsystem names on the web dashboard) If the report is a duplicate of another one, reply with: #syz dup: exact-subject-of-another-report If you want to undo deduplication, reply with: #syz undup ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [syzbot] [mm?] KMSAN: uninit-value in swap_writeout 2025-12-22 12:18 [syzbot] [mm?] KMSAN: uninit-value in swap_writeout syzbot @ 2025-12-23 22:46 ` Barry Song 2025-12-23 23:43 ` Pedro Falcato 0 siblings, 1 reply; 7+ messages in thread From: Barry Song @ 2025-12-23 22:46 UTC (permalink / raw) To: syzbot, Baolin Wang, Hugh Dickins Cc: akpm, bhe, chrisl, kasong, linux-kernel, linux-mm, nphamcs, shikemeng, syzkaller-bugs > > Uninit was created at: > __alloc_frozen_pages_noprof+0x421/0xab0 mm/page_alloc.c:5233 > alloc_pages_mpol+0x328/0x860 mm/mempolicy.c:2486 > folio_alloc_mpol_noprof+0x56/0x1d0 mm/mempolicy.c:2505 > shmem_alloc_folio mm/shmem.c:1890 [inline] > shmem_alloc_and_add_folio+0xc56/0x1bd0 mm/shmem.c:1932 > shmem_get_folio_gfp+0xad3/0x1fc0 mm/shmem.c:2556 > shmem_get_folio mm/shmem.c:2662 [inline] > shmem_symlink+0x562/0xad0 mm/shmem.c:4129 > vfs_symlink+0x42f/0x4c0 fs/namei.c:5514 > do_symlinkat+0x2ae/0xbb0 fs/namei.c:5541 +Hugh and Baolin. This happens in the shmem symlink path, where newly allocated folios are not cleared for some reason. As a result, is_folio_zero_filled() ends up reading uninitialized data. Clearing newly allocated folios in shmem_get_folio_gfp() would fix the issue, but it may not be the proper solution. We will need Hugh and Baolin’s guidance to recommend an appropriate fix. > __do_sys_symlinkat fs/namei.c:5562 [inline] > __se_sys_symlinkat fs/namei.c:5559 [inline] > __ia32_sys_symlinkat+0xf5/0x180 fs/namei.c:5559 > ia32_sys_call+0x385e/0x4340 arch/x86/include/generated/asm/syscalls_32.h:305 > do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline] > __do_fast_syscall_32+0x15a/0x330 arch/x86/entry/syscall_32.c:307 > do_fast_syscall_32+0x38/0x80 arch/x86/entry/syscall_32.c:332 > do_SYSENTER_32+0x1f/0x30 arch/x86/entry/syscall_32.c:370 > entry_SYSENTER_compat_after_hwframe+0x84/0x8e > > CPU: 0 UID: 0 PID: 7862 Comm: syz.2.517 Tainted: G L syzkaller #0 PREEMPT(none) > Tainted: [L]=SOFTLOCKUP > Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025 > ===================================================== Thanks Barry ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [syzbot] [mm?] KMSAN: uninit-value in swap_writeout 2025-12-23 22:46 ` Barry Song @ 2025-12-23 23:43 ` Pedro Falcato 2025-12-24 0:16 ` Barry Song 0 siblings, 1 reply; 7+ messages in thread From: Pedro Falcato @ 2025-12-23 23:43 UTC (permalink / raw) To: Barry Song Cc: syzbot, Baolin Wang, Hugh Dickins, akpm, bhe, chrisl, kasong, linux-kernel, linux-mm, nphamcs, shikemeng, syzkaller-bugs On Wed, Dec 24, 2025 at 11:46:44AM +1300, Barry Song wrote: > > > > Uninit was created at: > > __alloc_frozen_pages_noprof+0x421/0xab0 mm/page_alloc.c:5233 > > alloc_pages_mpol+0x328/0x860 mm/mempolicy.c:2486 > > folio_alloc_mpol_noprof+0x56/0x1d0 mm/mempolicy.c:2505 > > shmem_alloc_folio mm/shmem.c:1890 [inline] > > shmem_alloc_and_add_folio+0xc56/0x1bd0 mm/shmem.c:1932 > > shmem_get_folio_gfp+0xad3/0x1fc0 mm/shmem.c:2556 > > shmem_get_folio mm/shmem.c:2662 [inline] > > shmem_symlink+0x562/0xad0 mm/shmem.c:4129 > > vfs_symlink+0x42f/0x4c0 fs/namei.c:5514 > > do_symlinkat+0x2ae/0xbb0 fs/namei.c:5541 > > +Hugh and Baolin. > > This happens in the shmem symlink path, where newly allocated > folios are not cleared for some reason. As a result, > is_folio_zero_filled() ends up reading uninitialized data. > I'm not Hugh nor Baolin, but I would guess that letting is_folio_zero_filled() skip/disable KMSAN would also work. Since all we want is to skip writeout if the folio is zero, whether it is incidentally zero, or not, does not really matter, I think. -- Pedro ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [syzbot] [mm?] KMSAN: uninit-value in swap_writeout 2025-12-23 23:43 ` Pedro Falcato @ 2025-12-24 0:16 ` Barry Song 2025-12-24 1:43 ` Baolin Wang 0 siblings, 1 reply; 7+ messages in thread From: Barry Song @ 2025-12-24 0:16 UTC (permalink / raw) To: pfalcato Cc: 21cnbao, akpm, baolin.wang, bhe, chrisl, hughd, kasong, linux-kernel, linux-mm, nphamcs, shikemeng, syzbot+178fff6149127421c2cc, syzkaller-bugs On Wed, Dec 24, 2025 at 12:43 PM Pedro Falcato <pfalcato@suse.de> wrote: > > On Wed, Dec 24, 2025 at 11:46:44AM +1300, Barry Song wrote: > > > > > > Uninit was created at: > > > __alloc_frozen_pages_noprof+0x421/0xab0 mm/page_alloc.c:5233 > > > alloc_pages_mpol+0x328/0x860 mm/mempolicy.c:2486 > > > folio_alloc_mpol_noprof+0x56/0x1d0 mm/mempolicy.c:2505 > > > shmem_alloc_folio mm/shmem.c:1890 [inline] > > > shmem_alloc_and_add_folio+0xc56/0x1bd0 mm/shmem.c:1932 > > > shmem_get_folio_gfp+0xad3/0x1fc0 mm/shmem.c:2556 > > > shmem_get_folio mm/shmem.c:2662 [inline] > > > shmem_symlink+0x562/0xad0 mm/shmem.c:4129 > > > vfs_symlink+0x42f/0x4c0 fs/namei.c:5514 > > > do_symlinkat+0x2ae/0xbb0 fs/namei.c:5541 > > > > +Hugh and Baolin. > > > > This happens in the shmem symlink path, where newly allocated > > folios are not cleared for some reason. As a result, > > is_folio_zero_filled() ends up reading uninitialized data. > > > > I'm not Hugh nor Baolin, but I would guess that letting > is_folio_zero_filled() skip/disable KMSAN would also work. Since all we want > is to skip writeout if the folio is zero, whether it is incidentally zero, or not, > does not really matter, I think. Hi Pedro, thanks! You’re always welcome to chime in. You are probably right. However, I still prefer the remaining data to be zeroed, as it may be more compression-friendly. Random data could potentially lead to larger compressed output, whereas a large area of zeros would likely result in much smaller compressed data. Not quite sure if the below can fix the issue: diff --git a/mm/shmem.c b/mm/shmem.c index ec6c01378e9d..0ca2d4bffdb4 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -4131,6 +4131,7 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir, goto out_remove_offset; inode->i_op = &shmem_symlink_inode_operations; memcpy(folio_address(folio), symname, len); + memset(folio_address(folio) + len, 0, folio_size(folio) - len); folio_mark_uptodate(folio); folio_mark_dirty(folio); folio_unlock(folio); > > -- > Pedro Thanks Barry ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [syzbot] [mm?] KMSAN: uninit-value in swap_writeout 2025-12-24 0:16 ` Barry Song @ 2025-12-24 1:43 ` Baolin Wang 2025-12-24 2:04 ` Barry Song 0 siblings, 1 reply; 7+ messages in thread From: Baolin Wang @ 2025-12-24 1:43 UTC (permalink / raw) To: Barry Song, pfalcato Cc: akpm, bhe, chrisl, hughd, kasong, linux-kernel, linux-mm, nphamcs, shikemeng, syzbot+178fff6149127421c2cc, syzkaller-bugs On 2025/12/24 08:16, Barry Song wrote: > On Wed, Dec 24, 2025 at 12:43 PM Pedro Falcato <pfalcato@suse.de> wrote: >> >> On Wed, Dec 24, 2025 at 11:46:44AM +1300, Barry Song wrote: >>>> >>>> Uninit was created at: >>>> __alloc_frozen_pages_noprof+0x421/0xab0 mm/page_alloc.c:5233 >>>> alloc_pages_mpol+0x328/0x860 mm/mempolicy.c:2486 >>>> folio_alloc_mpol_noprof+0x56/0x1d0 mm/mempolicy.c:2505 >>>> shmem_alloc_folio mm/shmem.c:1890 [inline] >>>> shmem_alloc_and_add_folio+0xc56/0x1bd0 mm/shmem.c:1932 >>>> shmem_get_folio_gfp+0xad3/0x1fc0 mm/shmem.c:2556 >>>> shmem_get_folio mm/shmem.c:2662 [inline] >>>> shmem_symlink+0x562/0xad0 mm/shmem.c:4129 >>>> vfs_symlink+0x42f/0x4c0 fs/namei.c:5514 >>>> do_symlinkat+0x2ae/0xbb0 fs/namei.c:5541 >>> >>> +Hugh and Baolin. Thanks for CCing me. >>> >>> This happens in the shmem symlink path, where newly allocated >>> folios are not cleared for some reason. As a result, >>> is_folio_zero_filled() ends up reading uninitialized data. >>> >> >> I'm not Hugh nor Baolin, but I would guess that letting >> is_folio_zero_filled() skip/disable KMSAN would also work. Since all we want >> is to skip writeout if the folio is zero, whether it is incidentally zero, or not, >> does not really matter, I think. > > Hi Pedro, thanks! You’re always welcome to chime in. > > You are probably right. However, I still prefer the remaining > data to be zeroed, as it may be more compression-friendly. > > Random data could potentially lead to larger compressed output, > whereas a large area of zeros would likely result in much smaller > compressed data. Thanks Pedro and Barry. I remember Hugh raised a similar issue before (See [1], but I did not investigate further:(). I agree with Hugh's point that the uninitialized parts should be zeroed before going the outside world. [1] https://lore.kernel.org/all/02a21a55-8fe3-a9eb-f54b-051d75ae8335@google.com/ > Not quite sure if the below can fix the issue: > > diff --git a/mm/shmem.c b/mm/shmem.c > index ec6c01378e9d..0ca2d4bffdb4 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -4131,6 +4131,7 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir, > goto out_remove_offset; > inode->i_op = &shmem_symlink_inode_operations; > memcpy(folio_address(folio), symname, len); > + memset(folio_address(folio) + len, 0, folio_size(folio) - len); > folio_mark_uptodate(folio); > folio_mark_dirty(folio); > folio_unlock(folio); That looks reasonable to me, though I prefer to use the more readable helper: folio_zero_range(). Barry, could you send out a formal patch? Thanks. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [syzbot] [mm?] KMSAN: uninit-value in swap_writeout 2025-12-24 1:43 ` Baolin Wang @ 2025-12-24 2:04 ` Barry Song 2025-12-24 3:53 ` syzbot 0 siblings, 1 reply; 7+ messages in thread From: Barry Song @ 2025-12-24 2:04 UTC (permalink / raw) To: baolin.wang, syzbot+178fff6149127421c2cc Cc: 21cnbao, akpm, bhe, chrisl, hughd, kasong, linux-kernel, linux-mm, nphamcs, pfalcato, shikemeng, syzkaller-bugs On Wed, Dec 24, 2025 at 2:43 PM Baolin Wang <baolin.wang@linux.alibaba.com> wrote: > > > > On 2025/12/24 08:16, Barry Song wrote: > > On Wed, Dec 24, 2025 at 12:43 PM Pedro Falcato <pfalcato@suse.de> wrote: > >> > >> On Wed, Dec 24, 2025 at 11:46:44AM +1300, Barry Song wrote: > >>>> > >>>> Uninit was created at: > >>>> __alloc_frozen_pages_noprof+0x421/0xab0 mm/page_alloc.c:5233 > >>>> alloc_pages_mpol+0x328/0x860 mm/mempolicy.c:2486 > >>>> folio_alloc_mpol_noprof+0x56/0x1d0 mm/mempolicy.c:2505 > >>>> shmem_alloc_folio mm/shmem.c:1890 [inline] > >>>> shmem_alloc_and_add_folio+0xc56/0x1bd0 mm/shmem.c:1932 > >>>> shmem_get_folio_gfp+0xad3/0x1fc0 mm/shmem.c:2556 > >>>> shmem_get_folio mm/shmem.c:2662 [inline] > >>>> shmem_symlink+0x562/0xad0 mm/shmem.c:4129 > >>>> vfs_symlink+0x42f/0x4c0 fs/namei.c:5514 > >>>> do_symlinkat+0x2ae/0xbb0 fs/namei.c:5541 > >>> > >>> +Hugh and Baolin. > > Thanks for CCing me. > > >>> > >>> This happens in the shmem symlink path, where newly allocated > >>> folios are not cleared for some reason. As a result, > >>> is_folio_zero_filled() ends up reading uninitialized data. > >>> > >> > >> I'm not Hugh nor Baolin, but I would guess that letting > >> is_folio_zero_filled() skip/disable KMSAN would also work. Since all we want > >> is to skip writeout if the folio is zero, whether it is incidentally zero, or not, > >> does not really matter, I think. > > > > Hi Pedro, thanks! You’re always welcome to chime in. > > > > You are probably right. However, I still prefer the remaining > > data to be zeroed, as it may be more compression-friendly. > > > > Random data could potentially lead to larger compressed output, > > whereas a large area of zeros would likely result in much smaller > > compressed data. > > Thanks Pedro and Barry. I remember Hugh raised a similar issue before > (See [1], but I did not investigate further:(). I agree with Hugh's > point that the uninitialized parts should be zeroed before going the > outside world. > > [1] > https://lore.kernel.org/all/02a21a55-8fe3-a9eb-f54b-051d75ae8335@google.com/ > > > Not quite sure if the below can fix the issue: > > > > diff --git a/mm/shmem.c b/mm/shmem.c > > index ec6c01378e9d..0ca2d4bffdb4 100644 > > --- a/mm/shmem.c > > +++ b/mm/shmem.c > > @@ -4131,6 +4131,7 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir, > > goto out_remove_offset; > > inode->i_op = &shmem_symlink_inode_operations; > > memcpy(folio_address(folio), symname, len); > > + memset(folio_address(folio) + len, 0, folio_size(folio) - len); > > folio_mark_uptodate(folio); > > folio_mark_dirty(folio); > > folio_unlock(folio); > > That looks reasonable to me, though I prefer to use the more readable > helper: folio_zero_range(). Barry, could you send out a formal patch? > Thanks. Thanks, Baolin. Let me request a bot test first. #syz test diff --git a/mm/shmem.c b/mm/shmem.c index ec6c01378e9d..835900a08f51 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -4131,6 +4131,7 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir, goto out_remove_offset; inode->i_op = &shmem_symlink_inode_operations; memcpy(folio_address(folio), symname, len); + folio_zero_range(folio, len, folio_size(folio) - len); folio_mark_uptodate(folio); folio_mark_dirty(folio); folio_unlock(folio); -- 2.48.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [syzbot] [mm?] KMSAN: uninit-value in swap_writeout 2025-12-24 2:04 ` Barry Song @ 2025-12-24 3:53 ` syzbot 0 siblings, 0 replies; 7+ messages in thread From: syzbot @ 2025-12-24 3:53 UTC (permalink / raw) To: 21cnbao Cc: 21cnbao, akpm, baolin.wang, bhe, chrisl, hughd, kasong, linux-kernel, linux-mm, nphamcs, pfalcato, shikemeng, syzkaller-bugs > On Wed, Dec 24, 2025 at 2:43 PM Baolin Wang <baolin.wang@linux.alibaba.com> wrote: >> >> >> >> On 2025/12/24 08:16, Barry Song wrote: >> > On Wed, Dec 24, 2025 at 12:43 PM Pedro Falcato <pfalcato@suse.de> wrote: >> >> >> >> On Wed, Dec 24, 2025 at 11:46:44AM +1300, Barry Song wrote: >> >>>> >> >>>> Uninit was created at: >> >>>> __alloc_frozen_pages_noprof+0x421/0xab0 mm/page_alloc.c:5233 >> >>>> alloc_pages_mpol+0x328/0x860 mm/mempolicy.c:2486 >> >>>> folio_alloc_mpol_noprof+0x56/0x1d0 mm/mempolicy.c:2505 >> >>>> shmem_alloc_folio mm/shmem.c:1890 [inline] >> >>>> shmem_alloc_and_add_folio+0xc56/0x1bd0 mm/shmem.c:1932 >> >>>> shmem_get_folio_gfp+0xad3/0x1fc0 mm/shmem.c:2556 >> >>>> shmem_get_folio mm/shmem.c:2662 [inline] >> >>>> shmem_symlink+0x562/0xad0 mm/shmem.c:4129 >> >>>> vfs_symlink+0x42f/0x4c0 fs/namei.c:5514 >> >>>> do_symlinkat+0x2ae/0xbb0 fs/namei.c:5541 >> >>> >> >>> +Hugh and Baolin. >> >> Thanks for CCing me. >> >> >>> >> >>> This happens in the shmem symlink path, where newly allocated >> >>> folios are not cleared for some reason. As a result, >> >>> is_folio_zero_filled() ends up reading uninitialized data. >> >>> >> >> >> >> I'm not Hugh nor Baolin, but I would guess that letting >> >> is_folio_zero_filled() skip/disable KMSAN would also work. Since all we want >> >> is to skip writeout if the folio is zero, whether it is incidentally zero, or not, >> >> does not really matter, I think. >> > >> > Hi Pedro, thanks! You’re always welcome to chime in. >> > >> > You are probably right. However, I still prefer the remaining >> > data to be zeroed, as it may be more compression-friendly. >> > >> > Random data could potentially lead to larger compressed output, >> > whereas a large area of zeros would likely result in much smaller >> > compressed data. >> >> Thanks Pedro and Barry. I remember Hugh raised a similar issue before >> (See [1], but I did not investigate further:(). I agree with Hugh's >> point that the uninitialized parts should be zeroed before going the >> outside world. >> >> [1] >> https://lore.kernel.org/all/02a21a55-8fe3-a9eb-f54b-051d75ae8335@google.com/ >> >> > Not quite sure if the below can fix the issue: >> > >> > diff --git a/mm/shmem.c b/mm/shmem.c >> > index ec6c01378e9d..0ca2d4bffdb4 100644 >> > --- a/mm/shmem.c >> > +++ b/mm/shmem.c >> > @@ -4131,6 +4131,7 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir, >> > goto out_remove_offset; >> > inode->i_op = &shmem_symlink_inode_operations; >> > memcpy(folio_address(folio), symname, len); >> > + memset(folio_address(folio) + len, 0, folio_size(folio) - len); >> > folio_mark_uptodate(folio); >> > folio_mark_dirty(folio); >> > folio_unlock(folio); >> >> That looks reasonable to me, though I prefer to use the more readable >> helper: folio_zero_range(). Barry, could you send out a formal patch? >> Thanks. > > Thanks, Baolin. Let me request a bot test first. > > #syz test This crash does not have a reproducer. I cannot test it. > > diff --git a/mm/shmem.c b/mm/shmem.c > index ec6c01378e9d..835900a08f51 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -4131,6 +4131,7 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir, > goto out_remove_offset; > inode->i_op = &shmem_symlink_inode_operations; > memcpy(folio_address(folio), symname, len); > + folio_zero_range(folio, len, folio_size(folio) - len); > folio_mark_uptodate(folio); > folio_mark_dirty(folio); > folio_unlock(folio); > -- > 2.48.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-12-24 4:06 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-12-22 12:18 [syzbot] [mm?] KMSAN: uninit-value in swap_writeout syzbot 2025-12-23 22:46 ` Barry Song 2025-12-23 23:43 ` Pedro Falcato 2025-12-24 0:16 ` Barry Song 2025-12-24 1:43 ` Baolin Wang 2025-12-24 2:04 ` Barry Song 2025-12-24 3:53 ` syzbot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox