discover/platform-powerpc: Return bootdev error correctly
diff mbox

Message ID 20160606060548.8711-1-sam@mendozajonas.com
State Accepted
Headers show

Commit Message

Samuel Mendoza-Jonas June 6, 2016, 6:05 a.m. UTC
In one case get_ipmi_bootdev_ipmi() can return 0 on an error, which
leads to bootdev being treated as a valid bootdev despite being
uninitialised. If the planets line up correctly and bootdev is less than
or equal to IPMI_BOOTDEV_SETUP, Petitboot will incorrectly apply an IPMI
override.

Update the error return value in get_ipmi_bootdev_ipmi(), and properly
initialise bootdev.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
---
 discover/platform-powerpc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Patch
diff mbox

diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c
index 1961304..1f8d27d 100644
--- a/discover/platform-powerpc.c
+++ b/discover/platform-powerpc.c
@@ -956,7 +956,7 @@  static int get_ipmi_bootdev_ipmi(struct platform_powerpc *platform,
 	/* check for valid flags */
 	if (!(resp[3] & 0x80)) {
 		pb_debug("platform: boot flags are invalid, ignoring\n");
-		return 0;
+		return -1;
 	}
 
 	*persistent = resp[3] & 0x40;
@@ -1230,7 +1230,7 @@  static int load_config(struct platform *p, struct config *config)
 
 	if (platform->get_ipmi_bootdev) {
 		bool bootdev_persistent;
-		uint8_t bootdev;
+		uint8_t bootdev = IPMI_BOOTDEV_INVALID;
 		rc = platform->get_ipmi_bootdev(platform, &bootdev,
 				&bootdev_persistent);
 		if (!rc && ipmi_bootdev_is_valid(bootdev)) {