Skip to contentSkip to conversation

tools: mtk_image: replace strncpy(d, s, sizeof(d)) with snprintf()

PATCH New Andy Shevchenko 3 participants 3 messages Dec 11, 2018 – Dec 17, 2018 Arm MediaTek

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 tools: mtk_image: replace strncpy(d, s, sizeof(d)) with snprintf()

Starting from version 8 the GCC, i.e. C compiler, starts complaining about possible '\0' terminator loss or, as in this case, garbage copy.

In function ‘mtk_image_set_gen_header’,
inlined from ‘mtk_image_set_header’ at tools/mtk_image.c:733:3:
tools/mtk_image.c:659:2: warning: ‘strncpy’ specified bound 12 equals destination size [-Wstringop-truncation]
strncpy(hdr->boot.name, bootname, sizeof(hdr->boot.name)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘mtk_brom_parse_imagename’,
inlined from ‘mtk_image_check_params’ at tools/mtk_image.c:388:9:
tools/mtk_image.c:325:5: warning: ‘strncpy’ specified bound 32 equals destination size [-Wstringop-truncation]

     strncpy(lk_name, val, sizeof(lk_name));
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Replace it with snprintf() to tell compiler how much room we have in the destination buffer for source string.

Fixes 3b975a147c3c ("tools: MediaTek: add MTK boot header generation to mkimage")
Cc Ryder Lee <[email protected]>
Cc Weijie Gao <[email protected]>
---
 tools/mtk_image.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
tools/mtk_image.c +2 -2
index 2706d2de32..2ca519483d 100644
@@ -322,7 +322,7 @@ static int mtk_brom_parse_imagename(const char *imagename)
 				lk = val;
 
 			if (!strcmp(key, "lkname"))
-				strncpy(lk_name, val, sizeof(lk_name));
+				snprintf(lk_name, sizeof(lk_name), "%s", val);
 		}
 
 		if (next)
@@ -656,7 +656,7 @@ static void mtk_image_set_gen_header(void *ptr, off_t filesize,
 		bootname = SDMMC_BOOT_NAME;
 
 	/* Generic device header */
-	strncpy(hdr->boot.name, bootname, sizeof(hdr->boot.name));
+	snprintf(hdr->boot.name, sizeof(hdr->boot.name), "%s", bootname);
 	hdr->boot.version = cpu_to_le32(1);
 	hdr->boot.size = cpu_to_le32(sizeof(hdr->boot));
 
Signature · 1 line
2.19.2
#1 lore raw

PATCH 1/1 tools: mtk_image: replace strncpy(d, s, sizeof(d)) with snprintf()

Quoted 39 lines · Andy Shevchenko

Starting from version 8 the GCC, i.e. C compiler, starts complaining about possible '\0' terminator loss or, as in this case, garbage copy.

In function ‘mtk_image_set_gen_header’,
inlined from ‘mtk_image_set_header’ at tools/mtk_image.c:733:3:
tools/mtk_image.c:659:2: warning: ‘strncpy’ specified bound 12 equals destination size [-Wstringop-truncation]
strncpy(hdr->boot.name, bootname, sizeof(hdr->boot.name)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘mtk_brom_parse_imagename’,
inlined from ‘mtk_image_check_params’ at tools/mtk_image.c:388:9:
tools/mtk_image.c:325:5: warning: ‘strncpy’ specified bound 32 equals destination size [-Wstringop-truncation]

     strncpy(lk_name, val, sizeof(lk_name));
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Replace it with snprintf() to tell compiler how much room we have in the destination buffer for source string.

Fixes 3b975a147c3c ("tools: MediaTek: add MTK boot header generation to mkimage")
Cc Ryder Lee <[email protected]>
Cc Weijie Gao <[email protected]>
---
 tools/mtk_image.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
tools/mtk_image.c +1 -1
index 2706d2de32..2ca519483d 100644
@@ -322,7 +322,7 @@ static int mtk_brom_parse_imagename(const char *imagename)
 				lk = val;
 
 			if (!strcmp(key, "lkname"))
-				strncpy(lk_name, val, sizeof(lk_name));
+				snprintf(lk_name, sizeof(lk_name), "%s", val);
 		}
 
 		if (next)

tools/mtk_image.c static void mtk_image_set_gen_header(void *ptr, off_t filesize, · line 662

Quoted 8 lines
tools/mtk_image.c +1 -1
@@ -656,7 +656,7 @@ static void mtk_image_set_gen_header(void *ptr, off_t filesize,
 		bootname = SDMMC_BOOT_NAME;
 
 	/* Generic device header */
-	strncpy(hdr->boot.name, bootname, sizeof(hdr->boot.name));
+	snprintf(hdr->boot.name, sizeof(hdr->boot.name), "%s", bootname);
 	hdr->boot.version = cpu_to_le32(1);
 	hdr->boot.size = cpu_to_le32(sizeof(hdr->boot));
 

Hi Andy,

The snprintf adds a NULL char at the end of the string which gives only 31 available bytes for the lk name filed. But it's OK for this because almost no one would like to give a name to fill the whole field. The same applies to the device header.

Best Regards,

Weijie

#2 lore raw

PATCH 1/1 tools: mtk_image: replace strncpy(d, s, sizeof(d)) with snprintf()

In reply to Andy Shevchenko
Quoted 14 lines · Andy Shevchenko

Starting from version 8 the GCC, i.e. C compiler, starts complaining about possible '\0' terminator loss or, as in this case, garbage copy.

In function ‘mtk_image_set_gen_header’,
inlined from ‘mtk_image_set_header’ at tools/mtk_image.c:733:3:
tools/mtk_image.c:659:2: warning: ‘strncpy’ specified bound 12 equals destination size [-Wstringop-truncation]
strncpy(hdr->boot.name, bootname, sizeof(hdr->boot.name)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function ‘mtk_brom_parse_imagename’,
inlined from ‘mtk_image_check_params’ at tools/mtk_image.c:388:9:
tools/mtk_image.c:325:5: warning: ‘strncpy’ specified bound 32 equals destination size [-Wstringop-truncation]

     strncpy(lk_name, val, sizeof(lk_name));
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Quoted 8 lines

Replace it with snprintf() to tell compiler how much room we have in the destination buffer for source string.

Fixes 3b975a147c3c ("tools: MediaTek: add MTK boot header generation to mkimage")
Cc Ryder Lee <[email protected]>
Cc Weijie Gao <[email protected]>

Applied to u-boot/master, thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181217/b7767982/attachment.sig>