{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2026-43114",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2026-43114"
  ],
  "published": "2026-05-06T07:41:37Z",
  "summary": "netfilter: nft_set_pipapo_avx2: don't return non-matching entry on expiry",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nnetfilter: nft_set_pipapo_avx2: don't return non-matching entry on expiry\n\nNew test case fails unexpectedly when avx2 matching functions are used.\n\nThe test first loads a ranomly generated pipapo set\nwith 'ipv4 . port' key, i.e.  nft -f foo.\n\nThis works.  Then, it reloads the set after a flush:\n(echo flush set t s; cat foo) | nft -f -\n\nThis is expected to work, because its the same set after all and it was\nalready loaded once.\n\nBut with avx2, this fails: nft reports a clashing element.\n\nThe reported clash is of following form:\n\n    We successfully re-inserted\n      a . b\n      c . d\n\nThen we try to insert a . d\n\navx2 finds the already existing a . d, which (due to 'flush set') is marked\nas invalid in the new generation.  It skips the element and moves to next.\n\nDue to incorrect masking, the skip-step finds the next matching\nelement *only considering the first field*,\n\ni.e. we return the already reinserted \"a . b\", even though the\nlast field is different and the entry should not have been matched.\n\nNo such error is reported for the generic c implementation (no avx2) or when\nthe last field has to use the 'nft_pipapo_avx2_lookup_slow' fallback.\n\nBisection points to\n7711f4bb4b36 (\"netfilter: nft_set_pipapo: fix range overlap detection\")\nbut that fix merely uncovers this bug.\n\nBefore this commit, the wrong element is returned, but erronously\nreported as a full, identical duplicate.\n\nThe root-cause is too early return in the avx2 match functions.\nWhen we process the last field, we should continue to process data\nuntil the entire input size has been consumed to make sure no stale\nbits remain in the map.",
  "severity": [
    {
      "type": "CVSS_V3",
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L"
    }
  ],
  "affected": [
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:12",
        "name": "linux"
      },
      "versions": [
        "1:6.1.47-1+rpt4"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-2712",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v6",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7l",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v8",
            "binary_version": "1:6.1.47-1+rpt4"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.1.47-1+rpt4": {
            "linux_commit": "655fc658a15ae7a6f37103754adb39ba52a9a14e",
            "upstream_version": "6.1.47",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.1.175",
            "compiled_filter": false
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2026-43114"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/f8c39983fc9c1a978c82e6f2df7bfba8a8561587"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/c7babe2f28b507e17f28e9f753b7caec72d4857f"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/1c43f0dd8691ddf8884793b481ddc7511cf593c3"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/fa4f1f52528c73989d820f32bfca06bec5afeece"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/3d53f9aafd469ae1ea27051e00f5b96ca1b55d52"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/07de44424bb7f17ef9357e8535df96d9e97c40cb"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/0abbc43f71d99baadeeba6fa3fe1c80b676f57ed"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/d3c0037ffe1273fa1961e779ff6906234d6cf53c"
    }
  ],
  "database_specific": {
    "source": "https://git.kernel.org/pub/scm/linux/security/vulns.git",
    "upstream_modified": "2026-08-05T13:16:28Z",
    "severity": {
      "source": "kernel CNA",
      "cvss_v3_score": 9.4,
      "cvss_v3_severity": "Critical",
      "scenario": "AV:N - Although nftables configuration is local, the vulnerable AVX2 pipapo lookup is also used from nftables packet hooks, so a received network packet can exercise it in a deployed firewall ruleset.\nAC:L - No race, memory-layout dependency, or probabilistic condition is required once an affected AVX2 interval/concatenated set with expired or inactive entries exists; the attacker controls the packet key values used for lookup.\nPR:N - A remote packet sender does not need nftables privileges or authentication to trigger the packet-path lookup in an already configured firewall.\nUI:N - No victim user action is needed; packet processing and set lookup occur automatically in the kernel netfilter hook path.\nS:U - The impact remains within the kernel/network filtering security authority and does not cross a VM, IOMMU, or separate sandbox boundary.\nC:H - The bug can falsely match a non-matching set element after an expired or inactive element is skipped, which can bypass firewall policy and expose services or traffic that should have been unreachable.\nI:H - A false nftables set match can select the wrong verdict or map data, allowing unauthorized traffic/action contrary to the intended firewall policy.\nA:L - The same wrong-match behavior can cause legitimate nftables updates to fail with false element clashes or can misclassify selected traffic, but it is not a kernel crash, hang, or memory corruption."
    }
  }
}
