[libvirt] [PATCH] linuxNodeInfoCPUPopulate: avoid used-uninitialized via a test

Jim Meyering jim at meyering.net
Tue May 18 10:14:56 UTC 2010


Jim Meyering wrote:
> See the comment:
>
>>From 1b200ba22d742e685de0b9853c8cd276df8e129f Mon Sep 17 00:00:00 2001
> From: Jim Meyering <meyering at redhat.com>
> Date: Tue, 18 May 2010 11:58:32 +0200
> Subject: [PATCH] linuxNodeInfoCPUPopulate: avoid used-uninitialized via a test
>
> * tests/nodeinfotest.c (linuxTestCompareFiles): Don't use
> nodeinfo->member uninitialized.  linuxNodeInfoCPUPopulate requires
> that some of its nodeinfo members (including threads) be initialized
> upon input.  The nodeinfotest.c program lacked the initialization,
> while the only other use (nodeGetInfo) did perform it.
> It's not trivial to move the initialization into the function,
> since nodeGetInfo sets at least one member after clearing the
> buffer but before calling linuxNodeInfoCPUPopulate.
> ---
>  tests/nodeinfotest.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c
> index 9aeb459..cb92215 100644
> --- a/tests/nodeinfotest.c
> +++ b/tests/nodeinfotest.c
> @@ -40,6 +40,8 @@ static int linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile
>      cpuinfo = fopen(cpuinfofile, "r");
>      if (!cpuinfo)
>          return -1;
> +
> +    memset(nodeinfo, 0, sizeof(*nodeinfo));
>      if (linuxNodeInfoCPUPopulate(cpuinfo, &nodeinfo) < 0) {
>          fclose(cpuinfo);
>          return -1;

That was wrong.
Unlike at the other call point, nodeinfo is not a pointer here,
and the above didn't even compile (can't deref a non-pointer).

Here's the correct patch:


>From c11a7ae1e7a83d0539dc5d7831f1c12971ff2dbc Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Tue, 18 May 2010 11:58:32 +0200
Subject: [PATCH] linuxNodeInfoCPUPopulate: avoid used-uninitialized via a test

* tests/nodeinfotest.c (linuxTestCompareFiles): Don't use
nodeinfo->member uninitialized.  linuxNodeInfoCPUPopulate requires
that some of its nodeinfo members (including threads) be initialized
upon input.  The nodeinfotest.c program lacked the initialization,
while the only other use (nodeGetInfo) did perform it.
It's not trivial to move the initialization into the function,
since nodeGetInfo sets at least one member after clearing the
buffer but before calling linuxNodeInfoCPUPopulate.
---
 tests/nodeinfotest.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c
index 9aeb459..ff056b9 100644
--- a/tests/nodeinfotest.c
+++ b/tests/nodeinfotest.c
@@ -40,6 +40,8 @@ static int linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile
     cpuinfo = fopen(cpuinfofile, "r");
     if (!cpuinfo)
         return -1;
+
+    memset(&nodeinfo, 0, sizeof(nodeinfo));
     if (linuxNodeInfoCPUPopulate(cpuinfo, &nodeinfo) < 0) {
         fclose(cpuinfo);
         return -1;
--
1.7.1.250.g7d1e8




More information about the libvir-list mailing list