tools: kwboot: Avoid code repetition in kwboot_img_patch()
Change kwboot_img_patch() to avoid code repetition of setting errno to EINVAL. Signed-off-by: Marek Behún <marek.behun@nic.cz> Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
committed by
Stefan Roese
parent
5fa04f47d7
commit
b4eea8f9b0
@@ -1386,7 +1386,6 @@ _copy_baudrate_change_code(struct main_hdr_v1 *hdr, void *dst, int pre,
|
|||||||
static int
|
static int
|
||||||
kwboot_img_patch(void *img, size_t *size, int baudrate)
|
kwboot_img_patch(void *img, size_t *size, int baudrate)
|
||||||
{
|
{
|
||||||
int rc;
|
|
||||||
struct main_hdr_v1 *hdr;
|
struct main_hdr_v1 *hdr;
|
||||||
uint32_t srcaddr;
|
uint32_t srcaddr;
|
||||||
uint8_t csum;
|
uint8_t csum;
|
||||||
@@ -1394,33 +1393,25 @@ kwboot_img_patch(void *img, size_t *size, int baudrate)
|
|||||||
int image_ver;
|
int image_ver;
|
||||||
int is_secure;
|
int is_secure;
|
||||||
|
|
||||||
rc = -1;
|
|
||||||
hdr = img;
|
hdr = img;
|
||||||
|
|
||||||
if (*size < sizeof(struct main_hdr_v1)) {
|
if (*size < sizeof(struct main_hdr_v1))
|
||||||
errno = EINVAL;
|
goto err;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
image_ver = kwbimage_version(img);
|
image_ver = kwbimage_version(img);
|
||||||
if (image_ver != 0 && image_ver != 1) {
|
if (image_ver != 0 && image_ver != 1) {
|
||||||
fprintf(stderr, "Invalid image header version\n");
|
fprintf(stderr, "Invalid image header version\n");
|
||||||
errno = EINVAL;
|
goto err;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hdrsz = kwbheader_size(hdr);
|
hdrsz = kwbheader_size(hdr);
|
||||||
|
|
||||||
if (*size < hdrsz) {
|
if (*size < hdrsz)
|
||||||
errno = EINVAL;
|
goto err;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
csum = kwboot_hdr_csum8(hdr) - hdr->checksum;
|
csum = kwboot_hdr_csum8(hdr) - hdr->checksum;
|
||||||
if (csum != hdr->checksum) {
|
if (csum != hdr->checksum)
|
||||||
errno = EINVAL;
|
goto err;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (image_ver == 0) {
|
if (image_ver == 0) {
|
||||||
struct main_hdr_v0 *hdr_v0 = img;
|
struct main_hdr_v0 *hdr_v0 = img;
|
||||||
@@ -1433,10 +1424,9 @@ kwboot_img_patch(void *img, size_t *size, int baudrate)
|
|||||||
|
|
||||||
switch (hdr->blockid) {
|
switch (hdr->blockid) {
|
||||||
case IBR_HDR_SATA_ID:
|
case IBR_HDR_SATA_ID:
|
||||||
if (srcaddr < 1) {
|
if (srcaddr < 1)
|
||||||
errno = EINVAL;
|
goto err;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
hdr->srcaddr = cpu_to_le32((srcaddr - 1) * 512);
|
hdr->srcaddr = cpu_to_le32((srcaddr - 1) * 512);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1459,10 +1449,8 @@ kwboot_img_patch(void *img, size_t *size, int baudrate)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (hdrsz > le32_to_cpu(hdr->srcaddr) ||
|
if (hdrsz > le32_to_cpu(hdr->srcaddr) ||
|
||||||
*size < le32_to_cpu(hdr->srcaddr) + le32_to_cpu(hdr->blocksize)) {
|
*size < le32_to_cpu(hdr->srcaddr) + le32_to_cpu(hdr->blocksize))
|
||||||
errno = EINVAL;
|
goto err;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
is_secure = kwboot_img_is_secure(img);
|
is_secure = kwboot_img_is_secure(img);
|
||||||
|
|
||||||
@@ -1470,8 +1458,7 @@ kwboot_img_patch(void *img, size_t *size, int baudrate)
|
|||||||
if (is_secure) {
|
if (is_secure) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Image has secure header with signature for non-UART booting\n");
|
"Image has secure header with signature for non-UART booting\n");
|
||||||
errno = EINVAL;
|
goto err;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kwboot_printv("Patching image boot signature to UART\n");
|
kwboot_printv("Patching image boot signature to UART\n");
|
||||||
@@ -1485,15 +1472,13 @@ kwboot_img_patch(void *img, size_t *size, int baudrate)
|
|||||||
if (image_ver == 0) {
|
if (image_ver == 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Cannot inject code for changing baudrate into v0 image header\n");
|
"Cannot inject code for changing baudrate into v0 image header\n");
|
||||||
errno = EINVAL;
|
goto err;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_secure) {
|
if (is_secure) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Cannot inject code for changing baudrate into image with secure header\n");
|
"Cannot inject code for changing baudrate into image with secure header\n");
|
||||||
errno = EINVAL;
|
goto err;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1529,8 +1514,7 @@ kwboot_img_patch(void *img, size_t *size, int baudrate)
|
|||||||
|
|
||||||
if (is_secure) {
|
if (is_secure) {
|
||||||
fprintf(stderr, "Cannot align image with secure header\n");
|
fprintf(stderr, "Cannot align image with secure header\n");
|
||||||
errno = EINVAL;
|
goto err;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kwboot_printv("Aligning image header to Xmodem block size\n");
|
kwboot_printv("Aligning image header to Xmodem block size\n");
|
||||||
@@ -1540,9 +1524,10 @@ kwboot_img_patch(void *img, size_t *size, int baudrate)
|
|||||||
hdr->checksum = kwboot_hdr_csum8(hdr) - csum;
|
hdr->checksum = kwboot_hdr_csum8(hdr) - csum;
|
||||||
|
|
||||||
*size = le32_to_cpu(hdr->srcaddr) + le32_to_cpu(hdr->blocksize);
|
*size = le32_to_cpu(hdr->srcaddr) + le32_to_cpu(hdr->blocksize);
|
||||||
rc = 0;
|
return 0;
|
||||||
out:
|
err:
|
||||||
return rc;
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user