]> git.ozlabs.org Git - petitboot/commitdiff
discover: check config.boot_device before setting a default
authorJeremy Kerr <jk@ozlabs.org>
Wed, 30 Apr 2014 02:58:43 +0000 (10:58 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Mon, 21 Jul 2014 09:20:08 +0000 (17:20 +0800)
If a default device is set, we only allow booting from that device.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
discover/device-handler.c
discover/platform.c
lib/pb-protocol/pb-protocol.c

index 7f7081df5f6fc27abd033788d2202c5cca1988c2..b93cdfa1130cc5c956e6608a997c118a3786cd08 100644 (file)
@@ -441,6 +441,22 @@ static int default_option_priority(struct discover_boot_option *opt)
        return 0;
 }
 
+static bool device_allows_default(struct discover_device *dev)
+{
+       const char *dev_str;
+
+       dev_str = config_get()->boot_device;
+
+       if (!dev_str || !strlen(dev_str))
+               return true;
+
+       /* default devices are specified by UUIDs at present */
+       if (strcmp(dev->uuid, dev_str))
+               return false;
+
+       return true;
+}
+
 static void set_default(struct device_handler *handler,
                struct discover_boot_option *opt)
 {
@@ -449,6 +465,10 @@ static void set_default(struct device_handler *handler,
        if (!handler->autoboot_enabled)
                return;
 
+       /* do we allow default-booting from this device? */
+       if (!device_allows_default(opt->device))
+               return;
+
        new_prio = default_option_priority(opt);
 
        /* A negative priority indicates that we don't want to boot this device
index d74571230bbcdc63df6d75edf9da2bd2c1884511..3ab6b7b7e5eaa7199e92a1e8361e2ff49ae24d42 100644 (file)
@@ -88,6 +88,7 @@ void config_set_defaults(struct config *config)
        config->network.n_interfaces = 0;
        config->network.dns_servers = NULL;
        config->network.n_dns_servers = 0;
+       config->boot_device = NULL;
 
        config->n_boot_priorities = 2;
        config->boot_priorities = talloc_array(config, struct boot_priority,
index 4a5c75a32437b1e4bd201eba7d5a760288ad55ad..67e1f9e91a04dbf52e3ffebecc0a2371feca35a4 100644 (file)
@@ -281,6 +281,8 @@ int pb_protocol_config_len(const struct config *config)
        len += 4;
        len += config->n_boot_priorities * 8;
 
+       len += 4 + optional_strlen(config->boot_device);
+
        return len;
 }