aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/ipl.c
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2019-02-21 08:23:04 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2019-04-26 06:34:05 -0400
commit9641b8cc733f70a5400aa7e6831de4542c46a94c (patch)
tree446b0fc5c9e6875da888017debb971eff4d4d4b0 /arch/s390/kernel/ipl.c
parentd29af5b7a886033e6a4eb5f0a9a25cd00da63ae8 (diff)
s390/ipl: read IPL report at early boot
Read the IPL Report block provided by secure-boot, add the entries of the certificate list to the system key ring and print the list of components. PR: Adjust to Vasilys bootdata_preserved patch set. Preserve ipl_cert_list for later use in kexec_file. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Philipp Rudo <prudo@linux.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel/ipl.c')
-rw-r--r--arch/s390/kernel/ipl.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index f9718bc67cd4..0567de4005b4 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -122,6 +122,13 @@ static char *dump_type_str(enum dump_type type)
122 122
123int __bootdata_preserved(ipl_block_valid); 123int __bootdata_preserved(ipl_block_valid);
124struct ipl_parameter_block __bootdata_preserved(ipl_block); 124struct ipl_parameter_block __bootdata_preserved(ipl_block);
125int __bootdata_preserved(ipl_secure_flag);
126
127unsigned long __bootdata_preserved(ipl_cert_list_addr);
128unsigned long __bootdata_preserved(ipl_cert_list_size);
129
130unsigned long __bootdata(early_ipl_comp_list_addr);
131unsigned long __bootdata(early_ipl_comp_list_size);
125 132
126static int reipl_capabilities = IPL_TYPE_UNKNOWN; 133static int reipl_capabilities = IPL_TYPE_UNKNOWN;
127 134
@@ -267,6 +274,15 @@ static ssize_t ipl_type_show(struct kobject *kobj, struct kobj_attribute *attr,
267 274
268static struct kobj_attribute sys_ipl_type_attr = __ATTR_RO(ipl_type); 275static struct kobj_attribute sys_ipl_type_attr = __ATTR_RO(ipl_type);
269 276
277static ssize_t ipl_secure_show(struct kobject *kobj,
278 struct kobj_attribute *attr, char *page)
279{
280 return sprintf(page, "%i\n", !!ipl_secure_flag);
281}
282
283static struct kobj_attribute sys_ipl_secure_attr =
284 __ATTR(secure, 0444, ipl_secure_show, NULL);
285
270static ssize_t ipl_vm_parm_show(struct kobject *kobj, 286static ssize_t ipl_vm_parm_show(struct kobject *kobj,
271 struct kobj_attribute *attr, char *page) 287 struct kobj_attribute *attr, char *page)
272{ 288{
@@ -362,6 +378,7 @@ static struct attribute *ipl_fcp_attrs[] = {
362 &sys_ipl_fcp_bootprog_attr.attr, 378 &sys_ipl_fcp_bootprog_attr.attr,
363 &sys_ipl_fcp_br_lba_attr.attr, 379 &sys_ipl_fcp_br_lba_attr.attr,
364 &sys_ipl_ccw_loadparm_attr.attr, 380 &sys_ipl_ccw_loadparm_attr.attr,
381 &sys_ipl_secure_attr.attr,
365 NULL, 382 NULL,
366}; 383};
367 384
@@ -377,6 +394,7 @@ static struct attribute *ipl_ccw_attrs_vm[] = {
377 &sys_ipl_device_attr.attr, 394 &sys_ipl_device_attr.attr,
378 &sys_ipl_ccw_loadparm_attr.attr, 395 &sys_ipl_ccw_loadparm_attr.attr,
379 &sys_ipl_vm_parm_attr.attr, 396 &sys_ipl_vm_parm_attr.attr,
397 &sys_ipl_secure_attr.attr,
380 NULL, 398 NULL,
381}; 399};
382 400
@@ -384,6 +402,7 @@ static struct attribute *ipl_ccw_attrs_lpar[] = {
384 &sys_ipl_type_attr.attr, 402 &sys_ipl_type_attr.attr,
385 &sys_ipl_device_attr.attr, 403 &sys_ipl_device_attr.attr,
386 &sys_ipl_ccw_loadparm_attr.attr, 404 &sys_ipl_ccw_loadparm_attr.attr,
405 &sys_ipl_secure_attr.attr,
387 NULL, 406 NULL,
388}; 407};
389 408