Cloudanix VulnDB

CVE-2023-54114

None

CVSS

—

EPSS

0.2%

Published

Dec 24, 2025

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A bug in the Linux kernel's network handling can cause the entire system to crash when processing certain network packets, disrupting services until fixed.

Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Moderate
Impact
Denial Of Service
Component
OS kernel
Class
Memory Corruption
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

Incorrect mac_header restoration in nsh_gso_segment() error unwind path allows skb_push to exceed headroom, triggering skb_panic when inner GSO handlers reset network_header.

Why it matters to the business

Kernel crashes on systems processing NSH-encapsulated traffic with GSO enabled, causing denial of service and potential loss of network connectivity or stability for dependent services.

How an attack unfolds

An attacker sends specially crafted packets that trigger NSH GSO segmentation followed by an inner protocol GSO failure (such as MPLS), causing the unwind logic to compute an invalid mac_header that leads to a kernel panic on skb_push.

How to fix it

Update the Linux kernel to the commit 2f88c8d38ecf5ed0273f99a067246899ba499eb2 or later stable releases that contain the corrected mac_offset handling in nsh_gso_segment().

How to confirm the fix worked

Confirm the presence of the fix commit in the running kernel source or verify that nsh_gso_segment no longer uses the nhoff calculation for mac_header restoration on GSO error paths.

Typical attack path

  1. Craft packet with NSH header and inner protocol that exercises GSO
  2. Trigger skb_mac_gso_segment which calls inner GSO handler
  3. Inner handler resets network_header and returns error
  4. nsh_gso_segment error unwind computes mac_header from stale network_header offset
  5. skb_push in unwind path exceeds headroom and panics

How to detect it

Search kernel logs and dmesg for skb_panic traces referencing nsh_gso_segment, skb_push, and skb_mac_gso_segment; inspect crash dumps for invalid mac_header values after NSH GSO paths.

  • skb_panic+0xda/0xe0
  • nsh_gso_segment+0x4f3/0x570
  • skb_push+0x91/0xa0
  • invalid opcode: 0000 [#1] PREEMPT SMP KASAN

What your security team should do

  • Prioritize kernel upgrades on systems exposing NSH or GSO paths to untrusted traffic
  • Monitor for skb_panic call traces involving nsh_gso_segment
  • Temporarily disable GSO for affected interfaces if immediate patching is not feasible

The record

In the Linux kernel, the following vulnerability has been resolved: net: nsh: Use correct mac_offset to unwind gso skb in nsh_gso_segment() As the call trace shows, skb_panic was caused by wrong skb->mac_header in nsh_gso_segment(): invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI CPU: 3 PID: 2737 Comm: syz Not tainted 6.3.0-next-20230505 #1 RIP: 0010:skb_panic+0xda/0xe0 call Trace: skb_push+0x91/0xa0 nsh_gso_segment+0x4f3/0x570 skb_mac_gso_segment+0x19e/0x270 __skb_gso_segment+0x1e8/0x3c0 validate_xmit_skb+0x452/0x890 validate_xmit_skb_list+0x99/0xd0 sch_direct_xmit+0x294/0x7c0 __dev_queue_xmit+0x16f0/0x1d70 packet_xmit+0x185/0x210 packet_snd+0xc15/0x1170 packet_sendmsg+0x7b/0xa0 sock_sendmsg+0x14f/0x160 The root cause is: nsh_gso_segment() use skb->network_header - nhoff to reset mac_header in skb_gso_error_unwind() if inner-layer protocol gso fails. However, skb->network_header may be reset by inner-layer protocol gso function e.g. mpls_gso_segment. skb->mac_header reset by the inaccurate network_header will be larger than skb headroom. nsh_gso_segment nhoff = skb->network_header - skb->mac_header; __skb_pull(skb,nsh_len) skb_mac_gso_segment mpls_gso_segment skb_reset_network_header(skb);//skb->network_header+=nsh_len return -EINVAL; skb_gso_error_unwind skb_push(skb, nsh_len); skb->mac_header = skb->network_header - nhoff; // skb->mac_header > skb->headroom, cause skb_push panic Use correct mac_offset to restore mac_header and get rid of nhoff.

Affected packages

Ecosystem Package Introduced Fixed
Linux Kernel 4.14.0 4.14.316
SUSE:Linux Enterprise Micro 5.5 kernel-rt 0 5.14.21-150500.13.118.1
SUSE:Linux Enterprise Micro 5.5 kernel-source-rt 0 5.14.21-150500.13.118.1

Related vulnerabilities