"WARNING in corrupted" in Linux kernel version 6.13.0-rc2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I am writing to report a potential vulnerability identified in the
Linux Kernel version 5.15.169. This issue was discovered using our
custom vulnerability discovery tool.

Affected File: mm/page_alloc.c

File: mm/page_alloc.c

Function: __alloc_pages

Detailed Call Stack:

------------[ cut here begin]------------

WARNING: CPU: 1 PID: 3458 at mm/page_alloc.c:5398 current_gfp_context
include/linux/sched/mm.h:174 [inline]
WARNING: CPU: 1 PID: 3458 at mm/page_alloc.c:5398
__alloc_pages+0x3d0/0x450 mm/page_alloc.c:5410
Modules linked in:
CPU: 1 PID: 3458 Comm: syz.4.203 Not tainted 5.15.169 #1
Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS
1.16.3-debian-1.16.3-2 04/01/2014
RIP: 0010:__alloc_pages+0x3d0/0x450 mm/page_alloc.c:5398
Code: ff 4c 89 fa 44 89 f6 89 ef 89 6c 24 48 c6 44 24 78 00 4c 89 6c
24 60 e8 de dc ff ff 49 89 c4 e9 f8 fd ff ff 40 80 e5 3f eb c5 <0f> 0b
eb 91 4c 89 e7 44 89 f6 45 31 e4 e8 5e 80 ff ff e9 ff fd ff
RSP: 0018:ffff8881020df718 EFLAGS: 00010246
RAX: 0000000000000000 RBX: 1ffff1102041bee4 RCX: dffffc0000000000
RDX: 0000000000000000 RSI: 0000000000000014 RDI: 0000000000040dc0
RBP: 0000000000000000 R08: 0000000000000001 R09: ffff8881020dfa67
R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000001
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
FS: 00007f0c2bb1a6c0(0000) GS:ffff88811ae80000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000001b2d11fffc CR3: 0000000108780000 CR4: 0000000000350ee0
Call Trace:
<TASK>
alloc_pages+0x18c/0x410 mm/mempolicy.c:2185
kmalloc_order+0x30/0xd0 mm/slab_common.c:966
kmalloc_order_trace+0x14/0xa0 mm/slab_common.c:982
kmalloc_array include/linux/slab.h:631 [inline]
kcalloc include/linux/slab.h:660 [inline]
hashtab_init+0xe5/0x240 security/selinux/ss/hashtab.c:41
policydb_read+0x781/0x61b0 security/selinux/ss/policydb.c:2531
security_load_policy+0x15b/0xf30 security/selinux/ss/services.c:2301
sel_write_load+0x382/0x1e70 security/selinux/selinuxfs.c:644
vfs_write+0x28f/0xad0 fs/read_write.c:592
ksys_write+0x12d/0x260 fs/read_write.c:647
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x33/0x80 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x6c/0xd6
RIP: 0033:0x7f0c2cf4c9c9
Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48
89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d
01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f0c2bb1a038 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 00007f0c2d168f80 RCX: 00007f0c2cf4c9c9
RDX: 0000000000000163 RSI: 0000000020000380 RDI: 0000000000000003
RBP: 00007f0c2cff91b6 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 00007f0c2d168f80 R15: 00007fff5b996ef8
</TASK>
irq event stamp: 1509
hardirqs last enabled at (1519): [<ffffffff812acfb8>]
__up_console_sem+0x78/0x80 kernel/printk/printk.c:257
hardirqs last disabled at (1528): [<ffffffff812acf9d>]
__up_console_sem+0x5d/0x80 kernel/printk/printk.c:255
softirqs last enabled at (798): [<ffffffff81166c99>] __do_softirq
kernel/softirq.c:592 [inline]
softirqs last enabled at (798): [<ffffffff81166c99>] invoke_softirq
kernel/softirq.c:432 [inline]
softirqs last enabled at (798): [<ffffffff81166c99>] __irq_exit_rcu
kernel/softirq.c:641 [inline]
softirqs last enabled at (798): [<ffffffff81166c99>]
irq_exit_rcu+0xe9/0x130 kernel/softirq.c:653
softirqs last disabled at (175): [<ffffffff81166c99>] __do_softirq
kernel/softirq.c:592 [inline]
softirqs last disabled at (175): [<ffffffff81166c99>] invoke_softirq
kernel/softirq.c:432 [inline]
softirqs last disabled at (175): [<ffffffff81166c99>] __irq_exit_rcu
kernel/softirq.c:641 [inline]
softirqs last disabled at (175): [<ffffffff81166c99>]
irq_exit_rcu+0xe9/0x130 kernel/softirq.c:653

------------[ cut here end]------------

Root Cause:

The crash is caused by a circular locking dependency detected within
the Linux kernel's Ext4 filesystem and quota management subsystems.
Specifically, the task is attempting to acquire the dq_lock
(&dquot->dq_lock) in the dquot_commit function (fs/quota/dquot.c:507)
while another task already holds the i_data_sem lock (&ei->i_data_sem)
in the ext4_map_blocks function (fs/ext4/inode.c:665). This creates a
circular dependency where each lock is waiting for the other to be
released, potentially leading to a deadlock. Additionally, a separate
warning is raised in mm/page_alloc.c:5398 during the __alloc_pages
function, which occurs while loading SELinux policies
(security/selinux/ss/policydb.c:2531). This memory allocation warning
suggests that the system is experiencing issues allocating memory in
the context of SELinux operations, possibly exacerbated by the locking
problem. The combination of improper lock ordering in Ext4's quota
handling and concurrent memory allocation failures indicates flaws in
the synchronization mechanisms and memory management within the
kernel. These issues can lead to system instability, including
deadlocks and memory allocation failures, ultimately causing kernel
panics and crashes. Addressing these problems would require revising
the lock acquisition order to eliminate circular dependencies and
ensuring robust memory allocation handling during critical security
operations.

Thank you for your time and attention.

Best regards

Wall




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux