On Tue, Oct 23, 2012 at 10:44:50PM +0900, Namhyung Kim wrote: > This was found during chasing down the header output regression. > The strbuf_addf() was checking buffer length with a result of > vscnprintf() which cannot be greater than that of strbuf_avail(). > > Since numa topology and pmu mapping info in header were converted > to use strbuf, it sometimes caused uninteresting behaviors with the > broken strbuf. > > Fix it by using vsnprintf() which returns desired output string > length regardless of the available buffer size and grow the buffer > if needed. > > Reported-by: Andrew Jones <drjo...@redhat.com> > Signed-off-by: Namhyung Kim <namhy...@kernel.org> > --- > tools/perf/util/strbuf.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/tools/perf/util/strbuf.c b/tools/perf/util/strbuf.c > index 2eeb51baf077..cfa906882e2c 100644 > --- a/tools/perf/util/strbuf.c > +++ b/tools/perf/util/strbuf.c > @@ -90,17 +90,17 @@ void strbuf_addf(struct strbuf *sb, const char *fmt, ...) > if (!strbuf_avail(sb)) > strbuf_grow(sb, 64); > va_start(ap, fmt); > - len = vscnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap); > + len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, ap); > va_end(ap); > if (len < 0) > - die("your vscnprintf is broken"); > + die("your vsnprintf is broken"); > if (len > strbuf_avail(sb)) { > strbuf_grow(sb, len); > va_start(ap, fmt); > - len = vscnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, > ap); > + len = vsnprintf(sb->buf + sb->len, sb->alloc - sb->len, fmt, > ap); > va_end(ap); > if (len > strbuf_avail(sb)) { > - die("this should not happen, your snprintf is broken"); > + die("this should not happen, your vsnprintf is broken"); > } > } > strbuf_setlen(sb, sb->len + len); > -- > 1.7.9.2 >
Tested-by: Andrew Jones <drjo...@redhat.com> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/