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 kernel-develUpgrade perfUpgrade kernel-rt-coreUpgrade kernel-debug-develUpgrade kernel-rt-debug-develUpgrade kernel-docUpgrade python3-perfUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-debug-kvmUpgrade kernel-tools-libs-develUpgrade kernel-cross-headersUpgrade kernel-modulesUpgrade kernel-zfcpdumpUpgrade kernel-debug-modules-extraUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-rt-develUpgrade kernel-zfcpdump-coreUpgrade kernel-coreUpgrade kernel-rt-debug-coreUpgrade kernel-abi-stablelistsUpgrade kernel-rt-modules-extraUpgrade kernel-headersUpgrade kernel-debug-coreUpgrade kernel-zfcpdump-modulesUpgrade kernel-rt-kvmUpgrade kernelUpgrade kernel-rt-debugUpgrade kernel-zfcpdump-develUpgrade kernel-toolsUpgrade kernel-tools-libsUpgrade kernel-rtUpgrade bpftoolUpgrade kernel-modules-extraUpgrade kernel-rt-modulesUpgrade kernel-rt-debug-modulesUpgrade kernel-debug-modulesUpgrade kernel-debug | Aug 12, 2024 | May 30, 2024 |
| Amazon Linux Ami 2 | — | Upgrade kernel-debuginfoUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-develUpgrade perfUpgrade bpftoolUpgrade kernel-tools-debuginfoUpgrade perf-debuginfoUpgrade kernel-tools-develUpgrade kernel-headersUpgrade bpftool-debuginfoUpgrade kernel-livepatch-5.15.160-104.158Upgrade kernel-debuginfo-common-x86_64Upgrade kernel-livepatch-5.10.217-205.860Upgrade python-perfUpgrade kernelUpgrade kernel-toolsUpgrade python-perf-debuginfo | Jun 12, 2024 | May 30, 2024 |
| Amazon_linux_2023 | — | Upgrade bpftool-debuginfoUpgrade kernel-libbpf-develUpgrade kernel-toolsUpgrade kernel-modules-extra-commonUpgrade kernel-libbpf-staticUpgrade kernel-headersUpgrade kernelUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-tools-develUpgrade perf-debuginfoUpgrade kernel-modules-extraUpgrade python3-perfUpgrade kernel-debuginfoUpgrade kernel-livepatch-6.1.91-99.172Upgrade kernel-tools-debuginfoUpgrade kernel-debuginfo-common-aarch64Upgrade python3-perf-debuginfoUpgrade kernel-libbpfUpgrade kernel-develUpgrade bpftoolUpgrade perf | Feb 17, 2025 | May 30, 2024 |
| Debian | — | Upgrade linux | Jun 4, 2024 | May 30, 2024 |
| Huawei Euleros 2_0_sp10 | — | Upgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade python3-perfUpgrade kernelUpgrade kernel-tools-libs | Oct 8, 2024 | May 30, 2024 |
| Huawei Euleros 2_0_sp11 | — | Upgrade python3-perfUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libsUpgrade kernelUpgrade bpftool | Oct 8, 2024 | May 30, 2024 |
| Huawei Euleros 2_0_sp12 | — | Upgrade python3-perfUpgrade kernel-tools-libsUpgrade bpftoolUpgrade kernel-toolsUpgrade kernelUpgrade kernel-abi-stablelists | Oct 9, 2024 | May 30, 2024 |
| Huawei Euleros 2_0_sp9 | — | Upgrade kernelUpgrade python3-perfUpgrade kernel-toolsUpgrade kernel-tools-libs | Oct 8, 2024 | May 30, 2024 |
| Oracle_linux | — | Upgrade kernel | Aug 16, 2024 | May 30, 2024 |
| Redhat_linux | — | Upgrade kernel-rtUpgrade kernelNo solution exists | Aug 12, 2024 | May 30, 2024 |
| Rocky_linux | — | Upgrade perf-debuginfoUpgrade kernel-debugUpgrade kernel-debuginfoUpgrade kernel-debug-debuginfoUpgrade kernel-rt-debug-develUpgrade kernel-modules-extraUpgrade kernel-tools-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-debug-modules-extraUpgrade kernel-headersUpgrade kernel-coreUpgrade kernel-modulesUpgrade kernel-debug-coreUpgrade kernel-rt-debug-modules-extraUpgrade kernel-debug-develUpgrade python3-perfUpgrade perfUpgrade kernel-rt-coreUpgrade kernel-rt-modulesUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-debug-kvmUpgrade kernel-rt-debug-debuginfoUpgrade kernel-debug-modulesUpgrade kernel-tools-libs-develUpgrade python3-perf-debuginfoUpgrade kernelUpgrade kernel-cross-headersUpgrade kernel-rt-debugUpgrade kernel-rt-debuginfoUpgrade kernel-tools-libsUpgrade kernel-rt-debuginfo-common-x86_64Upgrade kernel-develUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-rt-develUpgrade bpftoolUpgrade kernel-rtUpgrade kernel-rt-kvmUpgrade kernel-rt-debug-coreUpgrade kernel-toolsUpgrade kernel-rt-modules-extra | Aug 22, 2024 | May 30, 2024 |
| Suse | — | Upgrade kernel-rt-livepatch-develUpgrade kernel-rt_debug-vdsoUpgrade kernel-source-azureUpgrade kernel-default-base-rebuildUpgrade kernel-kvmsmallUpgrade gfs2-kmp-64kbUpgrade kernel-64kbUpgrade dtb-exynosUpgrade kernel-docs-htmlUpgrade kselftests-kmp-64kbUpgrade reiserfs-kmp-64kbUpgrade kernel-zfcpdumpUpgrade kernel-rt-optionalUpgrade kernel-syms-rtUpgrade kernel-debug-livepatch-develUpgrade kernel-default-vdsoUpgrade kernel-macrosUpgrade cluster-md-kmp-azureUpgrade kselftests-kmp-azureUpgrade kernel-rt-vdsoUpgrade kernel-rt-extraUpgrade kernel-obs-qaUpgrade dtb-broadcomUpgrade cluster-md-kmp-defaultUpgrade ocfs2-kmp-64kbUpgrade dtb-qcomUpgrade kernel-default-extraUpgrade dtb-apmUpgrade dtb-amlogicUpgrade kernel-sourceUpgrade kernel-kvmsmall-develUpgrade kernel-azure-livepatch-develUpgrade dtb-rockchipUpgrade ocfs2-kmp-rtUpgrade kernel-devel-azureUpgrade kernel-source-rtUpgrade gfs2-kmp-rtUpgrade kernel-azure-vdsoUpgrade dtb-lgUpgrade kselftests-kmp-defaultUpgrade reiserfs-kmp-azureUpgrade kernel-syms-azureUpgrade dlm-kmp-azureUpgrade kernel-kvmsmall-vdsoUpgrade kernel-rtUpgrade kernel-azure-develUpgrade dlm-kmp-64kbUpgrade kernel-obs-buildUpgrade kernel-default-livepatchUpgrade kernel-debug-develUpgrade reiserfs-kmp-defaultUpgrade kernel-azureUpgrade kernel-rt-livepatchUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-azure-extraUpgrade dtb-nvidiaUpgrade dtb-hisiliconUpgrade dlm-kmp-defaultUpgrade ocfs2-kmp-azureUpgrade kernel-64kb-livepatch-develUpgrade gfs2-kmp-defaultUpgrade dtb-appleUpgrade kernel-64kb-optionalUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-debugUpgrade dtb-allwinnerUpgrade cluster-md-kmp-rtUpgrade dtb-caviumUpgrade kernel-64kb-develUpgrade kernel-docsUpgrade dtb-mediatekUpgrade kernel-symsUpgrade kernel-rt-develUpgrade cluster-md-kmp-64kbUpgrade kernel-default-optionalUpgrade gfs2-kmp-azureUpgrade dtb-sprdUpgrade kernel-source-vanillaUpgrade kernel-rt_debugUpgrade kselftests-kmp-rtUpgrade kernel-default-livepatch-develUpgrade dtb-xilinxUpgrade dtb-freescaleUpgrade dtb-amazonUpgrade dtb-alteraUpgrade reiserfs-kmp-rtUpgrade kernel-azure-optionalUpgrade kernel-rt_debug-develUpgrade ocfs2-kmp-defaultUpgrade dtb-socionextUpgrade dtb-renesasUpgrade dtb-marvellUpgrade dtb-armUpgrade dtb-amdUpgrade kernel-debug-vdsoUpgrade kernel-default-develUpgrade kernel-default-baseUpgrade kernel-64kb-extraUpgrade kernel-devel-rtUpgrade kernel-defaultUpgrade kernel-develUpgrade dlm-kmp-rt | Dec 5, 2025 | Sep 10, 2024 |
| Ubuntu | — | Upgrade linux-image-5.4.0-1077-ibmUpgrade linux-image-oem-20.04cUpgrade linux-image-5.15.0-1064-gkeUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-5.15.0-1066-gcpUpgrade linux-image-generic-64kUpgrade linux-image-5.4.0-1042-iotUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-raspiUpgrade linux-image-5.15.0-118-generic-lpaeUpgrade linux-image-aws-lts-22.04Upgrade linux-image-ibm-lts-20.04Upgrade linux-image-raspi2Upgrade linux-image-ibm-classicUpgrade linux-image-5.4.0-1114-raspiUpgrade linux-image-6.8.0-1010-oemUpgrade linux-image-6.8.0-1012-gcpUpgrade linux-image-oem-20.04bUpgrade linux-image-oem-20.04dUpgrade linux-image-lowlatency-64kUpgrade linux-image-6.8.0-1012-azureUpgrade linux-image-gkeop-5.4Upgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-azureUpgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-1012-azure-fdeUpgrade linux-image-6.8.0-40-lowlatency-64kUpgrade linux-image-6.8.0-1011-nvidia-64kUpgrade linux-image-raspi-nolpaeUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-azure-lts-20.04Upgrade linux-image-ibm-lts-24.04Upgrade linux-image-5.15.0-1065-oracleUpgrade linux-image-5.15.0-118-lowlatency-64kUpgrade linux-image-6.8.0-1010-ibmUpgrade linux-image-ibmUpgrade linux-image-5.4.0-1134-gcpUpgrade linux-image-azure-lts-22.04Upgrade linux-image-nvidiaUpgrade linux-image-6.8.0-1013-awsUpgrade linux-image-6.8.0-1011-nvidiaUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-aws-lts-20.04Upgrade linux-image-generic-hwe-18.04Upgrade linux-image-generic-lpaeUpgrade linux-image-5.15.0-1070-azureUpgrade linux-image-5.15.0-118-genericUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-6.8.0-40-generic-64kUpgrade linux-image-awsUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-gke-5.15Upgrade linux-image-5.4.0-1135-azureUpgrade linux-image-kvmUpgrade linux-image-lowlatencyUpgrade linux-image-intel-iotgUpgrade linux-image-5.4.0-1130-awsUpgrade linux-image-intelUpgrade linux-image-5.15.0-118-generic-64kUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-5.4.0-1049-xilinx-zynqmpUpgrade linux-image-gkeopUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-5.4.0-1118-kvmUpgrade linux-image-oem-24.04Upgrade linux-image-6.8.0-1010-oracleUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-5.15.0-1062-nvidia-lowlatencyUpgrade linux-image-oem-24.04aUpgrade linux-image-genericUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-oracleUpgrade linux-image-6.8.0-1011-nvidia-lowlatencyUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-oem-osp1Upgrade linux-image-5.15.0-1064-kvmUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-6.8.0-1010-oracle-64kUpgrade linux-image-5.4.0-192-genericUpgrade linux-image-nvidia-6.8Upgrade linux-image-gkeUpgrade linux-image-5.15.0-1062-intel-iotgUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-virtual-hwe-18.04Upgrade linux-image-5.15.0-1070-azure-fdeUpgrade linux-image-5.15.0-1067-awsUpgrade linux-image-gkeop-5.15Upgrade linux-image-5.15.0-1060-ibmUpgrade linux-image-5.15.0-1062-nvidiaUpgrade linux-image-oracle-lts-20.04Upgrade linux-image-5.4.0-1097-gkeopUpgrade linux-image-bluefieldUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-6.8.0-40-genericUpgrade linux-image-6.8.0-40-lowlatencyUpgrade linux-image-5.4.0-192-lowlatencyUpgrade linux-image-gcpUpgrade linux-image-oemUpgrade linux-image-6.8.0-1011-nvidia-lowlatency-64kUpgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-5.4.0-192-generic-lpaeUpgrade linux-image-5.15.0-1060-raspiUpgrade linux-image-virtualUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-5.15.0-1050-gkeopUpgrade linux-image-azure-cvmUpgrade linux-image-5.4.0-1090-bluefieldUpgrade linux-image-5.15.0-118-lowlatencyUpgrade linux-image-6.8.0-1008-gkeUpgrade linux-image-oem-20.04Upgrade linux-image-6.8.0-1009-raspiUpgrade linux-image-nvidia-64kUpgrade linux-image-5.15.0-1035-xilinx-zynqmpUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-5.4.0-1129-oracleUpgrade linux-image-oracle-64k | 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