mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
zipl/stage3: correctly handle diag308 response code
In case diag308 gives a response code 0x102 the stage3 loader can safely assume that no secure IPL is required since no IPL report block exists. Suggested-by: Marc Hartmayer <mhartmay@linux.ibm.com> Signed-off-by: Stefan Haberland <sth@linux.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Reviewed-by: Philipp Rudo <prudo@linux.ibm.com> Tested-by: Marc Hartmayer <mhartmay@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
committed by
Jan Höppner
parent
c367a6bb65
commit
943c5dc51d
@@ -286,6 +286,7 @@ enum diag308_subcode {
|
||||
|
||||
enum diag308_rc {
|
||||
DIAG308_RC_OK = 0x0001,
|
||||
DIAG308_RC_NO_CONF = 0x0102,
|
||||
};
|
||||
|
||||
static __always_inline unsigned long diag308(unsigned long subcode, void *addr)
|
||||
|
||||
+11
-14
@@ -57,18 +57,6 @@ static inline void __noreturn start_kernel(void)
|
||||
while (1);
|
||||
}
|
||||
|
||||
unsigned int store_ipl_parmblock(struct ipl_pl_hdr *pl_hdr)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = diag308(DIAG308_STORE, pl_hdr);
|
||||
if (rc == DIAG308_RC_OK &&
|
||||
pl_hdr->version <= IPL_MAX_SUPPORTED_VERSION)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned int
|
||||
is_verified_address(unsigned long image_addr)
|
||||
{
|
||||
@@ -126,9 +114,18 @@ secure_boot_enabled()
|
||||
unsigned int rc;
|
||||
|
||||
pl_hdr = (void *)get_zeroed_page();
|
||||
if (!pl_hdr || store_ipl_parmblock(pl_hdr))
|
||||
switch (diag308(DIAG308_STORE, pl_hdr)) {
|
||||
case DIAG308_RC_OK:
|
||||
rc = pl_hdr->version <= IPL_MAX_SUPPORTED_VERSION &&
|
||||
!!(pl_hdr->flags & IPL_FLAG_SECURE);
|
||||
break;
|
||||
case DIAG308_RC_NO_CONF:
|
||||
rc = 0;
|
||||
break;
|
||||
default:
|
||||
panic(ESECUREBOOT, "%s", msg_sipl_noparm);
|
||||
rc = !!(pl_hdr->flags & IPL_FLAG_SECURE);
|
||||
break;
|
||||
}
|
||||
free_page((unsigned long) pl_hdr);
|
||||
|
||||
return rc;
|
||||
|
||||
Reference in New Issue
Block a user