fit_check_sign: Allow selecting the configuration to verify
authorSimon Glass <sjg@chromium.org>
Wed, 18 Mar 2020 17:44:03 +0000 (11:44 -0600)
committerSimon Glass <sjg@chromium.org>
Wed, 1 Apr 2020 13:45:09 +0000 (07:45 -0600)
This tool always verifies the default configuration. It is useful to be
able to verify a specific one. Add a command-line flag for this and plumb
the logic through.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/fdt_host.h
tools/fit_check_sign.c
tools/image-host.c

index 99b009b2210928717d6f2a6183e61f247a25a6d7..15c07c7a96edf623129ab53761200640ca797ccf 100644 (file)
@@ -27,6 +27,7 @@
  */
 int fdt_remove_unused_strings(const void *old, void *new);
 
-int fit_check_sign(const void *working_fdt, const void *key);
+int fit_check_sign(const void *fit, const void *key,
+                  const char *fit_uname_config);
 
 #endif /* __FDT_HOST_H__ */
index 45287437928cceae95863b18bda1a7775eb0268c..9375d5cf72de95505da6ee607fd97bba21d261af 100644 (file)
@@ -41,6 +41,7 @@ int main(int argc, char **argv)
        void *fit_blob;
        char *fdtfile = NULL;
        char *keyfile = NULL;
+       char *config_name = NULL;
        char cmdname[256];
        int ret;
        void *key_blob;
@@ -48,7 +49,7 @@ int main(int argc, char **argv)
 
        strncpy(cmdname, *argv, sizeof(cmdname) - 1);
        cmdname[sizeof(cmdname) - 1] = '\0';
-       while ((c = getopt(argc, argv, "f:k:")) != -1)
+       while ((c = getopt(argc, argv, "f:k:c:")) != -1)
                switch (c) {
                case 'f':
                        fdtfile = optarg;
@@ -56,6 +57,9 @@ int main(int argc, char **argv)
                case 'k':
                        keyfile = optarg;
                        break;
+               case 'c':
+                       config_name = optarg;
+                       break;
                default:
                        usage(cmdname);
                        break;
@@ -78,7 +82,7 @@ int main(int argc, char **argv)
                return EXIT_FAILURE;
 
        image_set_host_blob(key_blob);
-       ret = fit_check_sign(fit_blob, key_blob);
+       ret = fit_check_sign(fit_blob, key_blob, config_name);
        if (!ret) {
                ret = EXIT_SUCCESS;
                fprintf(stderr, "Signature check OK\n");
index b3ec197dc9c61e96f5e5a1f2be3456f46b447ed6..dfea48e894f482ff8422935e13eec12766bcbd8b 100644 (file)
@@ -1025,12 +1025,13 @@ int fit_add_verification_data(const char *keydir, void *keydest, void *fit,
 }
 
 #ifdef CONFIG_FIT_SIGNATURE
-int fit_check_sign(const void *fit, const void *key)
+int fit_check_sign(const void *fit, const void *key,
+                  const char *fit_uname_config)
 {
        int cfg_noffset;
        int ret;
 
-       cfg_noffset = fit_conf_get_node(fit, NULL);
+       cfg_noffset = fit_conf_get_node(fit, fit_uname_config);
        if (!cfg_noffset)
                return -1;
 
@@ -1039,6 +1040,7 @@ int fit_check_sign(const void *fit, const void *key)
        ret = fit_config_verify(fit, cfg_noffset);
        if (ret)
                return ret;
+       printf("Verified OK, loading images\n");
        ret = bootm_host_load_images(fit, cfg_noffset);
 
        return ret;