Linux: net/mctp: publish the mctp_dev only after it is initialised
What fixes it
- 288ef37e0c463192dbb6436e61cdc07ce666dcb9LinuxCVE List
- 63120572edde85bb2b70b0ed4d4817ed52247613LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
net/mctp: publish the mctp_dev only after it is initialised
mctp_add_dev() links the new mctp_dev into dev->mctp_ptr before mdev->dev is assigned, so a reader that picks the device up in that window dereferences a net_device pointer that is still NULL:
KASAN: null-ptr-deref in range [0x00000000000000b0-0x00000000000000b7] Call Trace: <TASK> ? __pfx_mctp_sendmsg (./include/linux/sockptr.h:49) ? __pfx_mctp_dst_output (net/mctp/route.c:41) ? selinux_socket_sendmsg (security/selinux/hooks.c:5278) ____sys_sendmsg (net/socket.c:775 (discriminator 1) net/socket.c:790 (discriminator 1) net/socket.c:2684 (discriminator 1)) ? __pfx_____sys_sendmsg (net/socket.c:1131) ? __pfx_copy_msghdr_from_user (net/socket.c:2590) ? update_cfs_rq_load_avg (kernel/sched/fair.c:5478) ___sys_sendmsg (net/socket.c:2738) ? __pfx____sys_sendmsg (net/socket.c:2625) ? perf_event_task_tick (./include/linux/rcupdate.h:838) ? sched_tick (kernel/sched/core.c:5818) ? clockevents_program_event (kernel/time/clockevents.c:372) ? fdget (./include/linux/rcupdate.h:873 fs/file.c:1100) __sys_sendmsg (net/socket.c:2770) ? __pfx___sys_sendmsg (net/socket.c:2751) do_syscall_64 (arch/x86/entry/syscall_64.c:63) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121) </TASK>
Fix by publishing only once the object is fully initialised: __mctp_dev_get() runs under rcu_read_lock() only and hands this object to readers as soon as mctp_ptr is assigned, so they must never observe mdev->dev == NULL.
Text from CVE List
Affected versions 12
- Linuxaffected: 583be982d93479ea3d85091b0fd0b01201ede87d before 288ef37e0c463192dbb6436e61cdc07ce666dcb9CVE List
- Linuxaffected: 583be982d93479ea3d85091b0fd0b01201ede87d before af6e4f931afc2d670d133aa2bedc8b6e3753c618CVE List
- Linuxaffected: 583be982d93479ea3d85091b0fd0b01201ede87d before 63120572edde85bb2b70b0ed4d4817ed52247613CVE List
- Linuxaffected: 583be982d93479ea3d85091b0fd0b01201ede87d before f37f42e6e039a48c2dcf6c079b9f7fbc864ab7efCVE List
- Linuxaffected: 583be982d93479ea3d85091b0fd0b01201ede87d before aadf655e8ea9a8ffa24bb8d69f504572e8d18181CVE List
- Linuxaffected: 5.15CVE List
- Linuxunaffected: all versions before 5.15CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.113 through 6.12.*CVE List
- Linuxunaffected: 6.18.56 through 6.18.*CVE List
- Linuxunaffected: 7.2.10 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/288ef37e0c463192dbb6436e61cdc07ce666dcb9Referencevia CVE List
- git.kernel.org/stable/c/af6e4f931afc2d670d133aa2bedc8b6e3753c618Referencevia CVE List
- git.kernel.org/stable/c/63120572edde85bb2b70b0ed4d4817ed52247613Referencevia CVE List
- git.kernel.org/stable/c/f37f42e6e039a48c2dcf6c079b9f7fbc864ab7efReferencevia CVE List
- git.kernel.org/stable/c/aadf655e8ea9a8ffa24bb8d69f504572e8d18181Referencevia CVE List