Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2229615/?format=api
{ "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" ] }