CVE-2022-49340

CVE-2022-49340

High · published February 26, 2025

CVSS v3.1
7.1
EPSS
0%
Percentile
19.5
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

ip_gre: test csum_start instead of transport header

GRE with TUNNEL_CSUM will apply local checksum offload on

CHECKSUM_PARTIAL packets.

ipgre_xmit must validate csum_start after an optional skb_pull,

else lco_csum may trigger an overflow. The original check was

if (csum && skb_checksum_start(skb) < skb->data)

return -EINVAL;

This had false positives when skb_checksum_start is undefined:

when ip_summed is not CHECKSUM_PARTIAL. A discussed refinement

was straightforward

if (csum && skb->ip_summed == CHECKSUM_PARTIAL &&

skb_checksum_start(skb) < skb->data)

return -EINVAL;

But was eventually revised more thoroughly:

- restrict the check to the only branch where needed, in an

uncommon GRE path that uses header_ops and calls skb_pull.

- test skb_transport_header, which is set along with csum_start

in skb_partial_csum_set in the normal header_ops datapath.

Turns out skbs can arrive in this branch without the transport

header set, e.g., through BPF redirection.

Revise the check back to check csum_start directly, and only if

CHECKSUM_PARTIAL. Do leave the check in the updated location.

Check field regardless of whether TUNNEL_CSUM is configured.

The record
Technical detail
CVSS v3.1
7.1 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00281 · 19.5th percentile
Published
2025-02-26T12:01Z
Affected products (7)
ProductVersionsFixed in
linux/linux_kernel≥ 4.19.207, < 4.19.2474.19.247
linux/linux_kernel≥ 5.4.148, < 5.4.1985.4.198
linux/linux_kernel≥ 5.10.68, < 5.10.1225.10.122
linux/linux_kernel≥ 5.14.7, < 5.15.475.15.47
linux/linux_kernel≥ 5.16, < 5.17.155.17.15
linux/linux_kernel≥ 5.18, < 5.18.45.18.4
linux/linux_kernelall versions—
References (7)
EPSS history
Timeline
  • 26 FEB 02:10Z
    ip_gre: test csum_start instead of transport header
    cvelistv5