diff mbox

tools: libxl: NULL terminate partially constructed hex string

Message ID 1455621500-12918-1-git-send-email-ian.campbell@citrix.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ian Campbell Feb. 16, 2016, 11:18 a.m. UTC
Coverity (correctly) complains that the strncpy(p, "0x", 2) will not
null terminate p.

Although we can see that in the rest of the function p will
definitely be NULL terminated by the time it is complete there is no
harm in passing 3 to the strncpy and allowing it to NULL terminate to
placate Coverity. We know this is safe because the allocation to hold
the string includes a "+3" for the 0x and the terminating NULL.

Compile tested only.

CID: 1198708

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
I flip-flopped on just telling Coverity this was a false +ve, but
mainly landed on this course of action because the issue was marked as
"fix required" by Ian J in the coverity interface (it was also marked
"insignificant" FWIW).
---
 tools/libxl/libxl_utils.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Wei Liu Feb. 16, 2016, 12:34 p.m. UTC | #1
On Tue, Feb 16, 2016 at 11:18:20AM +0000, Ian Campbell wrote:
> Coverity (correctly) complains that the strncpy(p, "0x", 2) will not
> null terminate p.
> 
> Although we can see that in the rest of the function p will
> definitely be NULL terminated by the time it is complete there is no
> harm in passing 3 to the strncpy and allowing it to NULL terminate to
> placate Coverity. We know this is safe because the allocation to hold
> the string includes a "+3" for the 0x and the terminating NULL.
> 
> Compile tested only.
> 
> CID: 1198708
> 
> Signed-off-by: Ian Campbell <ian.campbell@citrix.com>

Acked-by: Wei Liu <wei.liu2@citrix.com>

> ---
> I flip-flopped on just telling Coverity this was a false +ve, but
> mainly landed on this course of action because the issue was marked as
> "fix required" by Ian J in the coverity interface (it was also marked
> "insignificant" FWIW).
> ---
>  tools/libxl/libxl_utils.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
> index e42422a..672d3f8 100644
> --- a/tools/libxl/libxl_utils.c
> +++ b/tools/libxl/libxl_utils.c
> @@ -780,7 +780,7 @@ char *libxl_bitmap_to_hex_string(libxl_ctx *ctx, const libxl_bitmap *bitmap)
>      int i = bitmap->size;
>      char *p = libxl__zalloc(NOGC, bitmap->size * 2 + 3);
>      char *q = p;
> -    strncpy(p, "0x", 2);
> +    strncpy(p, "0x", 3);
>      p += 2;
>      while(--i >= 0) {
>          sprintf(p, "%02x", bitmap->map[i]);
> -- 
> 2.1.4
>
Ian Jackson Feb. 16, 2016, 5:39 p.m. UTC | #2
Wei Liu writes ("Re: [PATCH] tools: libxl: NULL terminate partially constructed hex string"):
> On Tue, Feb 16, 2016 at 11:18:20AM +0000, Ian Campbell wrote:
> > Coverity (correctly) complains that the strncpy(p, "0x", 2) will not
> > null terminate p.
> > Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
> 
> Acked-by: Wei Liu <wei.liu2@citrix.com>

Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
diff mbox

Patch

diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
index e42422a..672d3f8 100644
--- a/tools/libxl/libxl_utils.c
+++ b/tools/libxl/libxl_utils.c
@@ -780,7 +780,7 @@  char *libxl_bitmap_to_hex_string(libxl_ctx *ctx, const libxl_bitmap *bitmap)
     int i = bitmap->size;
     char *p = libxl__zalloc(NOGC, bitmap->size * 2 + 3);
     char *q = p;
-    strncpy(p, "0x", 2);
+    strncpy(p, "0x", 3);
     p += 2;
     while(--i >= 0) {
         sprintf(p, "%02x", bitmap->map[i]);