global: Convert simple_strtoul() with decimal to dectoul()
[platform/kernel/u-boot.git] / cmd / avb.c
index d4e8884..783f51b 100644 (file)
--- a/cmd/avb.c
+++ b/cmd/avb.c
 #define AVB_BOOTARGS   "avb_bootargs"
 static struct AvbOps *avb_ops;
 
-int do_avb_init(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_avb_init(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
        unsigned long mmc_dev;
 
        if (argc != 2)
                return CMD_RET_USAGE;
 
-       mmc_dev = simple_strtoul(argv[1], NULL, 16);
+       mmc_dev = hextoul(argv[1], NULL);
 
        if (avb_ops)
                avb_ops_free(avb_ops);
@@ -36,7 +36,8 @@ int do_avb_init(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        return CMD_RET_FAILURE;
 }
 
-int do_avb_read_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_avb_read_part(struct cmd_tbl *cmdtp, int flag, int argc,
+                    char *const argv[])
 {
        const char *part;
        s64 offset;
@@ -52,9 +53,9 @@ int do_avb_read_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                return CMD_RET_USAGE;
 
        part = argv[1];
-       offset = simple_strtoul(argv[2], NULL, 16);
-       bytes = simple_strtoul(argv[3], NULL, 16);
-       buffer = (void *)simple_strtoul(argv[4], NULL, 16);
+       offset = hextoul(argv[2], NULL);
+       bytes = hextoul(argv[3], NULL);
+       buffer = (void *)hextoul(argv[4], NULL);
 
        if (avb_ops->read_from_partition(avb_ops, part, offset, bytes,
                                         buffer, &bytes_read) ==
@@ -68,7 +69,7 @@ int do_avb_read_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        return CMD_RET_FAILURE;
 }
 
-int do_avb_read_part_hex(cmd_tbl_t *cmdtp, int flag, int argc,
+int do_avb_read_part_hex(struct cmd_tbl *cmdtp, int flag, int argc,
                         char *const argv[])
 {
        const char *part;
@@ -85,8 +86,8 @@ int do_avb_read_part_hex(cmd_tbl_t *cmdtp, int flag, int argc,
                return CMD_RET_USAGE;
 
        part = argv[1];
-       offset = simple_strtoul(argv[2], NULL, 16);
-       bytes = simple_strtoul(argv[3], NULL, 16);
+       offset = hextoul(argv[2], NULL);
+       bytes = hextoul(argv[3], NULL);
 
        buffer = malloc(bytes);
        if (!buffer) {
@@ -114,7 +115,8 @@ int do_avb_read_part_hex(cmd_tbl_t *cmdtp, int flag, int argc,
        return CMD_RET_FAILURE;
 }
 
-int do_avb_write_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_avb_write_part(struct cmd_tbl *cmdtp, int flag, int argc,
+                     char *const argv[])
 {
        const char *part;
        s64 offset;
@@ -130,9 +132,9 @@ int do_avb_write_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                return CMD_RET_USAGE;
 
        part = argv[1];
-       offset = simple_strtoul(argv[2], NULL, 16);
-       bytes = simple_strtoul(argv[3], NULL, 16);
-       buffer = (void *)simple_strtoul(argv[4], NULL, 16);
+       offset = hextoul(argv[2], NULL);
+       bytes = hextoul(argv[3], NULL);
+       buffer = (void *)hextoul(argv[4], NULL);
 
        if (avb_ops->write_to_partition(avb_ops, part, offset, bytes, buffer) ==
            AVB_IO_RESULT_OK) {
@@ -145,7 +147,8 @@ int do_avb_write_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        return CMD_RET_FAILURE;
 }
 
-int do_avb_read_rb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_avb_read_rb(struct cmd_tbl *cmdtp, int flag, int argc,
+                  char *const argv[])
 {
        size_t index;
        u64 rb_idx;
@@ -158,7 +161,7 @@ int do_avb_read_rb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        if (argc != 2)
                return CMD_RET_USAGE;
 
-       index = (size_t)simple_strtoul(argv[1], NULL, 16);
+       index = (size_t)hextoul(argv[1], NULL);
 
        if (avb_ops->read_rollback_index(avb_ops, index, &rb_idx) ==
            AVB_IO_RESULT_OK) {
@@ -171,7 +174,8 @@ int do_avb_read_rb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        return CMD_RET_FAILURE;
 }
 
-int do_avb_write_rb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_avb_write_rb(struct cmd_tbl *cmdtp, int flag, int argc,
+                   char *const argv[])
 {
        size_t index;
        u64 rb_idx;
@@ -184,8 +188,8 @@ int do_avb_write_rb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        if (argc != 3)
                return CMD_RET_USAGE;
 
-       index = (size_t)simple_strtoul(argv[1], NULL, 16);
-       rb_idx = simple_strtoul(argv[2], NULL, 16);
+       index = (size_t)hextoul(argv[1], NULL);
+       rb_idx = hextoul(argv[2], NULL);
 
        if (avb_ops->write_rollback_index(avb_ops, index, rb_idx) ==
            AVB_IO_RESULT_OK)
@@ -196,8 +200,8 @@ int do_avb_write_rb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        return CMD_RET_FAILURE;
 }
 
-int do_avb_get_uuid(cmd_tbl_t *cmdtp, int flag,
-                   int argc, char * const argv[])
+int do_avb_get_uuid(struct cmd_tbl *cmdtp, int flag,
+                   int argc, char *const argv[])
 {
        const char *part;
        char buffer[UUID_STR_LEN + 1];
@@ -224,7 +228,7 @@ int do_avb_get_uuid(cmd_tbl_t *cmdtp, int flag,
        return CMD_RET_FAILURE;
 }
 
-int do_avb_verify_part(cmd_tbl_t *cmdtp, int flag,
+int do_avb_verify_part(struct cmd_tbl *cmdtp, int flag,
                       int argc, char *const argv[])
 {
        const char * const requested_partitions[] = {"boot", NULL};
@@ -232,6 +236,7 @@ int do_avb_verify_part(cmd_tbl_t *cmdtp, int flag,
        AvbSlotVerifyData *out_data;
        char *cmdline;
        char *extra_args;
+       char *slot_suffix = "";
 
        bool unlocked = false;
        int res = CMD_RET_FAILURE;
@@ -241,9 +246,12 @@ int do_avb_verify_part(cmd_tbl_t *cmdtp, int flag,
                return CMD_RET_FAILURE;
        }
 
-       if (argc != 1)
+       if (argc < 1 || argc > 2)
                return CMD_RET_USAGE;
 
+       if (argc == 2)
+               slot_suffix = argv[1];
+
        printf("## Android Verified Boot 2.0 version %s\n",
               avb_version_string());
 
@@ -256,7 +264,7 @@ int do_avb_verify_part(cmd_tbl_t *cmdtp, int flag,
        slot_result =
                avb_slot_verify(avb_ops,
                                requested_partitions,
-                               "",
+                               slot_suffix,
                                unlocked,
                                AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE,
                                &out_data);
@@ -308,11 +316,14 @@ int do_avb_verify_part(cmd_tbl_t *cmdtp, int flag,
                printf("Unknown error occurred\n");
        }
 
+       if (out_data)
+               avb_slot_verify_data_free(out_data);
+
        return res;
 }
 
-int do_avb_is_unlocked(cmd_tbl_t *cmdtp, int flag,
-                      int argc, char * const argv[])
+int do_avb_is_unlocked(struct cmd_tbl *cmdtp, int flag,
+                      int argc, char *const argv[])
 {
        bool unlock;
 
@@ -337,8 +348,8 @@ int do_avb_is_unlocked(cmd_tbl_t *cmdtp, int flag,
        return CMD_RET_FAILURE;
 }
 
-int do_avb_read_pvalue(cmd_tbl_t *cmdtp, int flag, int argc,
-                      char * const argv[])
+int do_avb_read_pvalue(struct cmd_tbl *cmdtp, int flag, int argc,
+                      char *const argv[])
 {
        const char *name;
        size_t bytes;
@@ -355,7 +366,7 @@ int do_avb_read_pvalue(cmd_tbl_t *cmdtp, int flag, int argc,
                return CMD_RET_USAGE;
 
        name = argv[1];
-       bytes = simple_strtoul(argv[2], &endp, 10);
+       bytes = dectoul(argv[2], &endp);
        if (*endp && *endp != '\n')
                return CMD_RET_USAGE;
 
@@ -378,8 +389,8 @@ int do_avb_read_pvalue(cmd_tbl_t *cmdtp, int flag, int argc,
        return CMD_RET_FAILURE;
 }
 
-int do_avb_write_pvalue(cmd_tbl_t *cmdtp, int flag, int argc,
-                       char * const argv[])
+int do_avb_write_pvalue(struct cmd_tbl *cmdtp, int flag, int argc,
+                       char *const argv[])
 {
        const char *name;
        const char *value;
@@ -407,7 +418,7 @@ int do_avb_write_pvalue(cmd_tbl_t *cmdtp, int flag, int argc,
        return CMD_RET_FAILURE;
 }
 
-static cmd_tbl_t cmd_avb[] = {
+static struct cmd_tbl cmd_avb[] = {
        U_BOOT_CMD_MKENT(init, 2, 0, do_avb_init, "", ""),
        U_BOOT_CMD_MKENT(read_rb, 2, 0, do_avb_read_rb, "", ""),
        U_BOOT_CMD_MKENT(write_rb, 3, 0, do_avb_write_rb, "", ""),
@@ -416,16 +427,16 @@ static cmd_tbl_t cmd_avb[] = {
        U_BOOT_CMD_MKENT(read_part, 5, 0, do_avb_read_part, "", ""),
        U_BOOT_CMD_MKENT(read_part_hex, 4, 0, do_avb_read_part_hex, "", ""),
        U_BOOT_CMD_MKENT(write_part, 5, 0, do_avb_write_part, "", ""),
-       U_BOOT_CMD_MKENT(verify, 1, 0, do_avb_verify_part, "", ""),
+       U_BOOT_CMD_MKENT(verify, 2, 0, do_avb_verify_part, "", ""),
 #ifdef CONFIG_OPTEE_TA_AVB
        U_BOOT_CMD_MKENT(read_pvalue, 3, 0, do_avb_read_pvalue, "", ""),
        U_BOOT_CMD_MKENT(write_pvalue, 3, 0, do_avb_write_pvalue, "", ""),
 #endif
 };
 
-static int do_avb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_avb(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
-       cmd_tbl_t *cp;
+       struct cmd_tbl *cp;
 
        cp = find_cmd_tbl(argv[1], cmd_avb, ARRAY_SIZE(cmd_avb));
 
@@ -459,6 +470,7 @@ U_BOOT_CMD(
        "avb read_pvalue <name> <bytes> - read a persistent value <name>\n"
        "avb write_pvalue <name> <value> - write a persistent value <name>\n"
 #endif
-       "avb verify - run verification process using hash data\n"
+       "avb verify [slot_suffix] - run verification process using hash data\n"
        "    from vbmeta structure\n"
+       "    [slot_suffix] - _a, _b, etc (if vbmeta partition is slotted)\n"
        );