Cover Letter Detail
Show a cover letter.
GET /api/covers/2196064/?format=api
{ "id": 2196064, "url": "http://patchwork.ozlabs.org/api/covers/2196064/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260212204352.1044699-1-zycai@linux.ibm.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260212204352.1044699-1-zycai@linux.ibm.com>", "list_archive_url": null, "date": "2026-02-12T20:43:21", "name": "[v8,00/30] Secure IPL Support for SCSI Scheme of virtio-blk/virtio-scsi Devices", "submitter": { "id": 90643, "url": "http://patchwork.ozlabs.org/api/people/90643/?format=api", "name": "Zhuoying Cai", "email": "zycai@linux.ibm.com" }, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260212204352.1044699-1-zycai@linux.ibm.com/mbox/", "series": [ { "id": 492021, "url": "http://patchwork.ozlabs.org/api/series/492021/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=492021", "date": "2026-02-12T20:43:36", "name": "Secure IPL Support for SCSI Scheme of virtio-blk/virtio-scsi Devices", "version": 8, "mbox": "http://patchwork.ozlabs.org/series/492021/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/covers/2196064/comments/", "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=EjB2ex4w;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fBnNh5bczz1xxM\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 13 Feb 2026 07:44:51 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vqdXn-0000bL-TT; Thu, 12 Feb 2026 15:44:11 -0500", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <zycai@linux.ibm.com>)\n id 1vqdXm-0000aQ-Fb; Thu, 12 Feb 2026 15:44:10 -0500", "from mx0b-001b2d01.pphosted.com ([148.163.158.5])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <zycai@linux.ibm.com>)\n id 1vqdXi-0007HZ-1N; Thu, 12 Feb 2026 15:44:10 -0500", "from pps.filterd (m0360072.ppops.net [127.0.0.1])\n by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 61C8OZM71782847; Thu, 12 Feb 2026 20:43:57 GMT", "from ppma11.dal12v.mail.ibm.com\n (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219])\n by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4c696x5c0s-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Thu, 12 Feb 2026 20:43:57 +0000 (GMT)", "from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1])\n by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id\n 61CIZcCp001847;\n Thu, 12 Feb 2026 20:43:56 GMT", "from smtprelay02.dal12v.mail.ibm.com ([172.16.1.4])\n by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4c6je2bvg0-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Thu, 12 Feb 2026 20:43:56 +0000", "from smtpav06.wdc07v.mail.ibm.com (smtpav06.wdc07v.mail.ibm.com\n [10.39.53.233])\n by smtprelay02.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n 61CKhtVn25625178\n (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);\n Thu, 12 Feb 2026 20:43:55 GMT", "from smtpav06.wdc07v.mail.ibm.com (unknown [127.0.0.1])\n by IMSVA (Postfix) with ESMTP id E72FC5804E;\n Thu, 12 Feb 2026 20:43:54 +0000 (GMT)", "from smtpav06.wdc07v.mail.ibm.com (unknown [127.0.0.1])\n by IMSVA (Postfix) with ESMTP id 0F0FE58054;\n Thu, 12 Feb 2026 20:43:53 +0000 (GMT)", "from fedora-workstation.ibmuc.com (unknown [9.61.112.15])\n by smtpav06.wdc07v.mail.ibm.com (Postfix) with ESMTP;\n Thu, 12 Feb 2026 20:43:52 +0000 (GMT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc\n :content-transfer-encoding:content-type:date:from:message-id\n :mime-version:subject:to; s=pp1; bh=QUXe+BTe9ABuOtTuozifvz93AjzS\n OdARhoXjFdOSIEM=; b=EjB2ex4wdnle2xFzckDGw4Mp5J9YzvxnsD2bux2G1HR5\n C8uHb9GXitIkwyUgpr2zqP3aGzHKjPruONx9CyR6hcAEA9YQ9mNs74jFirOgQ82o\n Mq5wDP3+hr+ngZPeoP9+RRYuxhmo5SdlYQ+OyeS2kwrygm/mDXAAoQjUn7ass5ew\n hDN7He+tJgvzuEGAkV7XHWmQXfNjHxspcibzyu77WoErE95A+ZdJ+ruNN1kX+j8E\n GR3+qyhIwl66Mp1+MZTUbMSEN8FG+TuzO5b2eDB1xKIikiip+0CQrQP87KefjePX\n oevZJf4LmskuvB5kHU4PDkBBbqDxRXR0rBqxR5se/g==", "From": "Zhuoying Cai <zycai@linux.ibm.com>", "To": "thuth@redhat.com, berrange@redhat.com, richard.henderson@linaro.org,\n jrossi@linux.ibm.com, qemu-s390x@nongnu.org, qemu-devel@nongnu.org", "Cc": "david@kernel.org, walling@linux.ibm.com, jjherne@linux.ibm.com,\n pasic@linux.ibm.com, borntraeger@linux.ibm.com, farman@linux.ibm.com,\n mjrosato@linux.ibm.com, iii@linux.ibm.com, eblake@redhat.com,\n armbru@redhat.com, zycai@linux.ibm.com, alifm@linux.ibm.com,\n brueckner@linux.ibm.com", "Subject": "[PATCH v8 00/30] Secure IPL Support for SCSI Scheme of\n virtio-blk/virtio-scsi Devices", "Date": "Thu, 12 Feb 2026 15:43:21 -0500", "Message-ID": "<20260212204352.1044699-1-zycai@linux.ibm.com>", "X-Mailer": "git-send-email 2.52.0", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "X-TM-AS-GCONF": "00", "X-Authority-Analysis": "v=2.4 cv=WZYBqkhX c=1 sm=1 tr=0 ts=698e3b8d cx=c_pps\n a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17\n a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=VkNPw1HP01LnGYTKEx00:22\n a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=20KFwNOVAAAA:8\n a=VnNF1IyMAAAA:8 a=q5T4S90kAAAA:8 a=ZKfjIU6CK3J2yrLE9MkA:9\n a=bXDXUzOjxYUDgio6:21 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10\n a=LnBBZQxPVJ0Z7KJyRdxh:22", "X-Proofpoint-GUID": "GLlAYOUf0V2koRwDkP33YLWvg5TOtzlk", "X-Proofpoint-ORIG-GUID": "GLlAYOUf0V2koRwDkP33YLWvg5TOtzlk", "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwMjEyMDE1NyBTYWx0ZWRfX1OILzOp/1lVF\n 9nIuZjT+trJrPaLpTSU7KzjEeB5bKCkfRZRGdTIcJHvyrdrOD2GBzZHGiJq4dWs/2teL4RzH2sd\n qkOsEsNwum0BKFTxVViv+vhvd2xRvgD0qRU0b0umAD/qwwnT9L4hAJzBEXozGzNJf7Lc3MtwTdY\n v3JOCFPAao497So/OtcVzCPY7/hnI8QOSTJvoHTjyvblBu+ReO9pRS9wese7rRgUoJ6LHC1yIYI\n aBp46dMJcr/jQHMDGT7sKxc0g9coqNhuMGO4Rl1jy8nZitLxuw/cmE1qhv3mO/UA5CESX6Mxco3\n 4rHhcQK7sOM6VEA7pmrRsRm9XjVKtURvnCbtLQ72H2OUUgRG23y+tCgvBItQfYrUHC58IcA+uVO\n VxoVpGKbLYKXeeecVaiAvx3rkAlOzP0ZSnp0LsbRXUVIgmTp+okLCwc1QdC0yYhsLA+J3wqQTVN\n My/JRNSdxHp+h3YhMKA==", "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-02-12_05,2026-02-12_03,2025-10-01_01", "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n spamscore=0 clxscore=1011 phishscore=0 bulkscore=0 adultscore=0\n priorityscore=1501 lowpriorityscore=0 suspectscore=0 impostorscore=0\n malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000\n definitions=main-2602120157", "Received-SPF": "pass client-ip=148.163.158.5; envelope-from=zycai@linux.ibm.com;\n helo=mx0b-001b2d01.pphosted.com", "X-Spam_score_int": "-26", "X-Spam_score": "-2.7", "X-Spam_bar": "--", "X-Spam_report": "(-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7,\n RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "Changelog v7->v8\n\n- Edited documentation\n\n[PATCH v7 01/29] Add boot-certs to s390-ccw-virtio machine type\noption\n- Updated version number from 10.2 to 11.0\n\n[PATCH v7 02/29] crypto/x509-utils: Refactor with GNUTLS fallback\n- Added Reviewed-by: Thomas Huth <thuth@redhat.com>\n\n[PATCH v7 03/29] crypto/x509-utils: Add helper functions for\ncertificate store\n- Added Reviewed-by: Thomas Huth <thuth@redhat.com>\n\n[PATCH v7 04/29] hw/s390x/ipl: Create certificate store\n- Merged init_cert_x509() with init_cert()\n- Simplified certificate path handling; removed redundant NULL\n checks in get_cert_paths()\n- Added warnings for empty certificate directories and non-.pem\n files\n- Renamed variables: VC_* → CERT_* and max_cert_size →\n largest_cert_size\n- Made certificate store initialization independent of kernel/IPLB\n state\n- Fixed memory leak\n- Added comments explaining why DER data is not stored in\n S390IPLCertificate\n\n[PATCH v7 05/29] s390x/diag: Introduce DIAG 320 for Certificate Store\nFacility\n- Simplified control flow in handle_diag_320()\n- Removed the word \"Provide\" from description text\n\n[PATCH v7 06/29] s390x/diag: Refactor address validation check from\ndiag308_parm_check()\n- Added Reviewed-by: Collin Walling <walling@linux.ibm.com>\n- Added Reviewed-by: Hendrik Brueckner <brueckner@linux.ibm.com>\n\n[PATCH v7 07/29] s390x/diag: Implement DIAG 320 subcode 1\n- Added upper-bound validation for vcssb->length\n- Added Reviewed-by: Collin Walling <walling@linux.ibm.com>\n\n[PATCH v7 08/29] crypto/x509-utils: Add helper functions for DIAG 320\nsubcode 2\n- Simplified ECC curve validation logic\n- Moved public-key algorithm detection to internal helpers\n- Removed unused QCRYPTO_PK_ALGO enum\n- Fixed commit message\n\n[PATCH v7 09/29] s390x/diag: Implement DIAG 320 subcode 2\n- Added sanity checks for key ID retrieval; mark certificates\n invalid if extraction fails\n- Reworked VCE construction logic\n- Pass S390IPLCertificate as const pointers instead of copying\n structs\n\n[PATCH v7 10/29] s390x/diag: Introduce DIAG 508 for secure IPL\noperations\n- Added Reviewed-by: Thomas Huth <thuth@redhat.com>\n\n[PATCH v7 11/29] crypto/x509-utils: Add helper functions for DIAG 508\nsubcode 1\n- Fixed typos\n- Added Reviewed-by: Thomas Huth <thuth@redhat.com>\n- Added Reviewed-by: Farhan Ali <alialifm@linux.ibm.com>\n\n[PATCH v7 12/29] s390x/diag: Implement DIAG 508 subcode 1 for signature\nverification\n- Added comments on maximum component and signature lengths\n- Added warning indicating failures due to oversize signature or\n component\n- Added Reviewed-by: Thomas Huth <thuth@redhat.com>\n\n[PATCH v7 13/29] pc-bios/s390-ccw: Introduce IPL Information Report\nBlock (IIRB)\n- Updated documentation describing guest kernel usage of certificate\n data in the IIRB\n- Simplified and renamed flags and type definitions\n- Merged unused and reserved fields\n- Moved IIRB definitions from pc-bios/s390-ccw/iplb.h to\n include/hw/s390x/ipl/qipl.h\n\n[PATCH v7 14/29] pc-bios/s390-ccw: Define memory for IPLB and convert\nIPLB to pointers\n- Moved IplBlocks struct from pc-bios/s390-ccw/iplb.h to\n include/hw/s390x/ipl/qipl.h\n- Moved attribute annotations to the ipl_data declaration in main.c\n\n * Note: checkpatch.pl flags the following:\n ERROR: externs should be avoided in .c files\n #88: FILE: pc-bios/s390-ccw/main.c:26:\n +IplBlocks ipl_data __attribute__((__aligned__(PAGE_SIZE)));\n\nThis appears to be a false positive, as IplBlocks is not declared as an\nextern in a .c file, and checkpatch.pl reports the same warning for the\nexisting IplParameterBlock declaration in main.c even before this patch.\n\n[PATCH v7 15/29] hw/s390x/ipl: Add IPIB flags to IPL Parameter Block\n- Added Reviewed-by: Thomas Huth <thuth@redhat.com>\n\n[PATCH v7 16/29] s390x: Guest support for Secure-IPL Facility\n- Fixed reserved-field off-by-one error\n\n[PATCH v7 17/29] pc-bios/s390-ccw: Refactor zipl_run()\n- Added Reviewed-by: Thomas Huth <thuth@redhat.com>\n\n[PATCH v7 19/29] pc-bios/s390-ccw: Add signature verification for\nsecure IPL in audit mode\n- Updated warning message\n- Simplified control flow and error handling in zipl_run()\n- Removed UNSPECIFIED boot mode and defaulted to NORMAL\n- Refactored zipl_run_secure()\n - Renamed variables and functions\n- Adjusted index handling in verify_signature(), accounting for\n DIAG 320 when retrieving certificates\n\n[PATCH v7 21/29] pc-bios/s390-ccw: Add additional security checks for\nsecure boot\n- Renamed constants:\n S390_IPL_INFO_IIEI_* → S390_IIEI_*\n S390_IPL_COMPONENT_CEI_* → S390_CEI_*\n- Improved readability by reducing function parameter counts\n- Fixed check_sc() to allow only a single signed binary component\n- Moved address-range/overlap checks to a separate patch\n(I’ve decided to keep the SecureIplSclabInfo struct and\nthe zipl_secure_handle() function design in this version,\nas I believe they fit better after the refactoring in this patch.\nPlease let me know if you have any feedback. Thank you.)\n\n[PATCH v7 22/29] Add secure-boot to s390-ccw-virtio machine type option\n- Added Reviewed-by: Thomas Huth <thuth@redhat.com>\n\n[PATCH v7 23/29] hw/s390x/ipl: Set IPIB flags for secure IPL\n- Fixed commit message\n\n[PATCH v7 24/29] pc-bios/s390-ccw: Handle true secure IPL mode\n- Updated documentation\n- Fixed typo\n\n[PATCH v7 25/29] pc-bios/s390-ccw: Handle secure boot with multiple\nboot devices\n- Handled support for multiple secure boot devices on the QEMU side\n\n[PATCH v7 26/29] hw/s390x/ipl: Handle secure boot without a specified\nboot device\n- Added Reviewed-by: Thomas Huth <thuth@redhat.com>\n\n[PATCH v7 27/29] tests/functional/s390x: Add secure IPL\n- Cleaned up test code\n- Switched from time.sleep() to wait_for_console_pattern()\n\n------------------------------------------------------------------------\n\n# Description\n\nThis patch series is an external requirement by Linux distribution\npartners to verify secure IPL process. Additional secure IPL checks are\nalso included in this series to address security holes in the original\nsecure IPL design to prevent malicious actors to boot modified or\nunsigned code despite secure IPL being enforced.\n\nSecure IPL is enabled when the QEMU options for secure IPL are specified\nin the command line.\n\nDuring this process, additional security checks are performed to ensure\nsystem integrity.\n\nAs components are loaded from disk, DIAG 508 subcode 2 performs\nsignature verification if a signature entry is identified. Upon\nsuccessful verification, DIAG 320 subcode 2 will request the\ncorresponding certificate from QEMU key store to the BIOS.\n\nSecure IPL will continue until all the components are loaded if no error\noccurs during True secure IPL mode or in Audit mode (see explanation below).\n\nAfter that, an IPL Information report block (IIRB) is initialized\nimmediately following an IPL Parameter Information Block. The IIRB is\npopulated with information about the components, verification results\nand certificate data.\n\nFinally, the guest system proceeds to boot.\n\nOnly List-Directed-IPL contains the relevant zIPL data structures to\nperform secure IPL. This patch series only adds support for the SCSI\nscheme of virtio-blk/virtio-scsi devices. Secure IPL for other device\ntypes will be considered as follow-up work at a later date.\n\n** Note: \"secure IPL\" and \"secure boot\" are used interchangeably\nthroughout the design. **\n\n# True Secure IPL Mode and Audit Mode\n\n## True Secure IPL Mode\n\nWhen secure IPL is enabled and certificates are provided, all the secure\nIPL checks will performed. The boot process will abort if any error\noccurs during the secure IPL checks.\n\n## Audit Mode\n\nWhen the secure IPL option is not selected and certificates are\nprovided, all the secure IPL checks will still be performed. However,\nthe boot process will continue if any errors occur, with messages logged\nto the console during the secure IPL checks.\n\nThe audit mode is also considered as simulated secure IPL because it is\nless pervasive, and allows the guest to boot regardless of the secure\nchecking results.\n\n# How to Enable Secure IPL\n\n## QEMU Build Notes\n\nWhen building QEMU, enable the cryptographic libraries.\n\nRun configure script in QEMU repository with either parameter:\n\n\t./configure … --enable-gnutls\n\n## Create Certificates via certtool\n\nGenerate and use an RSA private key for signing.\n\n\tcerttool --generate-privkey > key.pem\n\nA self-signed certificate requires the organization name. Use the cert.info\ntemplate to pre-fill values and avoid interactive prompts from certtool.\n\n\tcat > cert.info <<EOF\n\tcn = \"My Name\"\n\texpiration_days = 36500\n\tcert_signing_key\n\tEOF\n\n\tcerttool --generate-self-signed \\\n\t\t --load-privkey key.pem \\\n\t\t --template cert.info \\\n\t\t --hash=SHA256 \\\n\t\t --outfile cert.pem\n\nIt is recommended to store the certificate(s) in the /…/qemu/certs\ndirectory for easy identification.\n\n## Sign Kernel and Prepare zipl\n\nAll actions must be performed on a guest.\n\nCopy the sign-file script (located in Linux source repository),\ngenerated private key(s), and certificate(s) to guest's file system.\n\nSign guest image(s) and stage3 binary:\n\n\t./sign-file sha256 key.pem cert.pem /boot/vmlinuz-…\n\n\t./sign-file sha256 key.pem cert.pem /usr/lib/s390-tools/stage3.bin\n\nRun zipl with secure boot enabled.\n\n\tzipl --secure 1 -V\n\nGuest image(s) are now signed, stored on disk, and can be verified.\n\n## New QEMU Command Options for Secure IPL\n\nNew parameters have been added to the s390-ccw-virtio machine type to\nenable Secure IPL and provide certificates for signature verification.\n\nThis parameter enables or disables Secure IPL/boot. If not specified, it\ndefaults to off.\n\n\tqemu-system-s390x -machine s390-ccw-virtio,secure-boot=on|off\n\nThis parameter specifies one or more paths to boot certificates, used\nfor signature verification. You can provide a single certificate file or\na directory.\n\n\tqemu-system-s390x -machine s390-ccw-virtio, \\\n boot-certs.0.path=/.../qemu/certs, \\\n boot-certs.1.path=/another/path/cert.pem\n\nExample:\n\tqemu-system-s390x -machine s390-ccw-virtio,\n\t secure-boot=on, \\\n\t boot-certs.0.path=/.../qemu/certs, \\\n boot-certs.1.path=/another/path/cert.pem\n\nSecure IPL command options overview:\n\nIf neither the -secure-boot nor the -boot-certs options are\nspecified, the guest will boot in normal mode, and no security checks\nwill be conducted.\n\nIf the -secure-boot option is not specified or is set to off, and the\n-boot-certs option is provided, the guest will boot in audit mode.\nIn this mode, all security checks are performed; however, any\nerrors encountered will not interrupt the boot process.\n\nIf the -secure-boot option is set to on and the -boot-certs option is\nprovided, the guest will boot in true secure IPL mode. In this mode,\nall security checks are performed, and any errors encountered will\nterminate the boot process.\n - If the -boot-certs option is not provided in true secure IPL\n mode, the boot process will fail for the corresponding device.\n\n## Constraints\n\n- z16 or \"qemu\" CPU model\n\n- certificates must be in X.509 PEM format\n\n- only support for SCSI scheme of virtio-blk/virtio-scsi devices\n - The boot process will terminate if secure boot is enabled without\nspecifying a boot device.\n - If enabling secure boot with multiple boot devices, any\nunsupported devices or non-eligible devices will cause the entire boot\nprocess terminating early with an error logged to the console.\n\n- attempting to perform secure IPL outside of these constraints will\nresult in a failure.\n\n# DIAGNOSE 508 - IPL Extensions\n\nSignature verification is performed during IPL via DIAG 508. Component\naddress, component length, signature address and signature length are\nobtained in the BIOS and pass to DIAG 508 subcode 2 to perform signature\nverification in QEMU. If verification succeeds, DIAG 508 subcode 2\n(signature verification) will return the length and index of the\ncertificate in the QemuCertificateStore that was used for verification.\n\n## Data Structures\n\nDiag508SignatureVerificationBlock (SVB) — stores addresses and\nlengths of the component and signature to be used for signature\nverification. Upon verification, an index and the length of the\ncertificate used is stored.\n\n------------------------------------------------------------------------\n\nChangelog v6->v7\n\nAdd functional test for secure IPL\n\nSecure IPL documentation\n- Merged command line into one line\n- Limited line length to 80 columns\n\n[PATCH v6 01/28] Add boot-certs to s390-ccw-virtio machine type option\n- Renamed BootCertificate to BootCertificates\n- Added Acked-by: Markus Armbruster <armbru@redhat.com>\n\n[PATCH v6 02/28] crypto/x509-utils: Refactor with GNUTLS fallback\n- Edited commit message\n- Added Acked-by: Daniel P. Berrangé <berrange@redhat.com>\n Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>\n Reviewed-by: Farhan Ali <alifm@linux.ibm.com>\n\n[PATCH v6 03/28] crypto/x509-utils: Add helper functions for certificate\nstore\n- Added Acked-by: Daniel P. Berrangé <berrange@redhat.com>\n Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>\n Reviewed-by: Farhan Ali <alifm@linux.ibm.com>\n\n[PATCH v6 04/28] hw/s390x/ipl: Create certificate store\n- Removed QEMU_PAKCED\n- Inlined cert2buf wrapper function to reduce lines of code\n- Reported error and handled exit in s390_ipl_create_cert_store()\n\n[PATCH v6 05/28] s390x/diag: Introduce DIAG 320 for Certificate Store\nFacility\n- Fixed typos\n- Added Reviewed-by: Farhan Ali <alifm@linux.ibm.com>\n\n[PATCH v6 06/28] s390x/diag: Refactor address validation check from\ndiag308_parm_check\n- Moved diag_parm_addr_valid() to target/s390x/diag.c\n- Added Reviewed-by: Farhan Ali <alifm@linux.ibm.com>\n\n[PATCH v6 07/28] s390x/diag: Implement DIAG 320 subcode 1\n- Added Reviewed-by: Farhan Ali <alifm@linux.ibm.com>\n\n[PATCH v6 08/28] crypto/x509-utils: Add helper functions for DIAG 320\nsubcode 2\n- Edited commit message\n- Handled negative return value from gnutls_x509_crt_get_pk_algorithm()\nin qcrypto_x509_get_pk_algorithm\n- Checked boundary before using hash_alg in qcrypto_x509_get_cert_key_id()\n- Rename qcrypto_x509_is_ecc_curve_p521() to\nqcrypto_x509_check_ecc_curve_p521()\n\n[PATCH v6 09/28] s390x/diag: Implement DIAG 320 subcode 2\n- Removed redundant set vce->len\n- Added check to make sure data doesn't exceed buffer bounds\n\n[PATCH v6 10/28] s390x/diag: Introduce DIAG 508 for secure IPL operations\n- Reworded document to avoid the term “KVM”\n- Added Reviewed-by: Farhan Ali <alifm@linux.ibm.com>\n\n[PATCH v6 11/28] crypto/x509-utils: Add helper functions for DIAG 508\nsubcode 1\n- Fixed indentation\n- Replaced g_new0() and memcpy() with g_memdup2()\n\n[PATCH v6 12/28] s390x/diag: Implement DIAG 508 subcode 1 for signature\nverification\n- Edit commit message and documentation in handle_diag508_sig_verif()\n- Changed diag_508_verify_sig function return type from int to bool\n- Set upper limit for comp_len and sig_len to avoid malicious memory\nallocation\n- Fixed coding style - eliminate unnecessary variables\n\n[PATCH v6 13/28] pc-bios/s390-ccw: Introduce IPL Information Report\nBlock (IIRB)\n- Removed bios structs packing\n\n[PATCH v6 14/28] pc-bios/s390-ccw: Define memory for IPLB and convert\nIPLB to pointers\n- specify ipl_data attribute in the pc-bios/s390-ccw/main.c\n\n[PATCH v6 15/28] hw/s390x/ipl: Add IPIB flags to IPL Parameter Block\n- Moved the setting of iplb->len to when the DIAG308_IPIB_FLAGS_IPLIR is set\n\n[PATCH v6 17/28] pc-bios/s390-ccw: Refactor zipl_run()\n- Preserved return error value from zipl_run_normal()\n\n[PATCH v6 18/28] pc-bios/s390-ccw: Rework zipl_load_segment function\n- Fixed typoes\n- Added Reviewed-by: Thomas Huth <thuth@redhat.com>\n\n[PATCH v6 19/28] pc-bios/s390-ccw: Add signature verification for secure\nIPL in audit mode\n- Edited documentation\n- Removed bios structs packing\n- Be more specific in the error message and mention Passthrough (vfio)\nCCW device does not support secure boot\n- Allocated memory for vcb using max_single_vcb_len instead of\nMAX_SECTOR_SIZE in request_certificate()\n- Rename variables in zipl_run_secure()\ncert_index → cert_entry_idx\ncomp_index → comp_entry_idx\ncert_idx → cert_table_idx\n- Refactored handle_certificate(): only handles certificate related\noperations and moved the increment of cert_entry_idx and cert to\nzipl_run_secure()\n\n[PATCH v6 21/28] pc-bios/s390-ccw: Add additional security checks for\nsecure boot\n- Fixed coding style\n- Added out of range warning in comp_addr_range_add()\n- Fixed end address issue in is_psw_valid() and is_comp_overlap()\n- Inlined comparison functions\n\n[PATCH v6 22/28] Add secure-boot to s390-ccw-virtio machine type option\n- Moved bool secure_boot next to other bool variables to avoid\nadditional padding\n\n[PATCH v6 24/28] pc-bios/s390-ccw: Handle true secure IPL mode\n- Edited documentation\n- Used panic instead of IPL_assert() in zipl_secure_handle()\n\n[PATCH v6 25/28] pc-bios/s390-ccw: Handle secure boot with multiple boot\ndevices\n- Used a stack variable for QemuIplParameters instead of a malloc in\ncheck_secure_boot_support()\n\nChangelog v5->v6\n\nAdd boot-certs to s390-ccw-virtio machine type option\n- Renamed struct BootCertPath to BootCertificate\n- Defined DummyBootCertificates struct for QMP to use\nBootCertificateList internally\n\ncrypto/x509-utils\n- Used gnutls_x509_crt_export2() in qcrypto_x509_convert_cert_der()\n- Allocated buffers with g_new for results in\nqcrypto_x509_convert_cert_der() and qcrypto_pkcs7_convert_sig_pem()\n- Added check for qcrypto_to_gnutls_hash_alg_map bounds in\nqcrypto_x509_get_cert_key_id()\n- Added qcrypto_x509_is_ecc_curve_p521() function to determine if an ECC\npublic key algorithm uses P521 curve\n- Fixed typo\n\nhw/s390x/ipl: Create certificate store\n- Made any configuration errors fatal when loading certificates into the\ncert store\n- Removed key_id_size and hash_size from S390IPLCertificate and defined\nthem as constants\n- Do not reinitialize the cert store if it already exists\n- Handled memory cleanup\n\ns390x/diag: Implement DIAG 320 subcode 1\n- Added QEMU_BUILD_BUG_MSG\n\ns390x/diag: Implement DIAG 320 subcode 2\n- Refactored build_vce_header() and created a new function for getting\nkey type\n- Added QEMU_BUILD_BUG_MSG\n\ns390x/diag: Implement DIAG 508 subcode 1 for signature verification\n- Updated Diag508SigVerifBlock\n\nhw/s390x/ipl: Add IPIB flags to IPL Parameter Block\n- Override IPLB length only when DIAG308_IPIB_FLAGS_IPLIR flag is set\n- Dropped hw/s390x/ipl: Set iplb->len to maximum length of IPL Parameter\nBlock patch\n\npc-bios/s390-ccw: Add signature verification for secure IPL in audit mode\n- Added validation for VCB and VCE before retrieving information in\nrequest_certificate()\n- Replaced uint64_t *cert with uint8_t *cert in zipl_run_secure()\n\nChangelog v4->v5\n\n- Segmented documentation by introducing them alongside the patches that\nadd the relevant functionality\n- Removed hash-type restriction from S390IPLCertificateStore\n\nAdd boot-certs to s390-ccw-virtio machine type option\n- Added boot-certs property to the s390-ccw-virtio machine type\n - Changed to use an array property for passing certificate instead\n of colo-delimited strings.\n e.g. boot-certs.0.path=/path/to/dir,\n boot-certs.1.path=/to/other/dir,\n boot-certs.2.path=/some/...\n\ncrypto/x509-utils\n- Refactored fallback handling into a separated commit\n- Removed QCryptoKeyidFlags and qcrypto_x509_get_keyid_len() function\n- Removed qcrypto_x509_get_cert_version() and\nqcrypto_x509_get_signature_algorithm()\n- Passed QCryptoHashAlgo to qcrypto_x509_get_cert_key_id() instead of\nQCryptoKeyidFlags\n- Improved memory cleanup\n\nhw/s390x/ipl: Create certificate store\n- Fixed error handling and memory management\n- Added condition to only accept files with \".pem\" extension\n\ns390x: Guest support for Certificate Store Facility (CS)\n- Renamed \"S390_FEAT_DIAG_320\" to \"S390_FEAT_CERT_STORE\"\n- Merged this patch with s390x/diag: Introduce DIAG 320 for certificate\nstore facility patch\n\ns390x/diag: Introduce DIAG 320 for certificate store facility\n- Added bit zero to indicate subcode 0 is supported\n- Set response code to 0x0102 when the subcode is not supported\n- Added check to ensure subcode fits within one byte\n\ns390x/diag: Implement DIAG 320 subcode 1\n- Refactored and moved implementation to a helper function\n- Added check to ensure VCSSB length is set to a minimum of 128 bytes\nfrom the userspace\n- Removed max_vce_len field from the VCSSB data structure\n\ns390x/diag: Implement DIAG 320 subcode 2\n- Refactored and split functions for extracting certificate information\n- Set VCE length to 72 if certificate is invalid\n- Returned VCE even if the certificate is invalid\n\npc-bios/s390-ccw: Refactor zipl_run()\n- Refactor zipl_run_normal() to reduce duplicate code\n\npc-bios/s390-ccw: Add signature verification for secure IPL in audit mode\n- Moved secure-boot related functions into secure-ipl.c/h files\n- Rename zipl_handle_sig_entry() to zipl_load_signature()\n- Refactored zipl_run_secure() to use switch cases for different entry\ntypes instead of a while loop\n- Renamed ZiplBootMode enumerations with \"ZIPL_BOOT_MODE\" prefix\n- Added meaningful file header to secure-ipl.c\n- Renamed zipl_secure_print() to zipl_secure_handle()\n\nChangelog v3->v4:\n\ncyrpto/x590-utils\n- Updated patch descriptions to summarize what each patch introduces.\n- Restricted accepted certificate format on the QEMU command line to PEM\nonly.\n - Added internal conversion routines to handle PEM-to-DER and\nDER-to-PEM as needed.\n- Renamed crypto functions using the qcrypto_x509_ prefix.\n- Replaced QAPI enums with plain C enums.\n- Improved GNUTLS error propagation throughout the crypto API.\n- Standardized error returns to -1 (instead of using errno values) for\nconsistency.\n- Removed unused helpers: qcrypto_check_x509_cert_fmt() and\nqcrypto_get_x509_hash_len().\n- Added bounds checking before converting GNUTLS enums to internal\ncrypto enums.\n- Modified qcrypto_get_x509_cert_key_id() to dynamically allocate the\nresult.\n- Fixed a typo in the crypto API documentation.\n\nhw/s390x/ipl: Create certificate store\n- Removed max_size check when loading certificate.\n- Removed check_path_type() and use the stat() & S_ISXXX checks inline\nwhere needed.\n- Initialized all g_autofree variables.\n- Refactored get_cert_paths()\n - Used g_auto(GStrv) and g_autoptr(GPtrArray) for automatic cleanup.\n - Renamed misleading variables and dropped unnecessary intermediates.\n - Replaced check_path_type() with stat(), and treated failures as fatal.\n - Treated empty path components as fatal configuration errors.\n - Used GError with g_dir_open() and handled errors properly.\n - Removed redundant casts and manual cleanup.\n- Treated providing 65 or more certificates as a fatal error.\n- Modified S390IPLCertificate\n - Changed raw from char * to uint8_t * for API consistency.\n - Added cert_der field to calculate certificate data buffer size for\nDIAG 320 and format conversion.\n\ns390x/diag\n- Handled error propagation from crypto API correctly.\n- Added g_autofree to variables to ensure proper memory cleanup.\n- Initialized all g_autofree variables.\n\npc-bios/s390-ccw: Add signature verification for secure IPL in audit mode\n- Allocated certificate buffer based on calculated size instead of\nstatic MAX_CERT_SIZE.\n\npc-bios/s390-ccw: Add additional security checks for secure boot\n- Refactored to improve readability.\n- Handled SCLAB Single Component/No Unsigned Component flags.\n\ndocs: Add secure IPL documentation\n- Updated documentation.\n- Illustrated with gnutls ‘certtool’ instead of ‘openssl’ for\nconsistency with other certificate creation docs.\n\n- Updated cover letter with corresponding changes.\n\nChangelog v2->v3:\n\n- Fixed typos in patches\n- Edited and corrected patch description\n- Enabled secure IPL feature in TCG\n- Split crypto subsystem changes from s390x subsystem changes\n - Added API documentation for each helper function\n - Removed qcrypto_get_x509_cert_fmt()\n - Reworked qcrypto_check_x509_cert_fmt() to return 0 on success and\nnegative error code on errors\n - Rephrased error messages when GNUTLS is not enabled\n - Changed dev cycle reference from 9.2 to 10.1\n\nhw/s390x/ipl: Create certificate store\n- Passed *cert_buf to g_file_get_contents() directly in cert2buf()\n- Returned NULL for early returns\n- Added check to only allow maximum of 64 certificates in the certificate\nstore\n\ns390x: Guest support for Certificate Store Facility (CS)\n- Renamed “diag320” to “cstore”\n\ns390x/diag: Implement DIAG 320 subcode 1\n- Removed QEMU_PACKED from VCStorageSizeBlock\n- Removed unnecessary error check from subcode 1 implementation\n\ns390x/diag: Implement DIAG 320 subcode 2\n- Removed QEMU_PACKED from VCBlock and VCEngtry\n- Reworked diag_320_is_cert_valid() to return 0 on success and negative\nerror code on errors\n- Set *key_id_data and *hash_data to NULL after g_free()\n- Moved DIAG_320_SUBC_STORE_VC case block implementation to a separate\nfunction\n\ns390x/diag: Implement DIAG 508 subcode 1 for signature verification\n- Added a reserved field to Diag508CertificateStoreInfo\n- Removed QEMU_PACKED from Diag508CertificateStoreInfo and\nDiag508SignatureVerificationBlock\n- Applied g_autofree to svb, svb_comp and svb_sig varaibles\n- Moved DIAG_508_SUBC_SIG_VERIF case block implementation to a separate\nfunction\n\npc-bios/s390-ccw: Refactor zipl_load_segment function\n- Removed casting when calculating comp_len\n\npc-bios/s390-ccw: Add signature verification for secure IPL in audit mode\n- Used malloc() to allocate certificate buffer instead of statically\nallocating\n- Reworked zipl_secure_print()\n\ns390x: Guest support for Secure-IPL Code Loading Attributes Facility (SCLAF)\n- Added check to make sure SIPL is enabled when SCLAF is enabled\n\ndocs: Add secure IPL documentation\n- Split document into two parts:\n - docs/specs/s390x-secure-ipl.rst (developer reference)\n - docs/system/s390x/secure-ipl.rst (user guide)\n\nChangelog v1->v2:\n\n- Fixed typos in patches\n- Edited cover letter\n- Added secure IPL documentation\n\nQEMU Command-Line Interface:\n- Moved boot-certificates under the machine-type option for s390x-virtio-ccw\n- Moved secure-boot under the machine-type option for s390x-virtio-ccw\n\nhw/s390x/ipl: Create Certificate Store\n- Defined internal GNUTLS-related APIs\n- Added check to only accept certificates using SHA-256 hashing\n- Recalculated data_buf_size to ensure word alignment\n- Cleaned up memory allocation\n- Refactored functions for clarity\n\ns390x: Guest Support for Certificate Store Facility (CS)\n- Updated patch description to clarify:\n - Why Secure IPL is not available with Secure Execution\n - Why this feature requires S390_FEAT_EXTENDED_LENGTH_SCCB\n-Restricted features to z16 due to additional layers requiring z16\n\ns390x/diag: Implement DIAG 320 Subcode 1\n- Renamed VerificationCertificate prefix to VC\n- Byte-swap written values for endianness correctness\n\ns390x/diag: Implement DIAG 320 Subcode 2\n- Edited commit message for clarity\n- Defined internal GNUTLS-related APIs\n- Renamed data structure variables\n- Ensured length fields in VCE are word-aligned\n- Handled the VC index 0 case\n- General refactoring\n\ns390x/diag: Implement DIAG 508 Subcode 2 for Signature Verification\n- Defined subcode from 2 to 1\n- Removed unused error codes\n- Defined internal GNUTLS-related APIs\n- Byte-swap read values\n\nhw/s390x/ipl: Add IPIB Flags to IPL Parameter Block\n- Moved DIAG308 flags to a new header file\n\ns390x: Guest Support for Secure-IPL Facility\n- Renamed SCLP variable from cbl to fac_ipl\n\npc-bios/s390-ccw: Add Signature Verification for Secure Boot (Audit Mode)\n- Moved Secure IPL-related functions to pc-bios/s390-ccw/secure-ip.c|h\n- Refactored code for clarity\n\nCollin L. Walling (2):\n s390x/diag: Introduce DIAG 508 for secure IPL operations\n s390x/diag: Implement DIAG 508 subcode 1 for signature verification\n\nZhuoying Cai (28):\n Add boot-certs to s390-ccw-virtio machine type option\n crypto/x509-utils: Refactor with GNUTLS fallback\n crypto/x509-utils: Add helper functions for certificate store\n hw/s390x/ipl: Create certificate store\n s390x/diag: Introduce DIAG 320 for Certificate Store Facility\n s390x/diag: Refactor address validation check from diag308_parm_check\n s390x/diag: Implement DIAG 320 subcode 1\n crypto/x509-utils: Add helper functions for DIAG 320 subcode 2\n s390x/diag: Implement DIAG 320 subcode 2\n crypto/x509-utils: Add helper functions for DIAG 508 subcode 1\n s390x/ipl: Introduce IPL Information Report Block (IIRB)\n pc-bios/s390-ccw: Define memory for IPLB and convert IPLB to pointers\n hw/s390x/ipl: Add IPIB flags to IPL Parameter Block\n s390x: Guest support for Secure-IPL Facility\n pc-bios/s390-ccw: Refactor zipl_run()\n pc-bios/s390-ccw: Rework zipl_load_segment function\n pc-bios/s390-ccw: Add signature verification for secure IPL in audit\n mode\n pc-bios/s390-ccw: Add signed component address overlap checks\n s390x: Guest support for Secure-IPL Code Loading Attributes Facility\n (SCLAF)\n pc-bios/s390-ccw: Add additional security checks for secure boot\n Add secure-boot to s390-ccw-virtio machine type option\n hw/s390x/ipl: Set IPIB flags for secure IPL\n pc-bios/s390-ccw: Handle true secure IPL mode\n hw/s390x/ipl: Handle secure boot with multiple boot devices\n hw/s390x/ipl: Handle secure boot without specifying a boot device\n tests/functional/s390x: Add secure IPL functional test\n docs/specs: Add secure IPL documentation\n docs/system/s390x: Add secure IPL documentation\n\n crypto/meson.build | 2 +-\n crypto/x509-utils.c | 409 ++++++++++++\n docs/specs/s390x-secure-ipl.rst | 185 ++++++\n docs/system/s390x/secure-ipl.rst | 176 ++++++\n hw/s390x/cert-store.c | 221 +++++++\n hw/s390x/cert-store.h | 40 ++\n hw/s390x/ipl.c | 87 +++\n hw/s390x/ipl.h | 21 +-\n hw/s390x/meson.build | 1 +\n hw/s390x/s390-virtio-ccw.c | 52 ++\n hw/s390x/sclp.c | 2 +\n include/crypto/x509-utils.h | 113 ++++\n include/hw/s390x/ipl/diag308.h | 34 +\n include/hw/s390x/ipl/diag320.h | 92 +++\n include/hw/s390x/ipl/diag508.h | 45 ++\n include/hw/s390x/ipl/qipl.h | 97 ++-\n include/hw/s390x/s390-virtio-ccw.h | 3 +\n include/hw/s390x/sclp.h | 4 +-\n pc-bios/s390-ccw/Makefile | 3 +-\n pc-bios/s390-ccw/bootmap.c | 103 ++-\n pc-bios/s390-ccw/bootmap.h | 11 +\n pc-bios/s390-ccw/iplb.h | 5 +-\n pc-bios/s390-ccw/jump2ipl.c | 6 +-\n pc-bios/s390-ccw/main.c | 40 +-\n pc-bios/s390-ccw/netmain.c | 8 +-\n pc-bios/s390-ccw/s390-ccw.h | 17 +\n pc-bios/s390-ccw/sclp.c | 51 ++\n pc-bios/s390-ccw/sclp.h | 7 +\n pc-bios/s390-ccw/secure-ipl.c | 728 ++++++++++++++++++++++\n pc-bios/s390-ccw/secure-ipl.h | 153 +++++\n qapi/machine-s390x.json | 23 +\n qapi/pragma.json | 1 +\n qemu-options.hx | 10 +-\n target/s390x/cpu_features.c | 7 +\n target/s390x/cpu_features.h | 1 +\n target/s390x/cpu_features_def.h.inc | 5 +\n target/s390x/cpu_models.c | 7 +\n target/s390x/diag.c | 575 ++++++++++++++++-\n target/s390x/gen-features.c | 7 +\n target/s390x/kvm/kvm.c | 34 +\n target/s390x/s390x-internal.h | 4 +\n target/s390x/tcg/misc_helper.c | 14 +\n tests/functional/s390x/meson.build | 2 +\n tests/functional/s390x/test_secure_ipl.py | 142 +++++\n 44 files changed, 3479 insertions(+), 69 deletions(-)\n create mode 100644 docs/specs/s390x-secure-ipl.rst\n create mode 100644 docs/system/s390x/secure-ipl.rst\n create mode 100644 hw/s390x/cert-store.c\n create mode 100644 hw/s390x/cert-store.h\n create mode 100644 include/hw/s390x/ipl/diag308.h\n create mode 100644 include/hw/s390x/ipl/diag320.h\n create mode 100644 include/hw/s390x/ipl/diag508.h\n create mode 100644 pc-bios/s390-ccw/secure-ipl.c\n create mode 100644 pc-bios/s390-ccw/secure-ipl.h\n create mode 100644 tests/functional/s390x/test_secure_ipl.py" }