get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2229615,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2229615/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/ltp/patch/20260428143614.69724-1-sachinp@linux.ibm.com/",
    "project": {
        "id": 59,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/59/?format=api",
        "name": "Linux Test Project development",
        "link_name": "ltp",
        "list_id": "ltp.lists.linux.it",
        "list_email": "ltp@lists.linux.it",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20260428143614.69724-1-sachinp@linux.ibm.com>",
    "date": "2026-04-28T14:36:13",
    "name": "[v4,1/2] doc: generate CVE catalog documentation",
    "commit_ref": null,
    "pull_url": null,
    "state": "under-review",
    "archived": false,
    "hash": "b06ceee4b9e48771c06a2a87c32500a3cb1f825d",
    "submitter": {
        "id": 83212,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/83212/?format=api",
        "name": "Sachin Sant",
        "email": "sachinp@linux.ibm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/ltp/patch/20260428143614.69724-1-sachinp@linux.ibm.com/mbox/",
    "series": [
        {
            "id": 501869,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/501869/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/ltp/list/?series=501869",
            "date": "2026-04-28T14:36:13",
            "name": "[v4,1/2] doc: generate CVE catalog documentation",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/501869/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2229615/comments/",
    "check": "success",
    "checks": "http://patchwork.ozlabs.org/api/patches/2229615/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "ltp@lists.linux.it"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "ltp@picard.linux.it"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=LhiwK/E6;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.linux.it\n (client-ip=2001:1418:10:5::2; helo=picard.linux.it;\n envelope-from=ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from picard.linux.it (picard.linux.it [IPv6:2001:1418:10:5::2])\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 4g4jg36HbSz1xrS\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 00:36:30 +1000 (AEST)",
            "from picard.linux.it (localhost [IPv6:::1])\n\tby picard.linux.it (Postfix) with ESMTP id 004FB3E2D55\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 16:36:27 +0200 (CEST)",
            "from in-6.smtp.seeweb.it (in-6.smtp.seeweb.it [217.194.8.6])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature ECDSA (secp384r1))\n (No client certificate requested)\n by picard.linux.it (Postfix) with ESMTPS id 222193E1A46\n for <ltp@lists.linux.it>; Tue, 28 Apr 2026 16:36:23 +0200 (CEST)",
            "from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com\n [148.163.156.1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by in-6.smtp.seeweb.it (Postfix) with ESMTPS id D7BC31400773\n for <ltp@lists.linux.it>; Tue, 28 Apr 2026 16:36:22 +0200 (CEST)",
            "from pps.filterd (m0353729.ppops.net [127.0.0.1])\n by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63SCUuB9872522; Tue, 28 Apr 2026 14:36:20 GMT",
            "from ppma23.wdc07v.mail.ibm.com\n (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93])\n by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4drn9r60ds-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Tue, 28 Apr 2026 14:36:20 +0000 (GMT)",
            "from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1])\n by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id\n 63SENhKs001900;\n Tue, 28 Apr 2026 14:36:19 GMT",
            "from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225])\n by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4ds9eha15a-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Tue, 28 Apr 2026 14:36:19 +0000 (GMT)",
            "from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com\n [10.20.54.101])\n by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n 63SEaHQj48234896\n (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);\n Tue, 28 Apr 2026 14:36:17 GMT",
            "from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])\n by IMSVA (Postfix) with ESMTP id 1368E20043;\n Tue, 28 Apr 2026 14:36:17 +0000 (GMT)",
            "from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])\n by IMSVA (Postfix) with ESMTP id 416E520040;\n Tue, 28 Apr 2026 14:36:16 +0000 (GMT)",
            "from localhost.localdomain (unknown [9.43.64.210])\n by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP;\n Tue, 28 Apr 2026 14:36:16 +0000 (GMT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc\n :content-transfer-encoding:date:from:message-id:mime-version\n :subject:to; s=pp1; bh=wQn/hA07RV6ozX6ptF+Ko2UPeMakO9BLsK/6RlSj2\n 0s=; b=LhiwK/E6lurrCAhfQdeD9MuqLDae5ElwluMLc2OUrUFBeZKUU5plPxatL\n tRNPdU63vXLDsRPpSKRPugDhntlN/gHE9cXMIafOfw000Ado4+GyPABIWUwDLuuF\n ogjcISahhfC1kEq+gUWFFDl5gSVBEuBafBv4nOAi/1XSHV5NlvO1NXEbdxCzwuk9\n RfV25V9EXAzH8RnKvS/XtSAWvlDDNo0tveBTHbplPlsDiW7fpQSYgdty5WroIgVh\n nWVPCra1Zhhc+jjyzO1enjIF+aUkFVKmiBEebcpvVmATuubg+4nF7zNBH4EC/qIF\n JCLg9AZbn+dnZ9su/ZdvtM42v2Eow==",
        "From": "Sachin Sant <sachinp@linux.ibm.com>",
        "To": "ltp@lists.linux.it",
        "Date": "Tue, 28 Apr 2026 20:06:13 +0530",
        "Message-Id": "<20260428143614.69724-1-sachinp@linux.ibm.com>",
        "X-Mailer": "git-send-email 2.39.1",
        "MIME-Version": "1.0",
        "X-TM-AS-GCONF": "00",
        "X-Proofpoint-GUID": "XtAY6kHpdD3V8G3tUlTIXJEy3_5Q28UR",
        "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNDI4MDEzNSBTYWx0ZWRfXxecJR/5+tKaV\n 3r4B5kmHoJG6m/pgSLvrHauLke0Sqse2O/Ipy95McHnZ+sO/7fNfJSu+ldE1UemBvuxx6qsjtEK\n yyS2uva902z33HTwOoJY0mtzwmDy7VcHEs7x7nWrm5iufu1qVMcnmtBxr5ZOr5+WNipWTwRcn1j\n KyHVMHb0ntGL0Yp8z9Wj2zrghgjtXqWCQW4/q6urgoI5zO0ovZ3eBTwJ5whvL2RtqdJRUQ6pqE/\n SaTuUKwxVOJHvmzJhbePN5fuyMm/P5fC4fVXcIKMGcKI4JKhpX67nitmL1ht/KSgfr4qCZ3ohry\n 9R0aAFWsnigAAwDCqybx8D2hwxyuXaj49da+05PGUfjqZe5pl9+iG1YpN6SXNSSyHUa9oPaekvS\n Gl9hWDNYA7d4sNTB9N56cFwztKxolU8+cQTNBSSUtrtGZWIOJYaZGE0sOMsJ9z4L/WxEBcCHsAF\n Wp97vcb5vT8YCBVi0Vg==",
        "X-Authority-Analysis": "v=2.4 cv=Kc7idwYD c=1 sm=1 tr=0 ts=69f0c5e4 cx=c_pps\n a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17\n a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22\n a=uAbxVGIbfxUO_5tXvNgY:22 a=NEAV23lmAAAA:8 a=VwQbUJbxAAAA:8 a=1XWaLZrsAAAA:8\n a=VnNF1IyMAAAA:8 a=iox4zFpeAAAA:8 a=eR2rzuTUKTB_TkdJYpAA:9\n a=WzC6qhA0u3u7Ye7llzcV:22",
        "X-Proofpoint-ORIG-GUID": "XtAY6kHpdD3V8G3tUlTIXJEy3_5Q28UR",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-28_04,2026-04-28_01,2025-10-01_01",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n clxscore=1015 phishscore=0 bulkscore=0 adultscore=0 spamscore=0\n malwarescore=0 impostorscore=0 priorityscore=1501 lowpriorityscore=0\n suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000\n definitions=main-2604280135",
        "X-Spam-Status": "No, score=0.1 required=7.0 tests=DKIM_SIGNED,DKIM_VALID,\n SPF_HELO_NONE,SPF_PASS shortcircuit=no autolearn=disabled version=4.0.1",
        "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on in-6.smtp.seeweb.it",
        "X-Virus-Scanned": "clamav-milter 1.0.9 at in-6.smtp.seeweb.it",
        "X-Virus-Status": "Clean",
        "Subject": "[LTP] [PATCH v4 1/2] doc: generate CVE catalog documentation",
        "X-BeenThere": "ltp@lists.linux.it",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "Linux Test Project <ltp.lists.linux.it>",
        "List-Unsubscribe": "<https://lists.linux.it/options/ltp>,\n <mailto:ltp-request@lists.linux.it?subject=unsubscribe>",
        "List-Archive": "<http://lists.linux.it/pipermail/ltp/>",
        "List-Post": "<mailto:ltp@lists.linux.it>",
        "List-Help": "<mailto:ltp-request@lists.linux.it?subject=help>",
        "List-Subscribe": "<https://lists.linux.it/listinfo/ltp>,\n <mailto:ltp-request@lists.linux.it?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it",
        "Sender": "\"ltp\" <ltp-bounces+incoming=patchwork.ozlabs.org@lists.linux.it>"
    },
    "content": "Add a Sphinx builder hook to parse runtest/cve and generate a\ncomprehensive CVE catalog in a single documentation file.\n\nThe implementation:\n- Parses runtest/cve to extract CVE IDs, test names, and options\n- Generates a single CVE catalog file (_static/cve.rst) containing:\n  * Total CVE count\n  * All CVEs sorted in descending order (newest first)\n  * Table of CVEs:\n    - CVE ID\n    - Test name (Cross-references to test catalog entries)\n- Integrates CVE catalog into main documentation index\n\nCloses: https://github.com/linux-test-project/ltp/issues/1254\nCc: Andrea Cervesato <andrea.cervesato@suse.com>\nCc: Petr Vorel <pvorel@suse.cz>\nSigned-off-by: Sachin Sant <sachinp@linux.ibm.com>\n---\nV4 changes:\n- Simplified the CVE table (id, test name)\n- Removed individual CVE pages\n- v3 link https://lore.kernel.org/ltp/69f0b046.df0a0220.3765a8.f8e4@mx.google.com/T/#u\n\nV3 changes:\n- CVEs sorted in descending order\n- append test name to CVE id : CVE (Test Name)\n- Separate page for CVE catalog\n- Link cve testcases to Test catalog entry\n- v2 link https://lore.kernel.org/ltp/0df5f75d-eb8f-428e-9888-bb7a90a6b1a4@linux.ibm.com/\n\nV2 changes:\n- Replace Fixes tag by Closes\n- V1 link https://lore.kernel.org/ltp/20260423105304.59788-1-sachinp@linux.ibm.com/T/#u\n\n---\n doc/Makefile              |  2 +-\n doc/conf.py               | 91 +++++++++++++++++++++++++++++++++++++++\n doc/index.rst             |  4 ++\n doc/users/cve_catalog.rst |  6 +++\n 4 files changed, 102 insertions(+), 1 deletion(-)\n create mode 100644 doc/users/cve_catalog.rst",
    "diff": "diff --git a/doc/Makefile b/doc/Makefile\nindex 3123b1cd7..e99cbe666 100644\n--- a/doc/Makefile\n+++ b/doc/Makefile\n@@ -30,7 +30,7 @@ spelling:\n \t$(RUN_VENV); sphinx-build -b spelling -d build/doctree . build/spelling\n \n clean:\n-\trm -rf html/ build/ _static/syscalls.rst _static/tests.rst syscalls.tbl \\\n+\trm -rf html/ build/ _static/syscalls.rst _static/tests.rst _static/cve.rst syscalls.tbl \\\n \t\t${abs_top_builddir}/metadata/ltp.json\n \n distclean: clean\ndiff --git a/doc/conf.py b/doc/conf.py\nindex 63d09352e..d692638a0 100644\n--- a/doc/conf.py\n+++ b/doc/conf.py\n@@ -30,6 +30,15 @@ extensions = [\n     'sphinx.ext.extlinks',\n ]\n \n+# Configure autosectionlabel to prefix labels with document name\n+# This prevents duplicate labels when same test name appears in multiple files\n+autosectionlabel_prefix_document = True\n+# Only create labels for sections with unique names\n+autosectionlabel_maxdepth = 2\n+\n+# Suppress duplicate label warnings for kernel-doc generated content\n+suppress_warnings = ['autosectionlabel.*']\n+\n exclude_patterns = [\"html*\", '_static*', '.venv*']\n extlinks = {\n     'repo': (f'{ltp_repo}/%s', '%s'),\n@@ -535,6 +544,87 @@ def generate_test_catalog(_):\n     with open(output, 'w+', encoding='utf-8') as new_tests:\n         new_tests.write('\\n'.join(text))\n \n+def generate_cve_catalog(_):\n+    \"\"\"\n+    Generate CVE catalog in a single file. Parse runtest/cve file and\n+    generate documentation with links to CVE databases and test sources.\n+    Similar to test_catalog, creates a single _static/cve.rst file with\n+    all CVE information.\n+    \"\"\"\n+    output = '_static/cve.rst'\n+    runtest_cve = '../runtest/cve'\n+    metadata_file = '../metadata/ltp.json'\n+\n+    # Load metadata to check which tests exist in the catalog\n+    metadata = None\n+    try:\n+        with open(metadata_file, 'r', encoding='utf-8') as data:\n+            metadata = json.load(data)\n+    except FileNotFoundError:\n+        logger = sphinx.util.logging.getLogger(__name__)\n+        msg = f\"Can't find metadata file ({metadata_file})\"\n+        logger.warning(msg)\n+\n+    # Parse runtest/cve file\n+    cve_data = {}\n+\n+    try:\n+        with open(runtest_cve, 'r', encoding='utf-8') as f:\n+            for line in f:\n+                line = line.strip()\n+                if not line or line.startswith('#'):\n+                    continue\n+\n+                parts = line.split(None, 2)\n+                if len(parts) >= 2:\n+                    cve_id = parts[0].upper()\n+                    test_name = parts[1]\n+\n+                    cve_data[cve_id] = {\n+                        'cve_id': cve_id,\n+                        'test_name': test_name,\n+                    }\n+    except FileNotFoundError:\n+        logger = sphinx.util.logging.getLogger(__name__)\n+        msg = f\"Can't find runtest/cve file ({runtest_cve})\"\n+        logger.warning(msg)\n+        return\n+\n+    # Generate single CVE catalog file\n+    total_cves = len(cve_data)\n+    text = [\n+        '.. warning::',\n+        '    The following CVE catalog has been generated from the',\n+        '    runtest/cve file and includes all CVE reproducers in LTP.',\n+        '',\n+        f'LTP includes reproducers for {total_cves} known CVEs.',\n+        '',\n+        '.. list-table::',\n+        '   :header-rows: 1',\n+        '   :widths: 40 60',\n+        '',\n+        '   * - CVE ID',\n+        '     - Test Name',\n+    ]\n+\n+    # Add CVEs in descending order (newest first)\n+    for cve_id, cve_info in sorted(cve_data.items(), reverse=True):\n+        test_name = cve_info[\"test_name\"]\n+\n+        # Only create cross-reference if test exists in metadata\n+        if metadata and test_name in metadata.get('tests', {}):\n+            test_anchor = f\"users/test_catalog:{test_name}\"\n+            test_link = f\":ref:`{test_name} <{test_anchor}>`\"\n+        else:\n+            test_link = f\"``{test_name}``\"\n+\n+        text.extend([\n+            f'   * - {cve_id}',\n+            f'     - {test_link}',\n+        ])\n+\n+    with open(output, 'w+', encoding='utf-8') as cve_catalog:\n+        cve_catalog.write('\\n'.join(text))\n \n def setup(app):\n     \"\"\"\n@@ -543,4 +633,5 @@ def setup(app):\n     \"\"\"\n     app.add_css_file('custom.css')\n     app.connect('builder-inited', generate_syscalls_stats)\n+    app.connect('builder-inited', generate_cve_catalog)\n     app.connect('builder-inited', generate_test_catalog)\ndiff --git a/doc/index.rst b/doc/index.rst\nindex 496a12f80..733495f51 100644\n--- a/doc/index.rst\n+++ b/doc/index.rst\n@@ -12,6 +12,7 @@\n    users/testers_guide\n    users/supported_systems\n    users/stats\n+   users/cve_catalog\n    users/test_catalog\n \n .. toctree::\n@@ -58,6 +59,9 @@ For users\n :doc:`users/stats`\n    Some LTP statistics\n \n+:doc:`users/cve_catalog`\n+   LTP reproducers for known CVEs\n+\n :doc:`users/test_catalog`\n    The LTP test catalog\n \ndiff --git a/doc/users/cve_catalog.rst b/doc/users/cve_catalog.rst\nnew file mode 100644\nindex 000000000..5a5b9b54a\n--- /dev/null\n+++ b/doc/users/cve_catalog.rst\n@@ -0,0 +1,6 @@\n+.. SPDX-License-Identifier: GPL-2.0-or-later\n+\n+CVE catalog\n+===========\n+\n+.. include:: ../_static/cve.rst\n",
    "prefixes": [
        "v4",
        "1/2"
    ]
}