CVE-2024-45030 (GCVE-0-2024-45030)
Vulnerability from cvelistv5
Published
2024-09-11 15:14
Modified
2026-08-05 11:37
Severity ?
Summary
In the Linux kernel, the following vulnerability has been resolved: igb: cope with large MAX_SKB_FRAGS Sabrina reports that the igb driver does not cope well with large MAX_SKB_FRAG values: setting MAX_SKB_FRAG to 45 causes payload corruption on TX. An easy reproducer is to run ssh to connect to the machine. With MAX_SKB_FRAGS=17 it works, with MAX_SKB_FRAGS=45 it fails. This has been reported originally in https://bugzilla.redhat.com/show_bug.cgi?id=2265320 The root cause of the issue is that the driver does not take into account properly the (possibly large) shared info size when selecting the ring layout, and will try to fit two packets inside the same 4K page even when the 1st fraglist will trump over the 2nd head. Address the issue by checking if 2K buffers are insufficient.
Impacted products
Vendor Product Version
Linux Linux Version: 3948b05950fdd64002a5f182c65ba5cf2d53cf71
Version: 3948b05950fdd64002a5f182c65ba5cf2d53cf71
Version: 3948b05950fdd64002a5f182c65ba5cf2d53cf71
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2024-45030",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2024-09-29T15:45:35.285052Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2024-09-29T15:45:49.478Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/net/ethernet/intel/igb/igb_main.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "8ea80ff5d8298356d28077bc30913ed37df65109",
              "status": "affected",
              "version": "3948b05950fdd64002a5f182c65ba5cf2d53cf71",
              "versionType": "git"
            },
            {
              "lessThan": "b52bd8bcb9e8ff250c79b44f9af8b15cae8911ab",
              "status": "affected",
              "version": "3948b05950fdd64002a5f182c65ba5cf2d53cf71",
              "versionType": "git"
            },
            {
              "lessThan": "8aba27c4a5020abdf60149239198297f88338a8d",
              "status": "affected",
              "version": "3948b05950fdd64002a5f182c65ba5cf2d53cf71",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/net/ethernet/intel/igb/igb_main.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.4"
            },
            {
              "lessThan": "6.4",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.48",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.10.*",
              "status": "unaffected",
              "version": "6.10.7",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.11",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.48",
                  "versionStartIncluding": "6.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.10.7",
                  "versionStartIncluding": "6.4",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.11",
                  "versionStartIncluding": "6.4",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nigb: cope with large MAX_SKB_FRAGS\n\nSabrina reports that the igb driver does not cope well with large\nMAX_SKB_FRAG values: setting MAX_SKB_FRAG to 45 causes payload\ncorruption on TX.\n\nAn easy reproducer is to run ssh to connect to the machine.  With\nMAX_SKB_FRAGS=17 it works, with MAX_SKB_FRAGS=45 it fails.  This has\nbeen reported originally in\nhttps://bugzilla.redhat.com/show_bug.cgi?id=2265320\n\nThe root cause of the issue is that the driver does not take into\naccount properly the (possibly large) shared info size when selecting\nthe ring layout, and will try to fit two packets inside the same 4K\npage even when the 1st fraglist will trump over the 2nd head.\n\nAddress the issue by checking if 2K buffers are insufficient."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 9.8,
            "baseSeverity": "CRITICAL",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:N - The defect is triggered entirely within the igb RX path (`igb_clean_rx_irq()`/`igb_build_skb()`) by any received Ethernet frame larger than ~1086 bytes, before any socket demultiplexing or filtering. Such frames can be sent by any routed remote host across the internet, not just an on-link peer.\nAC:L - On an affected build the attacker needs only to send normal, full-size packets to the host; the overlap between the linear data area and `skb_shared_info` is deterministic and occurs on every sufficiently large frame, with no race, no memory-layout requirement and 100% reliability. The affected configurations are real deployments (BIG TCP kernels with CONFIG_MAX_SKB_FRAGS\u003e=25, and default configs on 4K-page architectures with \u003e=128-byte cache lines), not attacker-uncontrollable conditions.\nPR:N - The corruption occurs in the NAPI receive handler before any protocol demux, socket lookup or authentication, so no credentials or local account on the target are needed. Packets addressed to closed ports are sufficient.\nUI:N - No victim action is required; the flaw triggers automatically as soon as the interface receives large frames during normal operation.\nS:U - The corrupted memory (RX page, `skb_shared_info`, sk_buff invariants) and the impact all reside within the kernel\u0027s own security authority. No VM, IOMMU or sandbox boundary is crossed.\nC:H - Because `skb_shinfo()` aliases the packet\u0027s own linear data, kernel pointers written there afterwards (`frag_list` = kernel `sk_buff *`, `frags[].page` = `struct page *` written by GRO merging, hwtstamps, destructor_arg) become part of the payload copied to userspace via recvmsg, disclosing kernel heap addresses; this is memory corruption of kernel metadata directly leveragable for information disclosure and KASLR defeat.\nI:H - build_skb\u0027s shinfo memset plus every subsequent shinfo update overwrite received packet bytes at deterministic offsets, and igb still marks these frames CHECKSUM_UNNECESSARY, so silently corrupted data is delivered to applications as valid; conversely attacker-controlled network bytes occupy the `skb_shared_info` region (nr_frags/frag_list/frags[]/destructor_arg), corrupting kernel data structures.\nA:H - Every such skb violates the `skb-\u003etail \u003c= skb-\u003eend` invariant, so paths like `skb_copy()` (reached via `skb_unshare()` whenever the skb is cloned, e.g. with tcpdump/AF_PACKET or DSA) call `skb_put()` past `end` and hit `skb_over_panic()` -\u003e `BUG()` in softirq context, i.e. kernel panic; even without a panic, all large frames are corrupted, destroying network connectivity on the interface."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T11:37:51.310Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/8ea80ff5d8298356d28077bc30913ed37df65109"
        },
        {
          "url": "https://git.kernel.org/stable/c/b52bd8bcb9e8ff250c79b44f9af8b15cae8911ab"
        },
        {
          "url": "https://git.kernel.org/stable/c/8aba27c4a5020abdf60149239198297f88338a8d"
        }
      ],
      "title": "igb: cope with large MAX_SKB_FRAGS",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2024-45030",
    "datePublished": "2024-09-11T15:14:00.886Z",
    "dateReserved": "2024-08-21T05:34:56.685Z",
    "dateUpdated": "2026-08-05T11:37:51.310Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "vulnrichment": {
      "containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2024-45030\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2024-09-29T15:45:35.285052Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2024-09-29T15:45:39.365Z\"}}], \"cna\": {\"title\": \"igb: cope with large MAX_SKB_FRAGS\", \"metrics\": [{\"cvssV3_1\": {\"version\": \"3.1\", \"baseScore\": 9.8, \"baseSeverity\": \"CRITICAL\", \"vectorString\": \"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H\"}, \"scenarios\": [{\"lang\": \"en\", \"value\": \"AV:N - The defect is triggered entirely within the igb RX path (`igb_clean_rx_irq()`/`igb_build_skb()`) by any received Ethernet frame larger than ~1086 bytes, before any socket demultiplexing or filtering. Such frames can be sent by any routed remote host across the internet, not just an on-link peer.\\nAC:L - On an affected build the attacker needs only to send normal, full-size packets to the host; the overlap between the linear data area and `skb_shared_info` is deterministic and occurs on every sufficiently large frame, with no race, no memory-layout requirement and 100% reliability. The affected configurations are real deployments (BIG TCP kernels with CONFIG_MAX_SKB_FRAGS\u003e=25, and default configs on 4K-page architectures with \u003e=128-byte cache lines), not attacker-uncontrollable conditions.\\nPR:N - The corruption occurs in the NAPI receive handler before any protocol demux, socket lookup or authentication, so no credentials or local account on the target are needed. Packets addressed to closed ports are sufficient.\\nUI:N - No victim action is required; the flaw triggers automatically as soon as the interface receives large frames during normal operation.\\nS:U - The corrupted memory (RX page, `skb_shared_info`, sk_buff invariants) and the impact all reside within the kernel\u0027s own security authority. No VM, IOMMU or sandbox boundary is crossed.\\nC:H - Because `skb_shinfo()` aliases the packet\u0027s own linear data, kernel pointers written there afterwards (`frag_list` = kernel `sk_buff *`, `frags[].page` = `struct page *` written by GRO merging, hwtstamps, destructor_arg) become part of the payload copied to userspace via recvmsg, disclosing kernel heap addresses; this is memory corruption of kernel metadata directly leveragable for information disclosure and KASLR defeat.\\nI:H - build_skb\u0027s shinfo memset plus every subsequent shinfo update overwrite received packet bytes at deterministic offsets, and igb still marks these frames CHECKSUM_UNNECESSARY, so silently corrupted data is delivered to applications as valid; conversely attacker-controlled network bytes occupy the `skb_shared_info` region (nr_frags/frag_list/frags[]/destructor_arg), corrupting kernel data structures.\\nA:H - Every such skb violates the `skb-\u003etail \u003c= skb-\u003eend` invariant, so paths like `skb_copy()` (reached via `skb_unshare()` whenever the skb is cloned, e.g. with tcpdump/AF_PACKET or DSA) call `skb_put()` past `end` and hit `skb_over_panic()` -\u003e `BUG()` in softirq context, i.e. kernel panic; even without a panic, all large frames are corrupted, destroying network connectivity on the interface.\"}]}], \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"3948b05950fdd64002a5f182c65ba5cf2d53cf71\", \"lessThan\": \"8ea80ff5d8298356d28077bc30913ed37df65109\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"3948b05950fdd64002a5f182c65ba5cf2d53cf71\", \"lessThan\": \"b52bd8bcb9e8ff250c79b44f9af8b15cae8911ab\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"3948b05950fdd64002a5f182c65ba5cf2d53cf71\", \"lessThan\": \"8aba27c4a5020abdf60149239198297f88338a8d\", \"versionType\": \"git\"}], \"programFiles\": [\"drivers/net/ethernet/intel/igb/igb_main.c\"], \"defaultStatus\": \"unaffected\"}, {\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"6.4\"}, {\"status\": \"unaffected\", \"version\": \"0\", \"lessThan\": \"6.4\", \"versionType\": \"semver\"}, {\"status\": \"unaffected\", \"version\": \"6.6.48\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.6.*\"}, {\"status\": \"unaffected\", \"version\": \"6.10.7\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.10.*\"}, {\"status\": \"unaffected\", \"version\": \"6.11\", \"versionType\": \"original_commit_for_fix\", \"lessThanOrEqual\": \"*\"}], \"programFiles\": [\"drivers/net/ethernet/intel/igb/igb_main.c\"], \"defaultStatus\": \"affected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/8ea80ff5d8298356d28077bc30913ed37df65109\"}, {\"url\": \"https://git.kernel.org/stable/c/b52bd8bcb9e8ff250c79b44f9af8b15cae8911ab\"}, {\"url\": \"https://git.kernel.org/stable/c/8aba27c4a5020abdf60149239198297f88338a8d\"}], \"x_generator\": {\"engine\": \"bippy-1.2.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\nigb: cope with large MAX_SKB_FRAGS\\n\\nSabrina reports that the igb driver does not cope well with large\\nMAX_SKB_FRAG values: setting MAX_SKB_FRAG to 45 causes payload\\ncorruption on TX.\\n\\nAn easy reproducer is to run ssh to connect to the machine.  With\\nMAX_SKB_FRAGS=17 it works, with MAX_SKB_FRAGS=45 it fails.  This has\\nbeen reported originally in\\nhttps://bugzilla.redhat.com/show_bug.cgi?id=2265320\\n\\nThe root cause of the issue is that the driver does not take into\\naccount properly the (possibly large) shared info size when selecting\\nthe ring layout, and will try to fit two packets inside the same 4K\\npage even when the 1st fraglist will trump over the 2nd head.\\n\\nAddress the issue by checking if 2K buffers are insufficient.\"}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.6.48\", \"versionStartIncluding\": \"6.4\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.10.7\", \"versionStartIncluding\": \"6.4\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.11\", \"versionStartIncluding\": \"6.4\"}], \"operator\": \"OR\"}]}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2026-08-05T11:37:51.310Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2024-45030\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-08-05T11:37:51.310Z\", \"dateReserved\": \"2024-08-21T05:34:56.685Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2024-09-11T15:14:00.886Z\", \"assignerShortName\": \"Linux\"}",
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…