Add -boot-certificates as a parameter of s390-ccw-virtio machine type option.
The `-boot-certificates /path/dir:/path/file` option is implemented to provide path to either a directory or a single certificate. Multiple paths can be delineated using a colon. Signed-off-by: Zhuoying Cai <zy...@linux.ibm.com> --- hw/s390x/s390-virtio-ccw.c | 22 ++++++++++++++++++++++ include/hw/s390x/s390-virtio-ccw.h | 1 + qemu-options.hx | 7 ++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 192feb128b..f82f78255a 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -824,6 +824,22 @@ static void machine_set_loadparm(Object *obj, Visitor *v, s390_ipl_fmt_loadparm(ms->loadparm, val, errp); } +static inline char *machine_get_boot_certificates(Object *obj, Error **errp) +{ + S390CcwMachineState *ms = S390_CCW_MACHINE(obj); + + return g_strdup(ms->boot_certificates); +} + +static void machine_set_boot_certificates(Object *obj, const char *str, + Error **errp) +{ + S390CcwMachineState *ms = S390_CCW_MACHINE(obj); + + g_free(ms->boot_certificates); + ms->boot_certificates = g_strdup(str); +} + static void ccw_machine_class_init(ObjectClass *oc, const void *data) { MachineClass *mc = MACHINE_CLASS(oc); @@ -878,6 +894,12 @@ static void ccw_machine_class_init(ObjectClass *oc, const void *data) "Up to 8 chars in set of [A-Za-z0-9. ] (lower case chars converted" " to upper case) to pass to machine loader, boot manager," " and guest kernel"); + + object_class_property_add_str(oc, "boot-certificates", + machine_get_boot_certificates, + machine_set_boot_certificates); + object_class_property_set_description(oc, "boot-certificates", + "provide path to a direcotry or a single certificate for secure boot"); } static inline void s390_machine_initfn(Object *obj) diff --git a/include/hw/s390x/s390-virtio-ccw.h b/include/hw/s390x/s390-virtio-ccw.h index fc4112fbf5..ed25939243 100644 --- a/include/hw/s390x/s390-virtio-ccw.h +++ b/include/hw/s390x/s390-virtio-ccw.h @@ -31,6 +31,7 @@ struct S390CcwMachineState { uint8_t loadparm[8]; uint64_t memory_limit; uint64_t max_pagesize; + char *boot_certificates; SCLPDevice *sclp; }; diff --git a/qemu-options.hx b/qemu-options.hx index dc694a99a3..e592f6a757 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -43,7 +43,8 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ #endif " memory-backend='backend-id' specifies explicitly provided backend for main RAM (default=none)\n" " cxl-fmw.0.targets.0=firsttarget,cxl-fmw.0.targets.1=secondtarget,cxl-fmw.0.size=size[,cxl-fmw.0.interleave-granularity=granularity]\n" - " smp-cache.0.cache=cachename,smp-cache.0.topology=topologylevel\n", + " smp-cache.0.cache=cachename,smp-cache.0.topology=topologylevel\n" + " boot-certificates='/path/directory:/path/file' provide a path to a directory or a boot certificate\n", QEMU_ARCH_ALL) SRST ``-machine [type=]name[,prop=value[,...]]`` @@ -200,6 +201,10 @@ SRST :: -machine smp-cache.0.cache=l1d,smp-cache.0.topology=core,smp-cache.1.cache=l1i,smp-cache.1.topology=core + + ``boot-certificates='/path/directory:/path/file'`` + Provide a path to a directory or a boot certificate on s390-ccw host. + A colon may be used to delineate multiple paths. ERST DEF("M", HAS_ARG, QEMU_OPTION_M, -- 2.49.0