linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* BUG: WARNING in free_pgtables
@ 2024-08-28 21:37 Xingyu Li
  2024-08-29 11:30 ` Lorenzo Stoakes
  0 siblings, 1 reply; 2+ messages in thread
From: Xingyu Li @ 2024-08-28 21:37 UTC (permalink / raw)
  To: akpm, linux-mm, linux-kernel; +Cc: Yu Hao

Hi,

We found a bug in Linux 6.10 using syzkaller. It is possibly a  logic bug.
The reprodcuer is
https://gist.github.com/freexxxyyy/5f0c95e95e1bc0fb681e504114b61de8

The bug report is:

WARNING: CPU: 0 PID: 8053 at include/linux/rwsem.h:203
mmap_assert_write_locked include/linux/mmap_lock.h:70 [inline]
WARNING: CPU: 0 PID: 8053 at include/linux/rwsem.h:203
__is_vma_write_locked include/linux/mm.h:714 [inline]
WARNING: CPU: 0 PID: 8053 at include/linux/rwsem.h:203 vma_start_write
include/linux/mm.h:733 [inline]
WARNING: CPU: 0 PID: 8053 at include/linux/rwsem.h:203
free_pgtables+0x4df/0xbb0 mm/memory.c:403
Modules linked in:
CPU: 0 PID: 8053 Comm: syz-executor107 Not tainted 6.10.0 #13
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
RIP: 0010:rwsem_assert_held_write include/linux/rwsem.h:203 [inline]
RIP: 0010:mmap_assert_write_locked include/linux/mmap_lock.h:70 [inline]
RIP: 0010:__is_vma_write_locked include/linux/mm.h:714 [inline]
RIP: 0010:vma_start_write include/linux/mm.h:733 [inline]
RIP: 0010:free_pgtables+0x4df/0xbb0 mm/memory.c:403
Code: 04 00 4d 85 e4 0f 84 86 03 00 00 e8 3b 46 b6 ff 4d 89 ee 4d 89
e5 49 bc 00 00 00 00 00 fc ff df e9 86 fd ff ff e8 21 46 b6 ff <0f> 0b
e9 b8 fe ff ff 48 c7 c1 6c 91 24 8f 80 e1 07 80 c1 03 38 c1
RSP: 0018:ffffc9000ac7f748 EFLAGS: 00010293
RAX: ffffffff81db0b3f RBX: ffff88801d8cbe98 RCX: ffff888021fa1e00
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
RBP: 0000000000000000 R08: ffffffff81db09ea R09: ffffffff8aed5df0
R10: 0000000000000004 R11: ffff888021fa1e00 R12: ffff88802ce66ba0
R13: ffff88801d8cbe88 R14: ffff88802ce66aa8 R15: 1ffff11003b197d1
FS:  0000000000000000(0000) GS:ffff888063a00000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ff0448ce6b0 CR3: 00000000244bc000 CR4: 0000000000350ef0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
 <TASK>
 exit_mmap+0x435/0xa20 mm/mmap.c:3352
 __mmput+0x114/0x3b0 kernel/fork.c:1346
 exit_mm+0x207/0x2e0 kernel/exit.c:567
 do_exit+0x996/0x2560 kernel/exit.c:863
 do_group_exit+0x1fd/0x2b0 kernel/exit.c:1025
 get_signal+0x1697/0x1730 kernel/signal.c:2909
 arch_do_signal_or_restart+0x92/0x7f0 arch/x86/kernel/signal.c:310
 exit_to_user_mode_loop kernel/entry/common.c:111 [inline]
 exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
 __syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
 syscall_exit_to_user_mode+0x95/0x280 kernel/entry/common.c:218
 do_syscall_64+0x8a/0x150 arch/x86/entry/common.c:89
 entry_SYSCALL_64_after_hwframe+0x67/0x6f
RIP: 0033:0x7fb06353406d
Code: Unable to access opcode bytes at 0x7fb063534043.
RSP: 002b:00007fb0634d10c8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: 0000000000000002 RBX: 00007fb0635c92e8 RCX: 00007fb06353406d
RDX: 0000000020000080 RSI: 0000000000000001 RDI: 0000000000000004
RBP: 00007fb0635c92e0 R08: 00007fb0634d1640 R09: 0000000000000000
R10: 00007fb0634d1640 R11: 0000000000000246 R12: 00007fb0635c92ec
R13: 0000000000000000 R14: 00007fb0634f67c0 R15: 00007fb0634b1000
 </TASK>


-- 
Yours sincerely,
Xingyu


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: BUG: WARNING in free_pgtables
  2024-08-28 21:37 BUG: WARNING in free_pgtables Xingyu Li
@ 2024-08-29 11:30 ` Lorenzo Stoakes
  0 siblings, 0 replies; 2+ messages in thread
From: Lorenzo Stoakes @ 2024-08-29 11:30 UTC (permalink / raw)
  To: Xingyu Li; +Cc: akpm, linux-mm, linux-kernel, Yu Hao, Liam Howlett

On Wed, Aug 28, 2024 at 02:37:04PM GMT, Xingyu Li wrote:
> Hi,
>
> We found a bug in Linux 6.10 using syzkaller. It is possibly a  logic bug.

These lines are actually a bit offset for 6.10..

