CVE-2024-36927CWE-362CWE-908

CVE-2024-36927

Medium · published May 30, 2024

CVSS v3.1
4.7
EPSS
0%
Percentile
7.0
In the wild
Unconfirmed
What it is

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 record
Technical detail
CVSS v3.1
4.7 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00178 · 7.0th percentile
Weaknesses
CWE-362 · Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition'); CWE-908 · Use of Uninitialized Resource
Published
2024-05-30T20:15Z
Affected products (15)
ProductVersionsFixed in
linux/linux_kernel≥ 4.14.315, < 4.154.15
linux/linux_kernel≥ 4.19.283, < 4.204.20
linux/linux_kernel≥ 5.4.243, < 5.55.5
linux/linux_kernel≥ 5.10.180, < 5.115.11
linux/linux_kernel≥ 5.15.111, < 5.165.16
linux/linux_kernel≥ 6.1.28, < 6.26.2
linux/linux_kernel≥ 6.2.15, < 6.36.3
linux/linux_kernel≥ 6.3.2, < 6.6.316.6.31
linux/linux_kernel≥ 6.7, < 6.8.106.8.10
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (12)
EPSS history
Timeline
  • 30 MAY 15:29Z
    ipv4: Fix uninit-value access in __ip_make_skb()
    cvelistv5