]> git.ozlabs.org Git - petitboot/commitdiff
discover/platform-powerpc: Return bootdev error correctly v1.1.1
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>
Wed, 1 Jun 2016 06:39:18 +0000 (16:39 +1000)
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>
Thu, 16 Jun 2016 00:56:08 +0000 (10:56 +1000)
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

index 19613045f60a4d94e592a07c98a120a0e1a39bd4..1f8d27d772d93081b72d2977f96af837690db429 100644 (file)
@@ -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");
        /* 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;
        }
 
        *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;
 
        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)) {
                rc = platform->get_ipmi_bootdev(platform, &bootdev,
                                &bootdev_persistent);
                if (!rc && ipmi_bootdev_is_valid(bootdev)) {