From 3228135fb721281f1134cb4e17c583c8cdfc1909 Mon Sep 17 00:00:00 2001 From: Vincent Brillault Date: Tue, 23 Sep 2014 22:28:52 +0200 Subject: [PATCH] Turbostat: check return value of vsnprintf --- src/turbostat.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/turbostat.c b/src/turbostat.c index cc0be207..6fa172d0 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -262,6 +262,7 @@ enum return_values { ERR_CPU_ALLOC, ERR_NOT_ROOT, UNSUPPORTED_CPU, + ERR_PATH_TOO_LONG, }; @@ -1069,11 +1070,16 @@ parse_int_file(const char *fmt, ...) va_list args; char path[PATH_MAX]; FILE *filep; - int value; + int len, value; va_start(args, fmt); - vsnprintf(path, sizeof(path), fmt, args); + len = vsnprintf(path, sizeof(path), fmt, args); va_end(args); + if (len < 0 || len >= PATH_MAX) { + ERROR("Turbostat plugin: path truncated: '%s'", path); + return -ERR_PATH_TOO_LONG; + } + filep = fopen(path, "r"); if (!filep) { ERROR("Turbostat plugin: Failed to open '%s'", path); -- 2.30.2