ipc/mqueue, msg, sem: avoid relying on a stack reference past its expiry
Description
In the Linux kernel, the following vulnerability has been resolved:
ipc/mqueue, msg, sem: avoid relying on a stack reference past its expiry
do_mq_timedreceive calls wq_sleep with a stack local address. The sender (do_mq_timedsend) uses this address to later call pipelined_send.
This leads to a very hard to trigger race where a do_mq_timedreceive call might return and leave do_mq_timedsend to rely on an invalid address, causing the following crash:
RIP: 0010:wake_q_add_safe+0x13/0x60 Call Trace: __x64_sys_mq_timedsend+0x2a9/0x490 do_syscall_64+0x80/0x680 entry_SYSCALL_64_after_hwframe+0x44/0xa9 RIP: 0033:0x7f5928e40343
The race occurs as:
1. do_mq_timedreceive calls wq_sleep with the address of struct ext_wait_queue on function stack (aliased as ewq_addr here) - it holds a valid struct ext_wait_queue * as long as the stack has not been overwritten.
2. ewq_addr gets added to info->e_wait_q[RECV].list in wq_add, and do_mq_timedsend receives it via wq_get_first_waiter(info, RECV) to call __pipelined_op.
3. Sender calls __pipelined_op::smp_store_release(&this->state, STATE_READY). Here is where the race window begins. (this is ewq_addr.)
4. If the receiver wakes up now in do_mq_timedreceive::wq_sleep, it will see state == STATE_READY and break.
5. do_mq_timedreceive returns, and ewq_addr is no longer guaranteed to be a struct ext_wait_queue * since it was on do_mq_timedreceive's stack. (Although the address may not get overwritten until another function happens to touch it, which means it can persist around for an indefinite time.)
6. do_mq_timedsend::__pipelined_op() still believes ewq_addr is a struct ext_wait_queue *, and uses it to find a task_struct to pass to the wake_q_add_safe call. In the lucky case where nothing has overwritten ewq_addr yet, ewq_addr->task is the right task_struct. In the unlucky case, __pipelined_op::wake_q_add_safe gets handed a bogus address as the receiver's task_struct causing the crash.
do_mq_timedsend::__pipelined_op() should not dereference this after setting STATE_READY, as the receiver counterpart is now free to return. Change __pipelined_op to call wake_q_add_safe on the receiver's task_struct returned by get_task_struct, instead of dereferencing this which sits on the receiver's stack.
As Manfred pointed out, the race potentially also exists in ipc/msg.c::expunge_all and ipc/sem.c::wake_up_sem_queue_prepare. Fix those in the same way.
Affected products
84- osv-coords83 versionspkg:rpm/almalinux/kernel-rtpkg:rpm/almalinux/kernel-rt-corepkg:rpm/almalinux/kernel-rt-debugpkg:rpm/almalinux/kernel-rt-debug-corepkg:rpm/almalinux/kernel-rt-debug-develpkg:rpm/almalinux/kernel-rt-debug-kvmpkg:rpm/almalinux/kernel-rt-debug-modulespkg:rpm/almalinux/kernel-rt-debug-modules-extrapkg:rpm/almalinux/kernel-rt-develpkg:rpm/almalinux/kernel-rt-kvmpkg:rpm/almalinux/kernel-rt-modulespkg:rpm/almalinux/kernel-rt-modules-extrapkg:rpm/suse/kernel-64kb&distro=SUSE%20Enterprise%20Storage%207.1pkg:rpm/suse/kernel-64kb&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP3-LTSSpkg:rpm/suse/kernel-64kb&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP3-LTSSpkg:rpm/suse/kernel-default-base&distro=SUSE%20Enterprise%20Storage%207.1pkg:rpm/suse/kernel-default-base&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP2-LTSSpkg:rpm/suse/kernel-default-base&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP3-LTSSpkg:rpm/suse/kernel-default-base&distro=SUSE%20Linux%20Enterprise%20Micro%205.1pkg:rpm/suse/kernel-default-base&distro=SUSE%20Linux%20Enterprise%20Micro%205.2pkg:rpm/suse/kernel-default-base&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP2-LTSSpkg:rpm/suse/kernel-default-base&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP3-LTSSpkg:rpm/suse/kernel-default-base&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP2pkg:rpm/suse/kernel-default-base&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP3pkg:rpm/suse/kernel-default&distro=SUSE%20Enterprise%20Storage%207.1pkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20High%20Availability%20Extension%2015%20SP2pkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20High%20Availability%20Extension%2015%20SP3pkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP2-LTSSpkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP3-LTSSpkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20Live%20Patching%2015%20SP2pkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20Live%20Patching%2015%20SP3pkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20Micro%205.1pkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20Micro%205.2pkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP2-LTSSpkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP3-LTSSpkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP2pkg:rpm/suse/kernel-default&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP3pkg:rpm/suse/kernel-docs&distro=SUSE%20Enterprise%20Storage%207.1pkg:rpm/suse/kernel-docs&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP2-LTSSpkg:rpm/suse/kernel-docs&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP3-LTSSpkg:rpm/suse/kernel-docs&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP2-LTSSpkg:rpm/suse/kernel-docs&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP3-LTSSpkg:rpm/suse/kernel-docs&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP2pkg:rpm/suse/kernel-docs&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP3pkg:rpm/suse/kernel-livepatch-SLE15-SP2_Update_46&distro=SUSE%20Linux%20Enterprise%20Live%20Patching%2015%20SP2pkg:rpm/suse/kernel-livepatch-SLE15-SP2_Update_47&distro=SUSE%20Linux%20Enterprise%20Live%20Patching%2015%20SP2pkg:rpm/suse/kernel-livepatch-SLE15-SP2_Update_53&distro=SUSE%20Linux%20Enterprise%20Live%20Patching%2015%20SP2pkg:rpm/suse/kernel-livepatch-SLE15-SP3_Update_42&distro=SUSE%20Linux%20Enterprise%20Live%20Patching%2015%20SP3pkg:rpm/suse/kernel-livepatch-SLE15-SP3_Update_43&distro=SUSE%20Linux%20Enterprise%20Live%20Patching%2015%20SP3pkg:rpm/suse/kernel-livepatch-SLE15-SP3_Update_49&distro=SUSE%20Linux%20Enterprise%20Live%20Patching%2015%20SP3pkg:rpm/suse/kernel-obs-build&distro=SUSE%20Enterprise%20Storage%207.1pkg:rpm/suse/kernel-obs-build&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP2-LTSSpkg:rpm/suse/kernel-obs-build&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP3-LTSSpkg:rpm/suse/kernel-obs-build&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP2-LTSSpkg:rpm/suse/kernel-obs-build&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP3-LTSSpkg:rpm/suse/kernel-obs-build&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP2pkg:rpm/suse/kernel-obs-build&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP3pkg:rpm/suse/kernel-preempt&distro=SUSE%20Enterprise%20Storage%207.1pkg:rpm/suse/kernel-preempt&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP2-LTSSpkg:rpm/suse/kernel-preempt&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP3-LTSSpkg:rpm/suse/kernel-preempt&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP2-LTSSpkg:rpm/suse/kernel-preempt&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP3-LTSSpkg:rpm/suse/kernel-preempt&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP2pkg:rpm/suse/kernel-preempt&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP3pkg:rpm/suse/kernel-rt&distro=SUSE%20Linux%20Enterprise%20Micro%205.1pkg:rpm/suse/kernel-rt&distro=SUSE%20Linux%20Enterprise%20Micro%205.2pkg:rpm/suse/kernel-source&distro=SUSE%20Enterprise%20Storage%207.1pkg:rpm/suse/kernel-source&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP2-LTSSpkg:rpm/suse/kernel-source&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP3-LTSSpkg:rpm/suse/kernel-source&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP2-LTSSpkg:rpm/suse/kernel-source&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP3-LTSSpkg:rpm/suse/kernel-source&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP2pkg:rpm/suse/kernel-source&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP3pkg:rpm/suse/kernel-source-rt&distro=SUSE%20Linux%20Enterprise%20Micro%205.1pkg:rpm/suse/kernel-source-rt&distro=SUSE%20Linux%20Enterprise%20Micro%205.2pkg:rpm/suse/kernel-syms&distro=SUSE%20Enterprise%20Storage%207.1pkg:rpm/suse/kernel-syms&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP2-LTSSpkg:rpm/suse/kernel-syms&distro=SUSE%20Linux%20Enterprise%20High%20Performance%20Computing%2015%20SP3-LTSSpkg:rpm/suse/kernel-syms&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP2-LTSSpkg:rpm/suse/kernel-syms&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP3-LTSSpkg:rpm/suse/kernel-syms&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP2pkg:rpm/suse/kernel-syms&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2015%20SP3pkg:rpm/suse/kernel-zfcpdump&distro=SUSE%20Linux%20Enterprise%20Server%2015%20SP3-LTSS
< 4.18.0-553.8.1.rt7.349.el8_10+ 82 more
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 4.18.0-553.8.1.rt7.349.el8_10
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150300.59.153.2.150300.18.90.2
- (no CPE)range: < 5.3.18-150200.24.183.1.150200.9.93.2
- (no CPE)range: < 5.3.18-150300.59.153.2.150300.18.90.2
- (no CPE)range: < 5.3.18-150300.59.153.2.150300.18.90.2
- (no CPE)range: < 5.3.18-150300.59.153.2.150300.18.90.2
- (no CPE)range: < 5.3.18-150200.24.183.1.150200.9.93.2
- (no CPE)range: < 5.3.18-150300.59.153.2.150300.18.90.2
- (no CPE)range: < 5.3.18-150200.24.183.1.150200.9.93.2
- (no CPE)range: < 5.3.18-150300.59.153.2.150300.18.90.2
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 1-150200.5.3.2
- (no CPE)range: < 1-150200.5.3.3
- (no CPE)range: < 1-150200.5.3.1
- (no CPE)range: < 1-150300.7.3.2
- (no CPE)range: < 1-150300.7.3.5
- (no CPE)range: < 1-150300.7.3.2
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150300.161.1
- (no CPE)range: < 5.3.18-150300.161.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.2
- (no CPE)range: < 5.3.18-150300.161.1
- (no CPE)range: < 5.3.18-150300.161.1
- (no CPE)range: < 5.3.18-150300.59.153.1
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.1
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.1
- (no CPE)range: < 5.3.18-150200.24.183.1
- (no CPE)range: < 5.3.18-150300.59.153.1
- (no CPE)range: < 5.3.18-150300.59.153.2
Patches
0No patches discovered yet.
Vulnerability mechanics
AI mechanics synthesis has not run for this CVE yet.
References
3News mentions
0No linked articles in our index yet.