diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2019-02-21 08:23:04 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2019-04-26 06:34:05 -0400 |
commit | 9641b8cc733f70a5400aa7e6831de4542c46a94c (patch) | |
tree | 446b0fc5c9e6875da888017debb971eff4d4d4b0 /arch/s390/kernel/ipl.c | |
parent | d29af5b7a886033e6a4eb5f0a9a25cd00da63ae8 (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.c | 19 |
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 | ||
123 | int __bootdata_preserved(ipl_block_valid); | 123 | int __bootdata_preserved(ipl_block_valid); |
124 | struct ipl_parameter_block __bootdata_preserved(ipl_block); | 124 | struct ipl_parameter_block __bootdata_preserved(ipl_block); |
125 | int __bootdata_preserved(ipl_secure_flag); | ||
126 | |||
127 | unsigned long __bootdata_preserved(ipl_cert_list_addr); | ||
128 | unsigned long __bootdata_preserved(ipl_cert_list_size); | ||
129 | |||
130 | unsigned long __bootdata(early_ipl_comp_list_addr); | ||
131 | unsigned long __bootdata(early_ipl_comp_list_size); | ||
125 | 132 | ||
126 | static int reipl_capabilities = IPL_TYPE_UNKNOWN; | 133 | static 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 | ||
268 | static struct kobj_attribute sys_ipl_type_attr = __ATTR_RO(ipl_type); | 275 | static struct kobj_attribute sys_ipl_type_attr = __ATTR_RO(ipl_type); |
269 | 276 | ||
277 | static 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 | |||
283 | static struct kobj_attribute sys_ipl_secure_attr = | ||
284 | __ATTR(secure, 0444, ipl_secure_show, NULL); | ||
285 | |||
270 | static ssize_t ipl_vm_parm_show(struct kobject *kobj, | 286 | static 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 | ||