summaryrefslogtreecommitdiff
path: root/lib/efi_selftest
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2017-10-08 06:57:28 +0200
committerAlexander Graf <agraf@suse.de>2017-10-09 07:00:38 +0200
commitfdd04563cedb6abbc013821c123f5d7ef3078c31 (patch)
tree0c0c3e682b689f2c5cf13063fe37a49d607ad287 /lib/efi_selftest
parent10a08c4ed70e57ac570974b04844ceec13ad311a (diff)
efi_selftest: error handling in SNP test
Avoid NULL pointer dereference after setup failed due to a missing network. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'lib/efi_selftest')
-rw-r--r--lib/efi_selftest/efi_selftest_snp.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/efi_selftest/efi_selftest_snp.c b/lib/efi_selftest/efi_selftest_snp.c
index 638be0147d..bdd6ce20da 100644
--- a/lib/efi_selftest/efi_selftest_snp.c
+++ b/lib/efi_selftest/efi_selftest_snp.c
@@ -198,7 +198,7 @@ static int setup(const efi_handle_t handle,
*/
ret = boottime->set_timer(timer, EFI_TIMER_PERIODIC, 10000000);
if (ret != EFI_SUCCESS) {
- efi_st_error("Failed to locate simple network protocol\n");
+ efi_st_error("Failed to set timer\n");
return EFI_ST_FAILURE;
}
/*
@@ -206,6 +206,7 @@ static int setup(const efi_handle_t handle,
*/
ret = boottime->locate_protocol(&efi_net_guid, NULL, (void **)&net);
if (ret != EFI_SUCCESS) {
+ net = NULL;
efi_st_error("Failed to locate simple network protocol\n");
return EFI_ST_FAILURE;
}
@@ -273,6 +274,12 @@ static int execute(void)
*/
unsigned int timeout = 10;
+ /* Setup may have failed */
+ if (!net || !timer) {
+ efi_st_error("Cannot execute test after setup failure\n");
+ return EFI_ST_FAILURE;
+ }
+
/*
* Send DHCP discover message
*/