]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - tools/mxsimage.c
Fix u-boot build with newer openssl libraries
[karo-tx-uboot.git] / tools / mxsimage.c
index 81c7f2d4c553f525022613d5a223618e1b5aaf15..04fe91b3f91c9d5907a59d91d537cdbd73ff00a5 100644 (file)
@@ -125,7 +125,7 @@ struct sb_image_ctx {
        unsigned int                    in_section:1;
        unsigned int                    in_dcd:1;
        /* Image configuration */
-       unsigned int                    verbose_boot:1;
+       unsigned int                    display_progress:1;
        unsigned int                    silent_dump:1;
        char                            *input_filename;
        char                            *output_filename;
@@ -144,8 +144,8 @@ struct sb_image_ctx {
        struct sb_dcd_ctx               *dcd_head;
        struct sb_dcd_ctx               *dcd_tail;
 
-       EVP_CIPHER_CTX                  cipher_ctx;
-       EVP_MD_CTX                      md_ctx;
+       EVP_CIPHER_CTX                  *cipher_ctx;
+       EVP_MD_CTX                      *md_ctx;
        uint8_t                         digest[32];
        struct sb_key_dictionary_key    sb_dict_key;
 
@@ -1308,8 +1308,8 @@ static int sb_prefill_image_header(struct sb_image_ctx *ictx)
                sizeof(struct sb_sections_header) / SB_BLOCK_SIZE;
        hdr->timestamp_us = sb_get_timestamp() * 1000000;
 
-       /* FIXME -- add proper config option */
-       hdr->flags = ictx->verbose_boot ? SB_IMAGE_FLAG_VERBOSE : 0,
+       hdr->flags = ictx->display_progress ?
+               SB_IMAGE_FLAG_DISPLAY_PROGRESS : 0;
 
        /* FIXME -- We support only default key */
        hdr->key_count = 1;
@@ -1322,7 +1322,7 @@ static int sb_postfill_image_header(struct sb_image_ctx *ictx)
        struct sb_boot_image_header *hdr = &ictx->payload;
        struct sb_section_ctx *sctx = ictx->sect_head;
        uint32_t kd_size, sections_blocks;
-       EVP_MD_CTX md_ctx;
+       EVP_MD_CTX *md_ctx = EVP_MD_CTX_new();
 
        /* The main SB header size in blocks. */
        hdr->image_blocks = hdr->header_blocks;
@@ -1340,6 +1340,7 @@ static int sb_postfill_image_header(struct sb_image_ctx *ictx)
 
        if (!ictx->sect_boot_found) {
                fprintf(stderr, "ERR: No bootable section selected!\n");
+               EVP_CIPHER_CTX_free(md_ctx);
                return -EINVAL;
        }
        hdr->first_boot_section_id = ictx->sect_boot;
@@ -1367,6 +1368,7 @@ static int sb_postfill_image_header(struct sb_image_ctx *ictx)
                         sizeof(hdr->digest));
        EVP_DigestFinal(&md_ctx, hdr->digest, NULL);
 
+       EVP_CIPHER_CTX_free(md_ctx);
        return 0;
 }
 
@@ -1416,7 +1418,7 @@ static int sb_parse_line(struct sb_image_ctx *ictx, struct sb_cmd_list *cmd)
 {
        char *tok;
        char *line = cmd->cmd;
-       char *rptr;
+       char *rptr = NULL;
        int ret;
 
        /* Analyze the identifier on this line first. */
@@ -1428,6 +1430,12 @@ static int sb_parse_line(struct sb_image_ctx *ictx, struct sb_cmd_list *cmd)
 
        cmd->cmd = rptr;
 
+       /* set DISPLAY_PROGRESS flag */
+       if (!strcmp(tok, "DISPLAYPROGRESS")) {
+               ictx->display_progress = 1;
+               return 0;
+       }
+
        /* DCD */
        if (!strcmp(tok, "DCD")) {
                ictx->in_section = 0;
@@ -1615,7 +1623,7 @@ static int sb_verify_image_header(struct sb_image_ctx *ictx,
        struct tm tm;
        int sz, ret = 0;
        unsigned char digest[20];
-       EVP_MD_CTX md_ctx;
+       EVP_MD_CTX *md_ctx = EVP_MD_CTX_new();
        unsigned long size;
 
        /* Start image-wide crypto. */
@@ -1627,6 +1635,7 @@ static int sb_verify_image_header(struct sb_image_ctx *ictx,
        size = fread(&ictx->payload, 1, sizeof(ictx->payload), fp);
        if (size != sizeof(ictx->payload)) {
                fprintf(stderr, "ERR: SB image header too short!\n");
+               EVP_CIPHER_CTX_free(md_ctx);
                return -EINVAL;
        }
 
@@ -1637,6 +1646,7 @@ static int sb_verify_image_header(struct sb_image_ctx *ictx,
                         sizeof(struct sb_boot_image_header) -
                         sizeof(hdr->digest));
        EVP_DigestFinal(&md_ctx, digest, NULL);
+       EVP_CIPHER_CTX_free(md_ctx);
 
        sb_aes_init(ictx, NULL, 1);
        sb_encrypt_sb_header(ictx);
@@ -1681,10 +1691,11 @@ static int sb_verify_image_header(struct sb_image_ctx *ictx,
                 ntohs(hdr->component_version.minor),
                 ntohs(hdr->component_version.revision));
 
-       if (hdr->flags & ~SB_IMAGE_FLAG_VERBOSE)
+       if (hdr->flags & ~SB_IMAGE_FLAGS_MASK)
                ret = -EINVAL;
        soprintf(ictx, "%s Image flags:                  %s\n", stat[!!ret],
-                hdr->flags & SB_IMAGE_FLAG_VERBOSE ? "Verbose_boot" : "");
+                hdr->flags & SB_IMAGE_FLAG_DISPLAY_PROGRESS ?
+                "Display_progress" : "");
        if (ret)
                return ret;
 
@@ -2287,7 +2298,6 @@ static int mxsimage_generate(struct image_tool_params *params,
 
        ctx.cfg_filename = params->imagename;
        ctx.output_filename = params->imagefile;
-       ctx.verbose_boot = 1;
 
        ret = sb_build_tree_from_cfg(&ctx);
        if (ret)
@@ -2306,25 +2316,18 @@ fail:
 /*
  * mxsimage parameters
  */
-static struct image_type_params mxsimage_params = {
-       .name           = "Freescale MXS Boot Image support",
-       .header_size    = 0,
-       .hdr            = NULL,
-       .check_image_type = mxsimage_check_image_types,
-       .verify_header  = mxsimage_verify_header,
-       .print_header   = mxsimage_print_header,
-       .set_header     = mxsimage_set_header,
-       .check_params   = mxsimage_check_params,
-       .vrec_header    = mxsimage_generate,
-};
-
-void init_mxs_image_type(void)
-{
-       register_image_type(&mxsimage_params);
-}
-
-#else
-void init_mxs_image_type(void)
-{
-}
+U_BOOT_IMAGE_TYPE(
+       mxsimage,
+       "Freescale MXS Boot Image support",
+       0,
+       NULL,
+       mxsimage_check_params,
+       mxsimage_verify_header,
+       mxsimage_print_header,
+       mxsimage_set_header,
+       NULL,
+       mxsimage_check_image_types,
+       NULL,
+       mxsimage_generate
+);
 #endif