blob: cf2562c9ff5dfdf8cef6a72206b8ffbd576e14af [file] [log] [blame]
From bippy-1.2.0 Mon Sep 17 00:00:00 2001
From: Greg Kroah-Hartman <gregkh@kernel.org>
To: <linux-cve-announce@vger.kernel.org>
Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org>
Subject: CVE-2024-36927: ipv4: Fix uninit-value access in __ip_make_skb()
Description
===========
In the Linux kernel, the following vulnerability has been resolved:
ipv4: Fix uninit-value access in __ip_make_skb()
KMSAN reported uninit-value access in __ip_make_skb() [1]. __ip_make_skb()
tests HDRINCL to know if the skb has icmphdr. However, HDRINCL can cause a
race condition. If calling setsockopt(2) with IP_HDRINCL changes HDRINCL
while __ip_make_skb() is running, the function will access icmphdr in the
skb even if it is not included. This causes the issue reported by KMSAN.
Check FLOWI_FLAG_KNOWN_NH on fl4->flowi4_flags instead of testing HDRINCL
on the socket.
Also, fl4->fl4_icmp_type and fl4->fl4_icmp_code are not initialized. These
are union in struct flowi4 and are implicitly initialized by
flowi4_init_output(), but we should not rely on specific union layout.
Initialize these explicitly in raw_sendmsg().
[1]
BUG: KMSAN: uninit-value in __ip_make_skb+0x2b74/0x2d20 net/ipv4/ip_output.c:1481
__ip_make_skb+0x2b74/0x2d20 net/ipv4/ip_output.c:1481
ip_finish_skb include/net/ip.h:243 [inline]
ip_push_pending_frames+0x4c/0x5c0 net/ipv4/ip_output.c:1508
raw_sendmsg+0x2381/0x2690 net/ipv4/raw.c:654
inet_sendmsg+0x27b/0x2a0 net/ipv4/af_inet.c:851
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg+0x274/0x3c0 net/socket.c:745
__sys_sendto+0x62c/0x7b0 net/socket.c:2191
__do_sys_sendto net/socket.c:2203 [inline]
__se_sys_sendto net/socket.c:2199 [inline]
__x64_sys_sendto+0x130/0x200 net/socket.c:2199
do_syscall_64+0xd8/0x1f0 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x6d/0x75
Uninit was created at:
slab_post_alloc_hook mm/slub.c:3804 [inline]
slab_alloc_node mm/slub.c:3845 [inline]
kmem_cache_alloc_node+0x5f6/0xc50 mm/slub.c:3888
kmalloc_reserve+0x13c/0x4a0 net/core/skbuff.c:577
__alloc_skb+0x35a/0x7c0 net/core/skbuff.c:668
alloc_skb include/linux/skbuff.h:1318 [inline]
__ip_append_data+0x49ab/0x68c0 net/ipv4/ip_output.c:1128
ip_append_data+0x1e7/0x260 net/ipv4/ip_output.c:1365
raw_sendmsg+0x22b1/0x2690 net/ipv4/raw.c:648
inet_sendmsg+0x27b/0x2a0 net/ipv4/af_inet.c:851
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg+0x274/0x3c0 net/socket.c:745
__sys_sendto+0x62c/0x7b0 net/socket.c:2191
__do_sys_sendto net/socket.c:2203 [inline]
__se_sys_sendto net/socket.c:2199 [inline]
__x64_sys_sendto+0x130/0x200 net/socket.c:2199
do_syscall_64+0xd8/0x1f0 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x6d/0x75
CPU: 1 PID: 15709 Comm: syz-executor.7 Not tainted 6.8.0-11567-gb3603fcb79b1 #25
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-1.fc39 04/01/2014
The Linux kernel CVE team has assigned CVE-2024-36927 to this issue.
Affected and fixed versions
===========================
Issue introduced in 6.1.28 with commit fc60067260c20da8cddcf968bec47416f3e2cde2 and fixed in 6.1.140 with commit 55bf541e018b76b3750cb6c6ea18c46e1ac5562e
Issue introduced in 6.4 with commit 99e5acae193e369b71217efe6f1dad42f3f18815 and fixed in 6.6.31 with commit 5db08343ddb1b239320612036c398e4e1bb52818
Issue introduced in 6.4 with commit 99e5acae193e369b71217efe6f1dad42f3f18815 and fixed in 6.8.10 with commit f5c603ad4e6fcf42f84053e882ebe20184bb309e
Issue introduced in 6.4 with commit 99e5acae193e369b71217efe6f1dad42f3f18815 and fixed in 6.9 with commit fc1092f51567277509563800a3c56732070b6aa4
Issue introduced in 4.14.315 with commit dc4e3bb0710178c8d03fc43064e0a71fe7440cdd
Issue introduced in 4.19.283 with commit 022ea4374c319690c804706bda9dc42946d1556d
Issue introduced in 5.4.243 with commit 27c468ec1af113f6ae94fb5378f65e6038bd16e7
Issue introduced in 5.10.180 with commit 566785731c6dd41ef815196ddc36d1ae30a63763
Issue introduced in 5.15.111 with commit a54ec573d9b81b05d368f8e6edc1b3e49f688658
Issue introduced in 6.2.15 with commit 32a5a13d556e4f804e5a447a08c70b172d600707
Issue introduced in 6.3.2 with commit 9e3c96aed8fe32907e0a4bca05aad457629a820c
Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.
Unaffected versions might change over time as fixes are backported to
older supported kernel versions. The official CVE entry at
https://cve.org/CVERecord/?id=CVE-2024-36927
will be updated if fixes are backported, please check that for the most
up to date information about this issue.
Affected files
==============
The file(s) affected by this issue are:
net/ipv4/ip_output.c
net/ipv4/raw.c
Mitigation
==========
The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes. Individual
changes are never tested alone, but rather are part of a larger kernel
release. Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all. If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
https://git.kernel.org/stable/c/55bf541e018b76b3750cb6c6ea18c46e1ac5562e
https://git.kernel.org/stable/c/5db08343ddb1b239320612036c398e4e1bb52818
https://git.kernel.org/stable/c/f5c603ad4e6fcf42f84053e882ebe20184bb309e
https://git.kernel.org/stable/c/fc1092f51567277509563800a3c56732070b6aa4