perf tools: Ensure sscanf does not overrun the "mem" field
authorAlan Cox <alan@linux.intel.com>
Mon, 20 Jan 2014 18:10:11 +0000 (19:10 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 20 Jan 2014 19:19:08 +0000 (16:19 -0300)
Make the parsing robust.

(perf has some other assumptions that BUFSIZE <= MAX_PATH which are
 not touched here)

Reported-by: Jackie Chang
Signed-off-by: Alan Cox <alan@linux.intel.com>
Cc: Alan Cox <gnomes@lxorguk.ukuu.org.uk>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/n/tip-g2uoiwbrpiimb63rx32qv8ne@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/header.c

index bb3e0ede61835ff249a6c5766daa279d2ab77f6a..893f8e2df9285237b26365922adf9b1eaa88a5ec 100644 (file)
@@ -930,7 +930,7 @@ static int write_topo_node(int fd, int node)
                /* skip over invalid lines */
                if (!strchr(buf, ':'))
                        continue;
-               if (sscanf(buf, "%*s %*d %s %"PRIu64, field, &mem) != 2)
+               if (sscanf(buf, "%*s %*d %31s %"PRIu64, field, &mem) != 2)
                        goto done;
                if (!strcmp(field, "MemTotal:"))
                        mem_total = mem;