{
    "dataType": "CVE_RECORD",
    "dataVersion": "5.2",
    "cveMetadata": {
        "cveId": "CVE-2022-49340",
        "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "state": "PUBLISHED",
        "assignerShortName": "Linux",
        "dateReserved": "2025-02-26T02:08:31.541Z",
        "datePublished": "2025-02-26T02:10:57.322Z",
        "dateUpdated": "2026-08-05T08:54:49.092Z"
    },
    "containers": {
        "cna": {
            "providerMetadata": {
                "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
                "shortName": "Linux",
                "dateUpdated": "2026-08-05T08:54:49.092Z"
            },
            "descriptions": [
                {
                    "lang": "en",
                    "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nip_gre: test csum_start instead of transport header\n\nGRE with TUNNEL_CSUM will apply local checksum offload on\nCHECKSUM_PARTIAL packets.\n\nipgre_xmit must validate csum_start after an optional skb_pull,\nelse lco_csum may trigger an overflow. The original check was\n\n\tif (csum && skb_checksum_start(skb) < skb->data)\n\t\treturn -EINVAL;\n\nThis had false positives when skb_checksum_start is undefined:\nwhen ip_summed is not CHECKSUM_PARTIAL. A discussed refinement\nwas straightforward\n\n\tif (csum && skb->ip_summed == CHECKSUM_PARTIAL &&\n\t    skb_checksum_start(skb) < skb->data)\n\t\treturn -EINVAL;\n\nBut was eventually revised more thoroughly:\n- restrict the check to the only branch where needed, in an\n  uncommon GRE path that uses header_ops and calls skb_pull.\n- test skb_transport_header, which is set along with csum_start\n  in skb_partial_csum_set in the normal header_ops datapath.\n\nTurns out skbs can arrive in this branch without the transport\nheader set, e.g., through BPF redirection.\n\nRevise the check back to check csum_start directly, and only if\nCHECKSUM_PARTIAL. Do leave the check in the updated location.\nCheck field regardless of whether TUNNEL_CSUM is configured."
                }
            ],
            "metrics": [
                {
                    "cvssV3_1": {
                        "version": "3.1",
                        "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H",
                        "baseScore": 7.1,
                        "baseSeverity": "HIGH"
                    },
                    "scenarios": [
                        {
                            "lang": "en",
                            "value": "AV:L - The defect is in ipgre_xmit’s header_ops TX path (local send via the GRE netdev, AF_PACKET/splice, or BPF redirect into that device), not in GRE receive or any remote packet parser.\nAC:L - An attacker who can create/use an NBMA/header_ops GRE device with TUNNEL_CSUM and submit a CHECKSUM_PARTIAL skb whose csum_start falls in the pulled region can trigger the bad lco_csum length deterministically; syzbot reproduced the class of crash without races.\nPR:L - Creating or configuring the GRE tunnel and driving the path needs CAP_NET_ADMIN (and often CAP_NET_RAW for packet sockets), both obtainable in a user namespace, so only unprivileged userns access is required—not real init-ns root.\nUI:N - The attacker opens the netns, sets up the tunnel, and sends the crafted skb themselves; no separate victim action is required.\nS:U - Impact stays inside the same host kernel authority (OOB read/oops on that machine’s networking stack); it is not a VM escape, IOMMU bypass, or other cross-boundary break.\nC:H - When csum_start sits before the post-pull/GRE transport header, csum_start-l4_hdr becomes a huge unsigned length into do_csum/csum_partial, yielding an unbounded out-of-bounds read of kernel memory (not a few fixed bytes), scored Confidentiality High per OOB-read guidance.\nI:N - The failure is a pure over-read while building the GRE checksum; there is no OOB write, UAF, or other corruption that yields an arbitrary-write or control-flow hijack primitive.\nA:H - The same huge-length csum_partial walk hits unmapped pages and produces a kernel paging-fault oops/panic (as in the syzbot report), fully denying availability."
                        }
                    ]
                }
            ],
            "affected": [
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "unaffected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "net/ipv4/ip_gre.c"
                    ],
                    "versions": [
                        {
                            "version": "774430026bd9a472d08c5d3c33351a782315771a",
                            "lessThan": "7596bd7920985f7fc8579a92e48bc53ce4475b21",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "3d32ce5472bb2ca720bef84089b85f76a705fd1a",
                            "lessThan": "3d08bc3a5d9b2106f5c8bcf1adb73147824aa006",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "87b34cd6485192777f632f92d592f2a71d8801a6",
                            "lessThan": "fbeb8dfa8b87ef259eef0c89e39b53962a3cf604",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "8a0ed250f911da31a2aef52101bc707846a800ff",
                            "lessThan": "e6b6f98fc7605c06c0a3baa70f62c534d7b4ce58",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "8a0ed250f911da31a2aef52101bc707846a800ff",
                            "lessThan": "0c92d813c7c9ca2212ecd879232e7d87362fce98",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "8a0ed250f911da31a2aef52101bc707846a800ff",
                            "lessThan": "0ffa268724656633af5f37a38c212326d98ebe8c",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "8a0ed250f911da31a2aef52101bc707846a800ff",
                            "lessThan": "8d21e9963bec1aad2280cdd034c8993033ef2948",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "4bf5d5224ffca069df4501ba5fcc6ded9c002ead",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "4.19.207",
                            "lessThan": "4.19.247",
                            "status": "affected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.4.148",
                            "lessThan": "5.4.198",
                            "status": "affected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.10.68",
                            "lessThan": "5.10.122",
                            "status": "affected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.14.7",
                            "lessThan": "5.15",
                            "status": "affected",
                            "versionType": "semver"
                        }
                    ]
                },
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "affected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "net/ipv4/ip_gre.c"
                    ],
                    "versions": [
                        {
                            "version": "5.15",
                            "status": "affected"
                        },
                        {
                            "version": "0",
                            "lessThan": "5.15",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "4.19.247",
                            "lessThanOrEqual": "4.19.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.4.198",
                            "lessThanOrEqual": "5.4.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.10.122",
                            "lessThanOrEqual": "5.10.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.15.47",
                            "lessThanOrEqual": "5.15.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.17.15",
                            "lessThanOrEqual": "5.17.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.18.4",
                            "lessThanOrEqual": "5.18.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.19",
                            "lessThanOrEqual": "*",
                            "status": "unaffected",
                            "versionType": "original_commit_for_fix"
                        }
                    ]
                }
            ],
            "cpeApplicability": [
                {
                    "nodes": [
                        {
                            "operator": "OR",
                            "negate": false,
                            "cpeMatch": [
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "4.19.207",
                                    "versionEndExcluding": "4.19.247"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "5.4.148",
                                    "versionEndExcluding": "5.4.198"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "5.10.68",
                                    "versionEndExcluding": "5.10.122"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "5.15",
                                    "versionEndExcluding": "5.15.47"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "5.15",
                                    "versionEndExcluding": "5.17.15"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "5.15",
                                    "versionEndExcluding": "5.18.4"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "5.15",
                                    "versionEndExcluding": "5.19"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "5.14.7"
                                }
                            ]
                        }
                    ]
                }
            ],
            "references": [
                {
                    "url": "https://git.kernel.org/stable/c/7596bd7920985f7fc8579a92e48bc53ce4475b21"
                },
                {
                    "url": "https://git.kernel.org/stable/c/3d08bc3a5d9b2106f5c8bcf1adb73147824aa006"
                },
                {
                    "url": "https://git.kernel.org/stable/c/fbeb8dfa8b87ef259eef0c89e39b53962a3cf604"
                },
                {
                    "url": "https://git.kernel.org/stable/c/e6b6f98fc7605c06c0a3baa70f62c534d7b4ce58"
                },
                {
                    "url": "https://git.kernel.org/stable/c/0c92d813c7c9ca2212ecd879232e7d87362fce98"
                },
                {
                    "url": "https://git.kernel.org/stable/c/0ffa268724656633af5f37a38c212326d98ebe8c"
                },
                {
                    "url": "https://git.kernel.org/stable/c/8d21e9963bec1aad2280cdd034c8993033ef2948"
                }
            ],
            "title": "ip_gre: test csum_start instead of transport header",
            "x_generator": {
                "engine": "bippy-1.2.0"
            }
        }
    }
}