In the Linux kernel, the following vulnerability has been resolved:
nsh: Restore skb->{protocol,data,mac_header} for outer header in nsh_gso_segment().
syzbot triggered various splats (see [0] and links) by a crafted GSO packet of VIRTIO_NET_HDR_GSO_UDP layering the following protocols:
ETH_P_8021AD + ETH_P_NSH + ETH_P_IPV6 + IPPROTO_UDP
NSH can encapsulate IPv4, IPv6, Ethernet, NSH, and MPLS. As the inner protocol can be Ethernet, NSH GSO handler, nsh_gso_segment(), calls skb_mac_gso_segment() to invoke inner protocol GSO handlers.
nsh_gso_segment() does the following for the original skb before calling skb_mac_gso_segment()
1. reset skb->network_header 2. save the original skb->{mac_heaeder,mac_len} in a local variable 3. pull the NSH header 4. resets skb->mac_header 5. set up skb->mac_len and skb->protocol for the inner protocol.
and does the following for the segmented skb
6. set ntohs(ETH_P_NSH) to skb->protocol 7. push the NSH header 8. restore skb->mac_header 9. set skb->mac_header + mac_len to skb->network_header 10. restore skb->mac_len
There are two problems in 6-7 and 8-9.
(a) After 6 & 7, skb->data points to the NSH header, so the outer header (ETH_P_8021AD in this case) is stripped when skb is sent out of netdev.
Also, if NSH is encapsulated by NSH + Ethernet (so NSH-Ethernet-NSH), skb_pull() in the first nsh_gso_segment() will make skb->data point to the middle of the outer NSH or Ethernet header because the Ethernet header is not pulled by the second nsh_gso_segment().
(b) While restoring skb->{mac_header,network_header} in 8 & 9, nsh_gso_segment() does not assume that the data in the linear buffer is shifted.
However, udp6_ufo_fragment() could shift the data and change skb->mac_header accordingly as demonstrated by syzbot.
If this happens, even the restored skb->mac_header points to the middle of the outer header.
It seems nsh_gso_segment() has never worked with outer headers so far.
At the end of nsh_gso_segment(), the outer header must be restored for the segmented skb, instead of the NSH header.
To do that, let's calculate the outer header position relatively from the inner header and set skb->{data,mac_header,protocol} properly.
[0]: BUG: KMSAN: uninit-value in ipvlan_process_outbound drivers/net/ipvlan/ipvlan_core.c:524 [inline] BUG: KMSAN: uninit-value in ipvlan_xmit_mode_l3 drivers/net/ipvlan/ipvlan_core.c:602 [inline] BUG: KMSAN: uninit-value in ipvlan_queue_xmit+0xf44/0x16b0 drivers/net/ipvlan/ipvlan_core.c:668 ipvlan_process_outbound drivers/net/ipvlan/ipvlan_core.c:524 [inline] ipvlan_xmit_mode_l3 drivers/net/ipvlan/ipvlan_core.c:602 [inline] ipvlan_queue_xmit+0xf44/0x16b0 drivers/net/ipvlan/ipvlan_core.c:668 ipvlan_start_xmit+0x5c/0x1a0 drivers/net/ipvlan/ipvlan_main.c:222 __netdev_start_xmit include/linux/netdevice.h:4989 [inline] netdev_start_xmit include/linux/netdevice.h:5003 [inline] xmit_one net/core/dev.c:3547 [inline] dev_hard_start_xmit+0x244/0xa10 net/core/dev.c:3563 __dev_queue_xmit+0x33ed/0x51c0 net/core/dev.c:4351 dev_queue_xmit include/linux/netdevice.h:3171 [inline] packet_xmit+0x9c/0x6b0 net/packet/af_packet.c:276 packet_snd net/packet/af_packet.c:3081 [inline] packet_sendmsg+0x8aef/0x9f10 net/packet/af_packet.c:3113 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg net/socket.c:745 [inline] __sys_sendto+0x735/0xa10 net/socket.c:2191 __do_sys_sendto net/socket.c:2203 [inline] __se_sys_sendto net/socket.c:2199 [inline] __x64_sys_sendto+0x125/0x1c0 net/socket.c:2199 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x63/0x6b
Uninit was created at: slab_post_alloc_hook mm/slub.c:3819 [inline] slab_alloc_node mm/slub.c:3860 [inline] __do_kmalloc_node mm/slub.c:3980 [inline] __kmalloc_node_track_caller+0x705/0x1000 mm/slub.c:4001 kmalloc_reserve+0x249/0x4a0 net/core/skbuff.c:582 __ ---truncated---
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade bpftoolUpgrade kernel-modules-extraUpgrade kernel-rt-debugUpgrade kernel-rt-modules-extraUpgrade kernel-zfcpdump-coreUpgrade kernel-debug-modulesUpgrade kernel-tools-libsUpgrade kernel-rt-develUpgrade kernel-zfcpdump-develUpgrade kernel-debug-modules-extraUpgrade kernel-zfcpdump-modules-extraUpgrade kernelUpgrade kernel-modulesUpgrade kernel-zfcpdump-modulesUpgrade kernel-cross-headersUpgrade kernel-coreUpgrade kernel-headersUpgrade kernel-debug-coreUpgrade kernel-toolsUpgrade kernel-rt-debug-modulesUpgrade kernel-debugUpgrade kernel-rt-debug-coreUpgrade kernel-rt-kvmUpgrade kernel-abi-stablelistsUpgrade kernel-zfcpdumpUpgrade kernel-rt-modulesUpgrade kernel-rtUpgrade kernel-docUpgrade python3-perfUpgrade kernel-tools-libs-develUpgrade kernel-rt-coreUpgrade kernel-develUpgrade perfUpgrade kernel-rt-debug-kvmUpgrade kernel-rt-debug-develUpgrade kernel-rt-debug-modules-extraUpgrade kernel-debug-devel | Aug 12, 2024 | May 30, 2024 |
| Amazon Linux Ami 2 | — | Upgrade kernelUpgrade kernel-headersUpgrade kernel-livepatch-5.15.160-104.158Upgrade bpftool-debuginfoUpgrade python-perf-debuginfoUpgrade kernel-livepatch-5.10.217-205.860Upgrade kernel-debuginfo-common-x86_64Upgrade kernel-toolsUpgrade python-perfUpgrade bpftoolUpgrade perf-debuginfoUpgrade perfUpgrade kernel-develUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-tools-debuginfoUpgrade kernel-tools-develUpgrade kernel-debuginfo | Jun 12, 2024 | May 30, 2024 |
| Amazon_linux_2023 | — | Upgrade bpftool-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-libbpf-develUpgrade kernel-libbpf-staticUpgrade kernel-toolsUpgrade kernel-headersUpgrade kernelUpgrade kernel-modules-extra-commonUpgrade perfUpgrade kernel-develUpgrade kernel-debuginfoUpgrade kernel-livepatch-6.1.91-99.172Upgrade kernel-tools-debuginfoUpgrade kernel-libbpfUpgrade python3-perf-debuginfoUpgrade kernel-tools-develUpgrade kernel-debuginfo-common-aarch64Upgrade bpftoolUpgrade kernel-modules-extraUpgrade perf-debuginfoUpgrade python3-perf | Feb 17, 2025 | May 30, 2024 |
| Debian | — | Upgrade linux | Jun 4, 2024 | May 30, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernelUpgrade python3-perfUpgrade kernel-tools-libsUpgrade kernel-abi-stablelistsUpgrade kernel-tools | Oct 8, 2024 | May 30, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade bpftoolUpgrade kernelUpgrade kernel-tools-libsUpgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade python3-perf | Oct 8, 2024 | May 30, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-tools-libsUpgrade bpftoolUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade kernelUpgrade python3-perf | Oct 9, 2024 | May 30, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernel-tools-libsUpgrade kernelUpgrade python3-perfUpgrade kernel-tools | Oct 8, 2024 | May 30, 2024 |
| Oracle_linux | — | Upgrade kernel | Aug 16, 2024 | May 30, 2024 |
| Redhat_linux | — | No solution existsUpgrade kernelUpgrade kernel-rt | Aug 12, 2024 | May 30, 2024 |
| Rocky_linux | — | Upgrade kernel-tools-libsUpgrade kernel-tools-libs-develUpgrade kernel-rt-develUpgrade kernel-cross-headersUpgrade kernel-debug-modulesUpgrade kernel-rt-debugUpgrade kernel-rt-debuginfoUpgrade kernel-rt-kvmUpgrade bpftoolUpgrade python3-perf-debuginfoUpgrade kernel-rt-modules-extraUpgrade kernel-rt-debug-debuginfoUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-rt-debug-coreUpgrade kernelUpgrade kernel-toolsUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-develUpgrade kernel-rtUpgrade kernel-debuginfoUpgrade kernel-modules-extraUpgrade kernel-rt-modulesUpgrade kernel-headersUpgrade perf-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-tools-debuginfoUpgrade kernel-debug-debuginfoUpgrade kernel-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-debug-develUpgrade python3-perfUpgrade kernel-rt-coreUpgrade kernel-coreUpgrade kernel-rt-debug-develUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-debug-modules-extraUpgrade kernel-debugUpgrade kernel-rt-debug-kvmUpgrade kernel-debug-coreUpgrade perf | Aug 22, 2024 | May 30, 2024 |
| Suse | — | Upgrade kernel-rt-livepatchUpgrade reiserfs-kmp-defaultUpgrade dtb-allwinnerUpgrade kernel-debugUpgrade dtb-caviumUpgrade kernel-default-livepatchUpgrade kernel-rt_debugUpgrade kernel-rt_debug-livepatch-develUpgrade dtb-appleUpgrade cluster-md-kmp-rtUpgrade gfs2-kmp-azureUpgrade kernel-64kb-optionalUpgrade kernel-develUpgrade dtb-marvellUpgrade kernel-rt_debug-develUpgrade dtb-armUpgrade ocfs2-kmp-defaultUpgrade dtb-renesasUpgrade kernel-azure-optionalUpgrade kernel-default-optionalUpgrade dtb-sprdUpgrade reiserfs-kmp-rtUpgrade dtb-xilinxUpgrade kernel-debug-develUpgrade dtb-socionextUpgrade dlm-kmp-rtUpgrade ocfs2-kmp-azureUpgrade dtb-alteraUpgrade dtb-amazonUpgrade kernel-kvmsmall-livepatch-develUpgrade dtb-amdUpgrade gfs2-kmp-defaultUpgrade kernel-64kb-livepatch-develUpgrade kernel-azureUpgrade dtb-freescaleUpgrade kernel-default-develUpgrade kernel-defaultUpgrade kernel-default-baseUpgrade kernel-debug-vdsoUpgrade kernel-devel-rtUpgrade kernel-64kb-extraUpgrade kernel-azure-extraUpgrade kernel-default-livepatch-develUpgrade kernel-docsUpgrade dlm-kmp-defaultUpgrade kernel-symsUpgrade dtb-hisiliconUpgrade kernel-source-vanillaUpgrade kselftests-kmp-rtUpgrade kernel-rt-develUpgrade cluster-md-kmp-64kbUpgrade kernel-64kb-develUpgrade dtb-nvidiaUpgrade dtb-mediatekUpgrade kernel-default-extraUpgrade ocfs2-kmp-64kbUpgrade cluster-md-kmp-defaultUpgrade dtb-qcomUpgrade dtb-amlogicUpgrade kernel-sourceUpgrade dtb-apmUpgrade kernel-64kbUpgrade kernel-docs-htmlUpgrade ocfs2-kmp-rtUpgrade kselftests-kmp-64kbUpgrade kernel-source-azureUpgrade kernel-rt_debug-vdsoUpgrade kernel-rt-livepatch-develUpgrade kernel-kvmsmall-vdsoUpgrade kernel-default-vdsoUpgrade kernel-debug-livepatch-develUpgrade dtb-broadcomUpgrade kernel-zfcpdumpUpgrade kernel-syms-rtUpgrade kernel-macrosUpgrade kernel-rt-optionalUpgrade dtb-lgUpgrade reiserfs-kmp-64kbUpgrade gfs2-kmp-64kbUpgrade kernel-kvmsmallUpgrade dtb-exynosUpgrade cluster-md-kmp-azureUpgrade kernel-default-base-rebuildUpgrade dtb-rockchipUpgrade kernel-obs-qaUpgrade kernel-obs-buildUpgrade kselftests-kmp-azureUpgrade kernel-rt-extraUpgrade kernel-azure-livepatch-develUpgrade kernel-rtUpgrade kernel-syms-azureUpgrade gfs2-kmp-rtUpgrade kernel-source-rtUpgrade kernel-azure-vdsoUpgrade kernel-rt-vdsoUpgrade reiserfs-kmp-azureUpgrade kselftests-kmp-defaultUpgrade dlm-kmp-64kbUpgrade kernel-azure-develUpgrade dlm-kmp-azureUpgrade kernel-devel-azureUpgrade kernel-kvmsmall-devel | Dec 5, 2025 | Sep 10, 2024 |
| Ubuntu | — | Upgrade linux-image-5.4.0-1134-gcpUpgrade linux-image-6.8.0-1012-azureUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-6.8.0-1011-nvidia-64kUpgrade linux-image-5.4.0-1114-raspiUpgrade linux-image-generic-64kUpgrade linux-image-5.15.0-1066-gcpUpgrade linux-image-6.8.0-1010-oemUpgrade linux-image-5.4.0-1135-azureUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-kvmUpgrade linux-image-nvidiaUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-6.8.0-1011-nvidiaUpgrade linux-image-generic-lpaeUpgrade linux-image-5.15.0-1070-azureUpgrade linux-image-azureUpgrade linux-image-6.8.0-40-lowlatency-64kUpgrade linux-image-lowlatency-64kUpgrade linux-image-azure-lts-22.04Upgrade linux-image-5.4.0-1042-iotUpgrade linux-image-oem-20.04bUpgrade linux-image-5.15.0-118-genericUpgrade linux-image-gkeop-5.4Upgrade linux-image-6.8.0-1012-gcpUpgrade linux-image-raspiUpgrade linux-image-gke-5.15Upgrade linux-image-azure-fdeUpgrade linux-image-aws-lts-22.04Upgrade linux-image-awsUpgrade linux-image-ibm-classicUpgrade linux-image-raspi2Upgrade linux-image-5.15.0-1064-gkeUpgrade linux-image-azure-lts-20.04Upgrade linux-image-virtual-hwe-20.04Upgrade linux-image-oem-20.04cUpgrade linux-image-6.8.0-40-generic-64kUpgrade linux-image-raspi-nolpaeUpgrade linux-image-ibm-lts-20.04Upgrade linux-image-generic-hwe-24.04Upgrade linux-image-5.15.0-118-lowlatency-64kUpgrade linux-image-5.15.0-1065-oracleUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-6.8.0-1013-awsUpgrade linux-image-6.8.0-1012-azure-fdeUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-ibmUpgrade linux-image-5.4.0-1077-ibmUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-aws-lts-20.04Upgrade linux-image-oem-20.04dUpgrade linux-image-5.15.0-118-generic-lpaeUpgrade linux-image-6.8.0-1010-ibmUpgrade linux-image-lowlatencyUpgrade linux-image-generic-hwe-18.04Upgrade linux-image-nvidia-64k-6.8Upgrade linux-image-xilinx-zynqmpUpgrade linux-image-5.4.0-192-generic-lpaeUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-oem-20.04Upgrade linux-image-6.8.0-1011-nvidia-lowlatency-64kUpgrade linux-image-6.8.0-1011-nvidia-lowlatencyUpgrade linux-image-gkeUpgrade linux-image-gkeopUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-5.15.0-1064-kvmUpgrade linux-image-oracleUpgrade linux-image-5.15.0-1067-awsUpgrade linux-image-5.4.0-192-genericUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-5.15.0-1060-ibmUpgrade linux-image-gkeop-5.15Upgrade linux-image-6.8.0-1010-oracle-64kUpgrade linux-image-5.15.0-1070-azure-fdeUpgrade linux-image-oem-24.04Upgrade linux-image-intel-iotgUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-oracle-lts-20.04Upgrade linux-image-5.4.0-1049-xilinx-zynqmpUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-intelUpgrade linux-image-5.4.0-1129-oracleUpgrade linux-image-5.15.0-1050-gkeopUpgrade linux-image-5.15.0-1035-xilinx-zynqmpUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-5.4.0-1090-bluefieldUpgrade linux-image-azure-cvmUpgrade linux-image-6.8.0-1009-raspiUpgrade linux-image-5.15.0-118-generic-64kUpgrade linux-image-5.15.0-118-lowlatencyUpgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-virtualUpgrade linux-image-6.8.0-1008-gkeUpgrade linux-image-nvidia-64kUpgrade linux-image-5.15.0-1060-raspiUpgrade linux-image-oem-24.04aUpgrade linux-image-genericUpgrade linux-image-5.15.0-1062-intel-iotgUpgrade linux-image-5.4.0-1118-kvmUpgrade linux-image-5.4.0-1130-awsUpgrade linux-image-oracle-64kUpgrade linux-image-5.15.0-1062-nvidia-lowlatencyUpgrade linux-image-6.8.0-1010-oracleUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-virtual-hwe-18.04Upgrade linux-image-nvidia-6.8Upgrade linux-image-bluefieldUpgrade linux-image-5.15.0-1062-nvidiaUpgrade linux-image-oem-osp1Upgrade linux-image-5.4.0-1097-gkeopUpgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-oemUpgrade linux-image-6.8.0-40-genericUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-5.4.0-192-lowlatencyUpgrade linux-image-6.8.0-40-lowlatencyUpgrade linux-image-gcp | Aug 9, 2024 | May 30, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | May 30, 2024 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub