[patch v3 8/8] kexec-tools: Allow to call verify_sha256_digest() from kernel

From: Michael Holzheu
Date: Fri Aug 12 2011 - 09:51:06 EST


From: Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx>

For s390 we first want to check if kdump checksums are valid before we start
the kdump kernel. With this patch on s390 the purgatory entry point is
called with a parameter. If the parameter is "0", only the checksum test
is done and the result (0 = ok, 1 = invalid) is passed as return code back
to the caller (kernel). If the parameter is "1", the complete purgatory code
is executed and kdump is started.

Signed-off-by: Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx>
---
purgatory/arch/s390/setup-s390.S | 14 ++++++++++++++
purgatory/purgatory.c | 13 ++++++++-----
2 files changed, 22 insertions(+), 5 deletions(-)

--- a/purgatory/arch/s390/setup-s390.S
+++ b/purgatory/arch/s390/setup-s390.S
@@ -11,12 +11,23 @@
.balign 16
purgatory_start:
#ifdef __s390x__
+ larl %r5,gprs_save_area
+ stmg %r6,%r15,0(%r5)
larl %r15,lstack_end
aghi %r15,-160
+
+ clgfi %r2,0
+ je verify_checksums
+
brasl %r14,purgatory
larl %r14,kdump_psw
lpswe 0(%r14)

+verify_checksums:
+ brasl %r14,verify_sha256_digest
+ larl %r5,gprs_save_area
+ lmg %r6,%r15,0(%r5)
+ br %r14
.section ".data"
.balign 16
kdump_psw:
@@ -24,6 +35,9 @@ kdump_psw:
.quad 0x0000000000010010

.bss
+gprs_save_area:
+ .fill 80
+
.balign 4096
lstack:
.skip 4096
--- a/purgatory/purgatory.c
+++ b/purgatory/purgatory.c
@@ -9,7 +9,7 @@
struct sha256_region sha256_regions[SHA256_REGIONS] = {};
sha256_digest_t sha256_digest = { };

-void verify_sha256_digest(void)
+int verify_sha256_digest(void)
{
struct sha256_region *ptr, *end;
sha256_digest_t digest;
@@ -34,16 +34,19 @@ void verify_sha256_digest(void)
printf("%hhx ", sha256_digest[i]);
}
printf("\n");
- for(;;) {
- /* loop forever */
- }
+ return 1;
}
+ return 0;
}

void purgatory(void)
{
printf("I'm in purgatory\n");
setup_arch();
- verify_sha256_digest();
+ if (verify_sha256_digest()) {
+ for(;;) {
+ /* loop forever */
+ }
+ }
post_verification_setup_arch();
}

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/