> The reprodcuer is
> https://gist.github.com/freexxxyyy/5f0c95e95e1bc0fb681e504114b61de8

Again, this doesn't repro for me. And the call stack suggests this doesn't
occur in the repro but on a process exit.

>
> The bug report is:
>
> WARNING: CPU: 0 PID: 8053 at include/linux/rwsem.h:203

This is:

	lockdep_assert_held_write(sem);

So presumably lockdep is on here (be good to get .config, full dmesg).

> mmap_assert_write_locked include/linux/mmap_lock.h:70 [inline]

This is:

rwsem_assert_held_write(&mm->mmap_lock);

> WARNING: CPU: 0 PID: 8053 at include/linux/rwsem.h:203
> __is_vma_write_locked include/linux/mm.h:714 [inline]

Should be 715? Guess inlined, but problematic line seems to be:

mmap_assert_write_locked(vma->vm_mm);

> WARNING: CPU: 0 PID: 8053 at include/linux/rwsem.h:203 vma_start_write
> include/linux/mm.h:733 [inline]
> WARNING: CPU: 0 PID: 8053 at include/linux/rwsem.h:203
> free_pgtables+0x4df/0xbb0 mm/memory.c:403
> Modules linked in:
> CPU: 0 PID: 8053 Comm: syz-executor107 Not tainted 6.10.0 #13
> Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
> RIP: 0010:rwsem_assert_held_write include/linux/rwsem.h:203 [inline]
> RIP: 0010:mmap_assert_write_locked include/linux/mmap_lock.h:70 [inline]
> RIP: 0010:__is_vma_write_locked include/linux/mm.h:714 [inline]
> RIP: 0010:vma_start_write include/linux/mm.h:733 [inline]
> RIP: 0010:free_pgtables+0x4df/0xbb0 mm/memory.c:403
> Code: 04 00 4d 85 e4 0f 84 86 03 00 00 e8 3b 46 b6 ff 4d 89 ee 4d 89
> e5 49 bc 00 00 00 00 00 fc ff df e9 86 fd ff ff e8 21 46 b6 ff <0f> 0b
> e9 b8 fe ff ff 48 c7 c1 6c 91 24 8f 80 e1 07 80 c1 03 38 c1
> RSP: 0018:ffffc9000ac7f748 EFLAGS: 00010293
> RAX: ffffffff81db0b3f RBX: ffff88801d8cbe98 RCX: ffff888021fa1e00
> RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
> RBP: 0000000000000000 R08: ffffffff81db09ea R09: ffffffff8aed5df0
> R10: 0000000000000004 R11: ffff888021fa1e00 R12: ffff88802ce66ba0
> R13: ffff88801d8cbe88 R14: ffff88802ce66aa8 R15: 1ffff11003b197d1
> FS:  0000000000000000(0000) GS:ffff888063a00000(0000) knlGS:0000000000000000
> CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00007ff0448ce6b0 CR3: 00000000244bc000 CR4: 0000000000350ef0
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> Call Trace:
>  <TASK>
>  exit_mmap+0x435/0xa20 mm/mmap.c:3352

This is

	free_pgtables(&tlb, &vmi.mas, vma, FIRST_USER_ADDRESS,
		      USER_PGTABLES_CEILING, true);

But on line 3349 we have:

	mmap_write_lock(mm);

None of the calls before free_pgtables() unlock this lock so that's super
weird. I'm not sure how this could possibly happen?

>  __mmput+0x114/0x3b0 kernel/fork.c:1346
>  exit_mm+0x207/0x2e0 kernel/exit.c:567
>  do_exit+0x996/0x2560 kernel/exit.c:863
>  do_group_exit+0x1fd/0x2b0 kernel/exit.c:1025
>  get_signal+0x1697/0x1730 kernel/signal.c:2909
>  arch_do_signal_or_restart+0x92/0x7f0 arch/x86/kernel/signal.c:310

OK so this is exit on a signal... so not the repro? Or when the repro was
killed?

>  exit_to_user_mode_loop kernel/entry/common.c:111 [inline]
>  exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
>  __syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
>  syscall_exit_to_user_mode+0x95/0x280 kernel/entry/common.c:218
>  do_syscall_64+0x8a/0x150 arch/x86/entry/common.c:89
>  entry_SYSCALL_64_after_hwframe+0x67/0x6f
> RIP: 0033:0x7fb06353406d
> Code: Unable to access opcode bytes at 0x7fb063534043.
> RSP: 002b:00007fb0634d10c8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> RAX: 0000000000000002 RBX: 00007fb0635c92e8 RCX: 00007fb06353406d
> RDX: 0000000020000080 RSI: 0000000000000001 RDI: 0000000000000004
> RBP: 00007fb0635c92e0 R08: 00007fb0634d1640 R09: 0000000000000000
> R10: 00007fb0634d1640 R11: 0000000000000246 R12: 00007fb0635c92ec
> R13: 0000000000000000 R14: 00007fb0634f67c0 R15: 00007fb0634b1000
>  </TASK>
>
>
> --
> Yours sincerely,
> Xingyu


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-08-29 11:30 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-28 21:37 BUG: WARNING in free_pgtables Xingyu Li
2024-08-29 11:30 ` Lorenzo Stoakes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox