CVE-2024-50254 (GCVE-0-2024-50254)

Vulnerability from cvelistv5 – Published: 2024-11-09 10:15 – Updated: 2025-10-01 20:17
VLAI?
Summary
In the Linux kernel, the following vulnerability has been resolved: bpf: Free dynamically allocated bits in bpf_iter_bits_destroy() bpf_iter_bits_destroy() uses "kit->nr_bits <= 64" to check whether the bits are dynamically allocated. However, the check is incorrect and may cause a kmemleak as shown below: unreferenced object 0xffff88812628c8c0 (size 32): comm "swapper/0", pid 1, jiffies 4294727320 hex dump (first 32 bytes): b0 c1 55 f5 81 88 ff ff f0 f0 f0 f0 f0 f0 f0 f0 ..U........... f0 f0 f0 f0 f0 f0 f0 f0 00 00 00 00 00 00 00 00 .............. backtrace (crc 781e32cc): [<00000000c452b4ab>] kmemleak_alloc+0x4b/0x80 [<0000000004e09f80>] __kmalloc_node_noprof+0x480/0x5c0 [<00000000597124d6>] __alloc.isra.0+0x89/0xb0 [<000000004ebfffcd>] alloc_bulk+0x2af/0x720 [<00000000d9c10145>] prefill_mem_cache+0x7f/0xb0 [<00000000ff9738ff>] bpf_mem_alloc_init+0x3e2/0x610 [<000000008b616eac>] bpf_global_ma_init+0x19/0x30 [<00000000fc473efc>] do_one_initcall+0xd3/0x3c0 [<00000000ec81498c>] kernel_init_freeable+0x66a/0x940 [<00000000b119f72f>] kernel_init+0x20/0x160 [<00000000f11ac9a7>] ret_from_fork+0x3c/0x70 [<0000000004671da4>] ret_from_fork_asm+0x1a/0x30 That is because nr_bits will be set as zero in bpf_iter_bits_next() after all bits have been iterated. Fix the issue by setting kit->bit to kit->nr_bits instead of setting kit->nr_bits to zero when the iteration completes in bpf_iter_bits_next(). In addition, use "!nr_bits || bits >= nr_bits" to check whether the iteration is complete and still use "nr_bits > 64" to indicate whether bits are dynamically allocated. The "!nr_bits" check is necessary because bpf_iter_bits_new() may fail before setting kit->nr_bits, and this condition will stop the iteration early instead of accessing the zeroed or freed kit->bits. Considering the initial value of kit->bits is -1 and the type of kit->nr_bits is unsigned int, change the type of kit->nr_bits to int. The potential overflow problem will be handled in the following patch.
CWE
  • CWE-401 - Missing Release of Memory after Effective Lifetime
Assigner
Impacted products
Vendor Product Version
Linux Linux Affected: 4665415975b0827e9646cab91c61d02a6b364d59 , < 9cee266fafaf79fd465314546f637f9a3c215830 (git)
Affected: 4665415975b0827e9646cab91c61d02a6b364d59 , < 101ccfbabf4738041273ce64e2b116cf440dea13 (git)
Create a notification for this product.
    Linux Linux Affected: 6.11
Unaffected: 0 , < 6.11 (semver)
Unaffected: 6.11.7 , ≤ 6.11.* (semver)
Unaffected: 6.12 , ≤ * (original_commit_for_fix)
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "cvssV3_1": {
              "attackComplexity": "LOW",
              "attackVector": "LOCAL",
              "availabilityImpact": "HIGH",
              "baseScore": 5.5,
              "baseSeverity": "MEDIUM",
              "confidentialityImpact": "NONE",
              "integrityImpact": "NONE",
              "privilegesRequired": "LOW",
              "scope": "UNCHANGED",
              "userInteraction": "NONE",
              "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H",
              "version": "3.1"
            }
          },
          {
            "other": {
              "content": {
                "id": "CVE-2024-50254",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2025-10-01T20:15:40.487858Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "problemTypes": [
          {
            "descriptions": [
              {
                "cweId": "CWE-401",
                "description": "CWE-401 Missing Release of Memory after Effective Lifetime",
                "lang": "en",
                "type": "CWE"
              }
            ]
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2025-10-01T20:17:24.691Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "kernel/bpf/helpers.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "9cee266fafaf79fd465314546f637f9a3c215830",
              "status": "affected",
              "version": "4665415975b0827e9646cab91c61d02a6b364d59",
              "versionType": "git"
            },
            {
              "lessThan": "101ccfbabf4738041273ce64e2b116cf440dea13",
              "status": "affected",
              "version": "4665415975b0827e9646cab91c61d02a6b364d59",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "kernel/bpf/helpers.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.11"
            },
            {
              "lessThan": "6.11",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.11.*",
              "status": "unaffected",
              "version": "6.11.7",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.12",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.11.7",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12",
                  "versionStartIncluding": "6.11",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Free dynamically allocated bits in bpf_iter_bits_destroy()\n\nbpf_iter_bits_destroy() uses \"kit-\u003enr_bits \u003c= 64\" to check whether the\nbits are dynamically allocated. However, the check is incorrect and may\ncause a kmemleak as shown below:\n\nunreferenced object 0xffff88812628c8c0 (size 32):\n  comm \"swapper/0\", pid 1, jiffies 4294727320\n  hex dump (first 32 bytes):\n\tb0 c1 55 f5 81 88 ff ff f0 f0 f0 f0 f0 f0 f0 f0  ..U...........\n\tf0 f0 f0 f0 f0 f0 f0 f0 00 00 00 00 00 00 00 00  ..............\n  backtrace (crc 781e32cc):\n\t[\u003c00000000c452b4ab\u003e] kmemleak_alloc+0x4b/0x80\n\t[\u003c0000000004e09f80\u003e] __kmalloc_node_noprof+0x480/0x5c0\n\t[\u003c00000000597124d6\u003e] __alloc.isra.0+0x89/0xb0\n\t[\u003c000000004ebfffcd\u003e] alloc_bulk+0x2af/0x720\n\t[\u003c00000000d9c10145\u003e] prefill_mem_cache+0x7f/0xb0\n\t[\u003c00000000ff9738ff\u003e] bpf_mem_alloc_init+0x3e2/0x610\n\t[\u003c000000008b616eac\u003e] bpf_global_ma_init+0x19/0x30\n\t[\u003c00000000fc473efc\u003e] do_one_initcall+0xd3/0x3c0\n\t[\u003c00000000ec81498c\u003e] kernel_init_freeable+0x66a/0x940\n\t[\u003c00000000b119f72f\u003e] kernel_init+0x20/0x160\n\t[\u003c00000000f11ac9a7\u003e] ret_from_fork+0x3c/0x70\n\t[\u003c0000000004671da4\u003e] ret_from_fork_asm+0x1a/0x30\n\nThat is because nr_bits will be set as zero in bpf_iter_bits_next()\nafter all bits have been iterated.\n\nFix the issue by setting kit-\u003ebit to kit-\u003enr_bits instead of setting\nkit-\u003enr_bits to zero when the iteration completes in\nbpf_iter_bits_next(). In addition, use \"!nr_bits || bits \u003e= nr_bits\" to\ncheck whether the iteration is complete and still use \"nr_bits \u003e 64\" to\nindicate whether bits are dynamically allocated. The \"!nr_bits\" check is\nnecessary because bpf_iter_bits_new() may fail before setting\nkit-\u003enr_bits, and this condition will stop the iteration early instead\nof accessing the zeroed or freed kit-\u003ebits.\n\nConsidering the initial value of kit-\u003ebits is -1 and the type of\nkit-\u003enr_bits is unsigned int, change the type of kit-\u003enr_bits to int.\nThe potential overflow problem will be handled in the following patch."
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2025-05-04T09:49:59.116Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/9cee266fafaf79fd465314546f637f9a3c215830"
        },
        {
          "url": "https://git.kernel.org/stable/c/101ccfbabf4738041273ce64e2b116cf440dea13"
        }
      ],
      "title": "bpf: Free dynamically allocated bits in bpf_iter_bits_destroy()",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2024-50254",
    "datePublished": "2024-11-09T10:15:07.805Z",
    "dateReserved": "2024-10-21T19:36:19.980Z",
    "dateUpdated": "2025-10-01T20:17:24.691Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.1",
  "vulnerability-lookup:meta": {
    "fkie_nvd": {
      "configurations": "[{\"nodes\": [{\"operator\": \"OR\", \"negate\": false, \"cpeMatch\": [{\"vulnerable\": true, \"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"versionStartIncluding\": \"6.11\", \"versionEndExcluding\": \"6.11.7\", \"matchCriteriaId\": \"386941FE-51A4-4893-9EC3-054AD3863E8D\"}, {\"vulnerable\": true, \"criteria\": \"cpe:2.3:o:linux:linux_kernel:6.12:rc1:*:*:*:*:*:*\", \"matchCriteriaId\": \"7F361E1D-580F-4A2D-A509-7615F73167A1\"}, {\"vulnerable\": true, \"criteria\": \"cpe:2.3:o:linux:linux_kernel:6.12:rc2:*:*:*:*:*:*\", \"matchCriteriaId\": \"925478D0-3E3D-4E6F-ACD5-09F28D5DF82C\"}, {\"vulnerable\": true, \"criteria\": \"cpe:2.3:o:linux:linux_kernel:6.12:rc3:*:*:*:*:*:*\", \"matchCriteriaId\": \"3C95E234-D335-4B6C-96BF-E2CEBD8654ED\"}, {\"vulnerable\": true, \"criteria\": \"cpe:2.3:o:linux:linux_kernel:6.12:rc4:*:*:*:*:*:*\", \"matchCriteriaId\": \"E0F717D8-3014-4F84-8086-0124B2111379\"}, {\"vulnerable\": true, \"criteria\": \"cpe:2.3:o:linux:linux_kernel:6.12:rc5:*:*:*:*:*:*\", \"matchCriteriaId\": \"24DBE6C7-2AAE-4818-AED2-E131F153D2FA\"}]}]}]",
      "descriptions": "[{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\nbpf: Free dynamically allocated bits in bpf_iter_bits_destroy()\\n\\nbpf_iter_bits_destroy() uses \\\"kit-\u003enr_bits \u003c= 64\\\" to check whether the\\nbits are dynamically allocated. However, the check is incorrect and may\\ncause a kmemleak as shown below:\\n\\nunreferenced object 0xffff88812628c8c0 (size 32):\\n  comm \\\"swapper/0\\\", pid 1, jiffies 4294727320\\n  hex dump (first 32 bytes):\\n\\tb0 c1 55 f5 81 88 ff ff f0 f0 f0 f0 f0 f0 f0 f0  ..U...........\\n\\tf0 f0 f0 f0 f0 f0 f0 f0 00 00 00 00 00 00 00 00  ..............\\n  backtrace (crc 781e32cc):\\n\\t[\u003c00000000c452b4ab\u003e] kmemleak_alloc+0x4b/0x80\\n\\t[\u003c0000000004e09f80\u003e] __kmalloc_node_noprof+0x480/0x5c0\\n\\t[\u003c00000000597124d6\u003e] __alloc.isra.0+0x89/0xb0\\n\\t[\u003c000000004ebfffcd\u003e] alloc_bulk+0x2af/0x720\\n\\t[\u003c00000000d9c10145\u003e] prefill_mem_cache+0x7f/0xb0\\n\\t[\u003c00000000ff9738ff\u003e] bpf_mem_alloc_init+0x3e2/0x610\\n\\t[\u003c000000008b616eac\u003e] bpf_global_ma_init+0x19/0x30\\n\\t[\u003c00000000fc473efc\u003e] do_one_initcall+0xd3/0x3c0\\n\\t[\u003c00000000ec81498c\u003e] kernel_init_freeable+0x66a/0x940\\n\\t[\u003c00000000b119f72f\u003e] kernel_init+0x20/0x160\\n\\t[\u003c00000000f11ac9a7\u003e] ret_from_fork+0x3c/0x70\\n\\t[\u003c0000000004671da4\u003e] ret_from_fork_asm+0x1a/0x30\\n\\nThat is because nr_bits will be set as zero in bpf_iter_bits_next()\\nafter all bits have been iterated.\\n\\nFix the issue by setting kit-\u003ebit to kit-\u003enr_bits instead of setting\\nkit-\u003enr_bits to zero when the iteration completes in\\nbpf_iter_bits_next(). In addition, use \\\"!nr_bits || bits \u003e= nr_bits\\\" to\\ncheck whether the iteration is complete and still use \\\"nr_bits \u003e 64\\\" to\\nindicate whether bits are dynamically allocated. The \\\"!nr_bits\\\" check is\\nnecessary because bpf_iter_bits_new() may fail before setting\\nkit-\u003enr_bits, and this condition will stop the iteration early instead\\nof accessing the zeroed or freed kit-\u003ebits.\\n\\nConsidering the initial value of kit-\u003ebits is -1 and the type of\\nkit-\u003enr_bits is unsigned int, change the type of kit-\u003enr_bits to int.\\nThe potential overflow problem will be handled in the following patch.\"}, {\"lang\": \"es\", \"value\": \"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: bpf: Libera bits asignados din\\u00e1micamente en bpf_iter_bits_destroy() bpf_iter_bits_destroy() usa \\\"kit-\u0026gt;nr_bits \u0026lt;= 64\\\" para comprobar si los bits est\\u00e1n asignados din\\u00e1micamente. Sin embargo, la comprobaci\\u00f3n es incorrecta y puede causar una fuga de kmem como se muestra a continuaci\\u00f3n: objeto sin referencia 0xffff88812628c8c0 (tama\\u00f1o 32): comm \\\"swapper/0\\\", pid 1, jiffies 4294727320 volcado hexadecimal (primeros 32 bytes): b0 c1 55 f5 81 88 ff ff f0 f0 f0 f0 f0 f0 f0 f0 f0 ..U........... f0 f0 f0 f0 f0 f0 f0 f0 f0 00 00 00 00 00 00 00 00 .............. backtrace (crc 781e32cc): [\u0026lt;00000000c452b4ab\u0026gt;] kmemleak_alloc+0x4b/0x80 [\u0026lt;0000000004e09f80\u0026gt;] __kmalloc_node_noprof+0x480/0x5c0 [\u0026lt;00000000597124d6\u0026gt;] __alloc.isra.0+0x89/0xb0 [\u0026lt;000000004ebfffcd\u0026gt;] alloc_bulk+0x2af/0x720 [\u0026lt;00000000d9c10145\u0026gt;] prefill_mem_cache+0x7f/0xb0 [\u0026lt;00000000ff9738ff\u0026gt;] bpf_mem_alloc_init+0x3e2/0x610 [\u0026lt;000000008b616eac\u0026gt;] bpf_global_ma_init+0x19/0x30 [\u0026lt;00000000fc473efc\u0026gt;] Esto se debe a que nr_bits se establecer\\u00e1 como cero en bpf_iter_bits_next() despu\\u00e9s de que se hayan iterado todos los bits. Solucione el problema configurando kit-\u0026gt;bit en kit-\u0026gt;nr_bits en lugar de configurar kit-\u0026gt;nr_bits en cero cuando la iteraci\\u00f3n se complete en bpf_iter_bits_next(). Adem\\u00e1s, use \\\"!nr_bits || bits \u0026gt;= nr_bits\\\" para verificar si la iteraci\\u00f3n est\\u00e1 completa y siga usando \\\"nr_bits \u0026gt; 64\\\" para indicar si los bits se asignan din\\u00e1micamente. La verificaci\\u00f3n \\\"!nr_bits\\\" es necesaria porque bpf_iter_bits_new() puede fallar antes de configurar kit-\u0026gt;nr_bits, y esta condici\\u00f3n detendr\\u00e1 la iteraci\\u00f3n antes de tiempo en lugar de acceder a los kit-\u0026gt;bits liberados o puestos a cero. Teniendo en cuenta que el valor inicial de kit-\u0026gt;bits es -1 y el tipo de kit-\u0026gt;nr_bits es unsigned int, cambie el tipo de kit-\u0026gt;nr_bits a int. El posible problema de desbordamiento se manejar\\u00e1 en el siguiente parche.\"}]",
      "id": "CVE-2024-50254",
      "lastModified": "2024-11-14T18:09:48.530",
      "metrics": "{\"cvssMetricV31\": [{\"source\": \"nvd@nist.gov\", \"type\": \"Primary\", \"cvssData\": {\"version\": \"3.1\", \"vectorString\": \"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\", \"baseScore\": 5.5, \"baseSeverity\": \"MEDIUM\", \"attackVector\": \"LOCAL\", \"attackComplexity\": \"LOW\", \"privilegesRequired\": \"LOW\", \"userInteraction\": \"NONE\", \"scope\": \"UNCHANGED\", \"confidentialityImpact\": \"NONE\", \"integrityImpact\": \"NONE\", \"availabilityImpact\": \"HIGH\"}, \"exploitabilityScore\": 1.8, \"impactScore\": 3.6}]}",
      "published": "2024-11-09T11:15:11.113",
      "references": "[{\"url\": \"https://git.kernel.org/stable/c/101ccfbabf4738041273ce64e2b116cf440dea13\", \"source\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"tags\": [\"Patch\"]}, {\"url\": \"https://git.kernel.org/stable/c/9cee266fafaf79fd465314546f637f9a3c215830\", \"source\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"tags\": [\"Patch\"]}]",
      "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "vulnStatus": "Analyzed",
      "weaknesses": "[{\"source\": \"nvd@nist.gov\", \"type\": \"Primary\", \"description\": [{\"lang\": \"en\", \"value\": \"CWE-401\"}]}]"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2024-50254\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2024-11-09T11:15:11.113\",\"lastModified\":\"2025-10-01T21:16:12.857\",\"vulnStatus\":\"Modified\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nbpf: Free dynamically allocated bits in bpf_iter_bits_destroy()\\n\\nbpf_iter_bits_destroy() uses \\\"kit-\u003enr_bits \u003c= 64\\\" to check whether the\\nbits are dynamically allocated. However, the check is incorrect and may\\ncause a kmemleak as shown below:\\n\\nunreferenced object 0xffff88812628c8c0 (size 32):\\n  comm \\\"swapper/0\\\", pid 1, jiffies 4294727320\\n  hex dump (first 32 bytes):\\n\\tb0 c1 55 f5 81 88 ff ff f0 f0 f0 f0 f0 f0 f0 f0  ..U...........\\n\\tf0 f0 f0 f0 f0 f0 f0 f0 00 00 00 00 00 00 00 00  ..............\\n  backtrace (crc 781e32cc):\\n\\t[\u003c00000000c452b4ab\u003e] kmemleak_alloc+0x4b/0x80\\n\\t[\u003c0000000004e09f80\u003e] __kmalloc_node_noprof+0x480/0x5c0\\n\\t[\u003c00000000597124d6\u003e] __alloc.isra.0+0x89/0xb0\\n\\t[\u003c000000004ebfffcd\u003e] alloc_bulk+0x2af/0x720\\n\\t[\u003c00000000d9c10145\u003e] prefill_mem_cache+0x7f/0xb0\\n\\t[\u003c00000000ff9738ff\u003e] bpf_mem_alloc_init+0x3e2/0x610\\n\\t[\u003c000000008b616eac\u003e] bpf_global_ma_init+0x19/0x30\\n\\t[\u003c00000000fc473efc\u003e] do_one_initcall+0xd3/0x3c0\\n\\t[\u003c00000000ec81498c\u003e] kernel_init_freeable+0x66a/0x940\\n\\t[\u003c00000000b119f72f\u003e] kernel_init+0x20/0x160\\n\\t[\u003c00000000f11ac9a7\u003e] ret_from_fork+0x3c/0x70\\n\\t[\u003c0000000004671da4\u003e] ret_from_fork_asm+0x1a/0x30\\n\\nThat is because nr_bits will be set as zero in bpf_iter_bits_next()\\nafter all bits have been iterated.\\n\\nFix the issue by setting kit-\u003ebit to kit-\u003enr_bits instead of setting\\nkit-\u003enr_bits to zero when the iteration completes in\\nbpf_iter_bits_next(). In addition, use \\\"!nr_bits || bits \u003e= nr_bits\\\" to\\ncheck whether the iteration is complete and still use \\\"nr_bits \u003e 64\\\" to\\nindicate whether bits are dynamically allocated. The \\\"!nr_bits\\\" check is\\nnecessary because bpf_iter_bits_new() may fail before setting\\nkit-\u003enr_bits, and this condition will stop the iteration early instead\\nof accessing the zeroed or freed kit-\u003ebits.\\n\\nConsidering the initial value of kit-\u003ebits is -1 and the type of\\nkit-\u003enr_bits is unsigned int, change the type of kit-\u003enr_bits to int.\\nThe potential overflow problem will be handled in the following patch.\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: bpf: Libera bits asignados din\u00e1micamente en bpf_iter_bits_destroy() bpf_iter_bits_destroy() usa \\\"kit-\u0026gt;nr_bits \u0026lt;= 64\\\" para comprobar si los bits est\u00e1n asignados din\u00e1micamente. Sin embargo, la comprobaci\u00f3n es incorrecta y puede causar una fuga de kmem como se muestra a continuaci\u00f3n: objeto sin referencia 0xffff88812628c8c0 (tama\u00f1o 32): comm \\\"swapper/0\\\", pid 1, jiffies 4294727320 volcado hexadecimal (primeros 32 bytes): b0 c1 55 f5 81 88 ff ff f0 f0 f0 f0 f0 f0 f0 f0 f0 ..U........... f0 f0 f0 f0 f0 f0 f0 f0 f0 00 00 00 00 00 00 00 00 .............. backtrace (crc 781e32cc): [\u0026lt;00000000c452b4ab\u0026gt;] kmemleak_alloc+0x4b/0x80 [\u0026lt;0000000004e09f80\u0026gt;] __kmalloc_node_noprof+0x480/0x5c0 [\u0026lt;00000000597124d6\u0026gt;] __alloc.isra.0+0x89/0xb0 [\u0026lt;000000004ebfffcd\u0026gt;] alloc_bulk+0x2af/0x720 [\u0026lt;00000000d9c10145\u0026gt;] prefill_mem_cache+0x7f/0xb0 [\u0026lt;00000000ff9738ff\u0026gt;] bpf_mem_alloc_init+0x3e2/0x610 [\u0026lt;000000008b616eac\u0026gt;] bpf_global_ma_init+0x19/0x30 [\u0026lt;00000000fc473efc\u0026gt;] Esto se debe a que nr_bits se establecer\u00e1 como cero en bpf_iter_bits_next() despu\u00e9s de que se hayan iterado todos los bits. Solucione el problema configurando kit-\u0026gt;bit en kit-\u0026gt;nr_bits en lugar de configurar kit-\u0026gt;nr_bits en cero cuando la iteraci\u00f3n se complete en bpf_iter_bits_next(). Adem\u00e1s, use \\\"!nr_bits || bits \u0026gt;= nr_bits\\\" para verificar si la iteraci\u00f3n est\u00e1 completa y siga usando \\\"nr_bits \u0026gt; 64\\\" para indicar si los bits se asignan din\u00e1micamente. La verificaci\u00f3n \\\"!nr_bits\\\" es necesaria porque bpf_iter_bits_new() puede fallar antes de configurar kit-\u0026gt;nr_bits, y esta condici\u00f3n detendr\u00e1 la iteraci\u00f3n antes de tiempo en lugar de acceder a los kit-\u0026gt;bits liberados o puestos a cero. Teniendo en cuenta que el valor inicial de kit-\u0026gt;bits es -1 y el tipo de kit-\u0026gt;nr_bits es unsigned int, cambie el tipo de kit-\u0026gt;nr_bits a int. El posible problema de desbordamiento se manejar\u00e1 en el siguiente parche.\"}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\",\"baseScore\":5.5,\"baseSeverity\":\"MEDIUM\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"NONE\",\"integrityImpact\":\"NONE\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":3.6},{\"source\":\"134c704f-9b21-4f2e-91b3-4a467353bcc0\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\",\"baseScore\":5.5,\"baseSeverity\":\"MEDIUM\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"NONE\",\"integrityImpact\":\"NONE\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":3.6}]},\"weaknesses\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"description\":[{\"lang\":\"en\",\"value\":\"CWE-401\"}]},{\"source\":\"134c704f-9b21-4f2e-91b3-4a467353bcc0\",\"type\":\"Secondary\",\"description\":[{\"lang\":\"en\",\"value\":\"CWE-401\"}]}],\"configurations\":[{\"nodes\":[{\"operator\":\"OR\",\"negate\":false,\"cpeMatch\":[{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.11\",\"versionEndExcluding\":\"6.11.7\",\"matchCriteriaId\":\"386941FE-51A4-4893-9EC3-054AD3863E8D\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.12:rc1:*:*:*:*:*:*\",\"matchCriteriaId\":\"7F361E1D-580F-4A2D-A509-7615F73167A1\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.12:rc2:*:*:*:*:*:*\",\"matchCriteriaId\":\"925478D0-3E3D-4E6F-ACD5-09F28D5DF82C\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.12:rc3:*:*:*:*:*:*\",\"matchCriteriaId\":\"3C95E234-D335-4B6C-96BF-E2CEBD8654ED\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.12:rc4:*:*:*:*:*:*\",\"matchCriteriaId\":\"E0F717D8-3014-4F84-8086-0124B2111379\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.12:rc5:*:*:*:*:*:*\",\"matchCriteriaId\":\"24DBE6C7-2AAE-4818-AED2-E131F153D2FA\"}]}]}],\"references\":[{\"url\":\"https://git.kernel.org/stable/c/101ccfbabf4738041273ce64e2b116cf440dea13\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/9cee266fafaf79fd465314546f637f9a3c215830\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]}]}}",
    "vulnrichment": {
      "containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"cvssV3_1\": {\"scope\": \"UNCHANGED\", \"version\": \"3.1\", \"baseScore\": 5.5, \"attackVector\": \"LOCAL\", \"baseSeverity\": \"MEDIUM\", \"vectorString\": \"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\", \"integrityImpact\": \"NONE\", \"userInteraction\": \"NONE\", \"attackComplexity\": \"LOW\", \"availabilityImpact\": \"HIGH\", \"privilegesRequired\": \"LOW\", \"confidentialityImpact\": \"NONE\"}}, {\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2024-50254\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2025-10-01T20:15:40.487858Z\"}}}], \"problemTypes\": [{\"descriptions\": [{\"lang\": \"en\", \"type\": \"CWE\", \"cweId\": \"CWE-401\", \"description\": \"CWE-401 Missing Release of Memory after Effective Lifetime\"}]}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2025-10-01T15:25:11.656Z\"}}], \"cna\": {\"title\": \"bpf: Free dynamically allocated bits in bpf_iter_bits_destroy()\", \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"4665415975b0827e9646cab91c61d02a6b364d59\", \"lessThan\": \"9cee266fafaf79fd465314546f637f9a3c215830\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"4665415975b0827e9646cab91c61d02a6b364d59\", \"lessThan\": \"101ccfbabf4738041273ce64e2b116cf440dea13\", \"versionType\": \"git\"}], \"programFiles\": [\"kernel/bpf/helpers.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.11\"}, {\"status\": \"unaffected\", \"version\": \"0\", \"lessThan\": \"6.11\", \"versionType\": \"semver\"}, {\"status\": \"unaffected\", \"version\": \"6.11.7\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.11.*\"}, {\"status\": \"unaffected\", \"version\": \"6.12\", \"versionType\": \"original_commit_for_fix\", \"lessThanOrEqual\": \"*\"}], \"programFiles\": [\"kernel/bpf/helpers.c\"], \"defaultStatus\": \"affected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/9cee266fafaf79fd465314546f637f9a3c215830\"}, {\"url\": \"https://git.kernel.org/stable/c/101ccfbabf4738041273ce64e2b116cf440dea13\"}], \"x_generator\": {\"engine\": \"bippy-1.2.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\nbpf: Free dynamically allocated bits in bpf_iter_bits_destroy()\\n\\nbpf_iter_bits_destroy() uses \\\"kit-\u003enr_bits \u003c= 64\\\" to check whether the\\nbits are dynamically allocated. However, the check is incorrect and may\\ncause a kmemleak as shown below:\\n\\nunreferenced object 0xffff88812628c8c0 (size 32):\\n  comm \\\"swapper/0\\\", pid 1, jiffies 4294727320\\n  hex dump (first 32 bytes):\\n\\tb0 c1 55 f5 81 88 ff ff f0 f0 f0 f0 f0 f0 f0 f0  ..U...........\\n\\tf0 f0 f0 f0 f0 f0 f0 f0 00 00 00 00 00 00 00 00  ..............\\n  backtrace (crc 781e32cc):\\n\\t[\u003c00000000c452b4ab\u003e] kmemleak_alloc+0x4b/0x80\\n\\t[\u003c0000000004e09f80\u003e] __kmalloc_node_noprof+0x480/0x5c0\\n\\t[\u003c00000000597124d6\u003e] __alloc.isra.0+0x89/0xb0\\n\\t[\u003c000000004ebfffcd\u003e] alloc_bulk+0x2af/0x720\\n\\t[\u003c00000000d9c10145\u003e] prefill_mem_cache+0x7f/0xb0\\n\\t[\u003c00000000ff9738ff\u003e] bpf_mem_alloc_init+0x3e2/0x610\\n\\t[\u003c000000008b616eac\u003e] bpf_global_ma_init+0x19/0x30\\n\\t[\u003c00000000fc473efc\u003e] do_one_initcall+0xd3/0x3c0\\n\\t[\u003c00000000ec81498c\u003e] kernel_init_freeable+0x66a/0x940\\n\\t[\u003c00000000b119f72f\u003e] kernel_init+0x20/0x160\\n\\t[\u003c00000000f11ac9a7\u003e] ret_from_fork+0x3c/0x70\\n\\t[\u003c0000000004671da4\u003e] ret_from_fork_asm+0x1a/0x30\\n\\nThat is because nr_bits will be set as zero in bpf_iter_bits_next()\\nafter all bits have been iterated.\\n\\nFix the issue by setting kit-\u003ebit to kit-\u003enr_bits instead of setting\\nkit-\u003enr_bits to zero when the iteration completes in\\nbpf_iter_bits_next(). In addition, use \\\"!nr_bits || bits \u003e= nr_bits\\\" to\\ncheck whether the iteration is complete and still use \\\"nr_bits \u003e 64\\\" to\\nindicate whether bits are dynamically allocated. The \\\"!nr_bits\\\" check is\\nnecessary because bpf_iter_bits_new() may fail before setting\\nkit-\u003enr_bits, and this condition will stop the iteration early instead\\nof accessing the zeroed or freed kit-\u003ebits.\\n\\nConsidering the initial value of kit-\u003ebits is -1 and the type of\\nkit-\u003enr_bits is unsigned int, change the type of kit-\u003enr_bits to int.\\nThe potential overflow problem will be handled in the following patch.\"}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.11.7\", \"versionStartIncluding\": \"6.11\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.12\", \"versionStartIncluding\": \"6.11\"}], \"operator\": \"OR\"}]}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2025-05-04T09:49:59.116Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2024-50254\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2025-10-01T20:17:24.691Z\", \"dateReserved\": \"2024-10-21T19:36:19.980Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2024-11-09T10:15:07.805Z\", \"assignerShortName\": \"Linux\"}",
      "dataType": "CVE_RECORD",
      "dataVersion": "5.1"
    }
  }
}


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 observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.


Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…