get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2216151/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2216151,
    "url": "http://patchwork.ozlabs.org/api/patches/2216151/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netfilter-devel/patch/20260325222615.637793-2-pablo@netfilter.org/",
    "project": {
        "id": 26,
        "url": "http://patchwork.ozlabs.org/api/projects/26/?format=api",
        "name": "Netfilter Development",
        "link_name": "netfilter-devel",
        "list_id": "netfilter-devel.vger.kernel.org",
        "list_email": "netfilter-devel@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260325222615.637793-2-pablo@netfilter.org>",
    "list_archive_url": null,
    "date": "2026-03-25T22:26:02",
    "name": "[net,01/14] netfilter: nft_set_pipapo_avx2: don't return non-matching entry on expiry",
    "commit_ref": null,
    "pull_url": null,
    "state": "handled-elsewhere",
    "archived": true,
    "hash": "1a13e4180a405db3a2bcfcd0f7f52de9e11ec21f",
    "submitter": {
        "id": 1315,
        "url": "http://patchwork.ozlabs.org/api/people/1315/?format=api",
        "name": "Pablo Neira Ayuso",
        "email": "pablo@netfilter.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/netfilter-devel/patch/20260325222615.637793-2-pablo@netfilter.org/mbox/",
    "series": [
        {
            "id": 497517,
            "url": "http://patchwork.ozlabs.org/api/series/497517/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netfilter-devel/list/?series=497517",
            "date": "2026-03-25T22:26:01",
            "name": "[net,01/14] netfilter: nft_set_pipapo_avx2: don't return non-matching entry on expiry",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/497517/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2216151/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2216151/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <netfilter-devel+bounces-11421-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "netfilter-devel@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=netfilter.org header.i=@netfilter.org\n header.a=rsa-sha256 header.s=2025 header.b=PzXLCM6S;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.234.253.10; helo=sea.lore.kernel.org;\n envelope-from=netfilter-devel+bounces-11421-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=netfilter.org header.i=@netfilter.org\n header.b=\"PzXLCM6S\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=217.70.190.124",
            "smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=netfilter.org",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=netfilter.org"
        ],
        "Received": [
            "from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fh1mf4qKQz1y1x\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 09:29:38 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id C5B4830523FF\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 22:26:37 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 1957A35F172;\n\tWed, 25 Mar 2026 22:26:35 +0000 (UTC)",
            "from mail.netfilter.org (mail.netfilter.org [217.70.190.124])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 3384C355F39;\n\tWed, 25 Mar 2026 22:26:33 +0000 (UTC)",
            "from localhost.localdomain (mail-agni [217.70.190.124])\n\tby mail.netfilter.org (Postfix) with ESMTPSA id E7E1F6017A;\n\tWed, 25 Mar 2026 23:26:24 +0100 (CET)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774477594; cv=none;\n b=prUXSaEY9VQyxD6+4zzvWV19T6EXhRa29/jMLA41Xb7oauXc+kbeAPtUN0eLFv0RRDyU9bQ7+8Sg9wPhMkrA9tSEjW6btIZEtaAkMo7AIDFl/VL2Zi+49fgLjY+aZ2kyEQYynAHecOh+1wqZY+BtqSBX1DvErxRMIC/igezDxSc=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774477594; c=relaxed/simple;\n\tbh=B/PR3ro6kDm/h1WL2reV58k4U8UyFxrpi+1XRIXQgsQ=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=HLdLciTMqNAyVUZlAC9dcA5/EtjD/tPFvVMXGz/HLFT0fJQa6TgbtMdk1as0IwVHxTJLA8L8OPh9gWqY4h32fDRQUy9aDzfVYYQH8waktODcNC84XafMXJIL5sLObOO61wyZ1Bj4oJvbJC0bZmLY48y+BgI2RtuncO6N8ECQMGU=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=netfilter.org;\n spf=pass smtp.mailfrom=netfilter.org;\n dkim=pass (2048-bit key) header.d=netfilter.org header.i=@netfilter.org\n header.b=PzXLCM6S; arc=none smtp.client-ip=217.70.190.124",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=netfilter.org;\n\ts=2025; t=1774477585;\n\tbh=zNhPcQvv9ix+U6mE34OvR0ov6W+xNh0ysGj3Uq+7CXE=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=PzXLCM6SCEykoChxK53aUNgWuWKlxh05ECyVjY5eyDUTWhxr9Z0ZzMMELICX8fJVg\n\t PqFWkso7p5/LDUjOKojxEfldQOS2ASnRpo+rFezaqPLzt4+rJbv68ILOmlPKO1kUcr\n\t K7emFu0p5wW6Epegj/z5f3R8c/KutGWkeR43I/gVdjUsvfPQ8X9RfiLbN0npB9qXBt\n\t KrgOcw4ulGu9n9k9RCA8xGxfHLMj2+Nvvmo2I/3QUZUHrRW/rHaZb8oZo2FlswJpRY\n\t t1nKGu7edkivpJ/S0fwP3kzjjvTAM+2AZmx4QkFqSwx20NMomU+cVPRKi16BUdNhkE\n\t uafRB7WuewlCg==",
        "From": "Pablo Neira Ayuso <pablo@netfilter.org>",
        "To": "netfilter-devel@vger.kernel.org",
        "Cc": "davem@davemloft.net,\n\tnetdev@vger.kernel.org,\n\tkuba@kernel.org,\n\tpabeni@redhat.com,\n\tedumazet@google.com,\n\tfw@strlen.de,\n\thorms@kernel.org",
        "Subject": "[PATCH net 01/14] netfilter: nft_set_pipapo_avx2: don't return\n non-matching entry on expiry",
        "Date": "Wed, 25 Mar 2026 23:26:02 +0100",
        "Message-ID": "<20260325222615.637793-2-pablo@netfilter.org>",
        "X-Mailer": "git-send-email 2.47.3",
        "In-Reply-To": "<20260325222615.637793-1-pablo@netfilter.org>",
        "References": "<20260325222615.637793-1-pablo@netfilter.org>",
        "Precedence": "bulk",
        "X-Mailing-List": "netfilter-devel@vger.kernel.org",
        "List-Id": "<netfilter-devel.vger.kernel.org>",
        "List-Subscribe": "<mailto:netfilter-devel+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:netfilter-devel+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit"
    },
    "content": "From: Florian Westphal <fw@strlen.de>\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.\n\nLink: https://lore.kernel.org/netfilter-devel/20260321152506.037f68c0@elisabeth/\nSigned-off-by: Florian Westphal <fw@strlen.de>\nReviewed-by: Stefano Brivio <sbrivio@redhat.com>\nSigned-off-by: Pablo Neira Ayuso <pablo@netfilter.org>\n---\n net/netfilter/nft_set_pipapo_avx2.c | 20 ++++++++++----------\n 1 file changed, 10 insertions(+), 10 deletions(-)",
    "diff": "diff --git a/net/netfilter/nft_set_pipapo_avx2.c b/net/netfilter/nft_set_pipapo_avx2.c\nindex 7ff90325c97f..6395982e4d95 100644\n--- a/net/netfilter/nft_set_pipapo_avx2.c\n+++ b/net/netfilter/nft_set_pipapo_avx2.c\n@@ -242,7 +242,7 @@ static int nft_pipapo_avx2_lookup_4b_2(unsigned long *map, unsigned long *fill,\n \n \t\tb = nft_pipapo_avx2_refill(i_ul, &map[i_ul], fill, f->mt, last);\n \t\tif (last)\n-\t\t\treturn b;\n+\t\t\tret = b;\n \n \t\tif (unlikely(ret == -1))\n \t\t\tret = b / XSAVE_YMM_SIZE;\n@@ -319,7 +319,7 @@ static int nft_pipapo_avx2_lookup_4b_4(unsigned long *map, unsigned long *fill,\n \n \t\tb = nft_pipapo_avx2_refill(i_ul, &map[i_ul], fill, f->mt, last);\n \t\tif (last)\n-\t\t\treturn b;\n+\t\t\tret = b;\n \n \t\tif (unlikely(ret == -1))\n \t\t\tret = b / XSAVE_YMM_SIZE;\n@@ -414,7 +414,7 @@ static int nft_pipapo_avx2_lookup_4b_8(unsigned long *map, unsigned long *fill,\n \n \t\tb = nft_pipapo_avx2_refill(i_ul, &map[i_ul], fill, f->mt, last);\n \t\tif (last)\n-\t\t\treturn b;\n+\t\t\tret = b;\n \n \t\tif (unlikely(ret == -1))\n \t\t\tret = b / XSAVE_YMM_SIZE;\n@@ -505,7 +505,7 @@ static int nft_pipapo_avx2_lookup_4b_12(unsigned long *map, unsigned long *fill,\n \n \t\tb = nft_pipapo_avx2_refill(i_ul, &map[i_ul], fill, f->mt, last);\n \t\tif (last)\n-\t\t\treturn b;\n+\t\t\tret = b;\n \n \t\tif (unlikely(ret == -1))\n \t\t\tret = b / XSAVE_YMM_SIZE;\n@@ -641,7 +641,7 @@ static int nft_pipapo_avx2_lookup_4b_32(unsigned long *map, unsigned long *fill,\n \n \t\tb = nft_pipapo_avx2_refill(i_ul, &map[i_ul], fill, f->mt, last);\n \t\tif (last)\n-\t\t\treturn b;\n+\t\t\tret = b;\n \n \t\tif (unlikely(ret == -1))\n \t\t\tret = b / XSAVE_YMM_SIZE;\n@@ -699,7 +699,7 @@ static int nft_pipapo_avx2_lookup_8b_1(unsigned long *map, unsigned long *fill,\n \n \t\tb = nft_pipapo_avx2_refill(i_ul, &map[i_ul], fill, f->mt, last);\n \t\tif (last)\n-\t\t\treturn b;\n+\t\t\tret = b;\n \n \t\tif (unlikely(ret == -1))\n \t\t\tret = b / XSAVE_YMM_SIZE;\n@@ -764,7 +764,7 @@ static int nft_pipapo_avx2_lookup_8b_2(unsigned long *map, unsigned long *fill,\n \n \t\tb = nft_pipapo_avx2_refill(i_ul, &map[i_ul], fill, f->mt, last);\n \t\tif (last)\n-\t\t\treturn b;\n+\t\t\tret = b;\n \n \t\tif (unlikely(ret == -1))\n \t\t\tret = b / XSAVE_YMM_SIZE;\n@@ -839,7 +839,7 @@ static int nft_pipapo_avx2_lookup_8b_4(unsigned long *map, unsigned long *fill,\n \n \t\tb = nft_pipapo_avx2_refill(i_ul, &map[i_ul], fill, f->mt, last);\n \t\tif (last)\n-\t\t\treturn b;\n+\t\t\tret = b;\n \n \t\tif (unlikely(ret == -1))\n \t\t\tret = b / XSAVE_YMM_SIZE;\n@@ -925,7 +925,7 @@ static int nft_pipapo_avx2_lookup_8b_6(unsigned long *map, unsigned long *fill,\n \n \t\tb = nft_pipapo_avx2_refill(i_ul, &map[i_ul], fill, f->mt, last);\n \t\tif (last)\n-\t\t\treturn b;\n+\t\t\tret = b;\n \n \t\tif (unlikely(ret == -1))\n \t\t\tret = b / XSAVE_YMM_SIZE;\n@@ -1019,7 +1019,7 @@ static int nft_pipapo_avx2_lookup_8b_16(unsigned long *map, unsigned long *fill,\n \n \t\tb = nft_pipapo_avx2_refill(i_ul, &map[i_ul], fill, f->mt, last);\n \t\tif (last)\n-\t\t\treturn b;\n+\t\t\tret = b;\n \n \t\tif (unlikely(ret == -1))\n \t\t\tret = b / XSAVE_YMM_SIZE;\n",
    "prefixes": [
        "net",
        "01/14"
    ]
}