topology: Fix compile warnings regarding snprintf and path

snprintf throws a warning from -Wformat-truncation where the string
could be truncated. We address this by referencing the maximum size that
can be returned from a file according to MAXNAMLEN . This should safely
guard us from truncating the path value.

Change-Id: If1d208990d8775e9494835b0deb890d2616fd15b
Signed-off-by: Kent Russell <kent.russell@amd.com>
This commit is contained in:
Kent Russell
2019-08-27 07:56:18 -04:00
rodzic 8ab8b14902
commit ccac07cb14
+9 -3
Wyświetl plik
@@ -1161,8 +1161,14 @@ static void topology_destroy_temp_cpu_cache_list(
static int topology_create_temp_cpu_cache_list(int node,
struct proc_cpuinfo *cpuinfo, cpu_cacheinfo_t **temp_cpu_ci_list)
{
/* Get max path size from /sys/devices/system/node/node%d/%s/cache
* below, which will max out according to the largest filename,
* which can be present twice in the string above. 29 is for the prefix
* and the +6 is for the cache suffix
*/
const uint32_t MAXPATHSIZE = 29 + MAXNAMLEN + (MAXNAMLEN + 6);
cpu_cacheinfo_t *p_temp_cpu_ci_list; /* a list of cpu_ci */
char path[256], node_dir[256];
char path[MAXPATHSIZE], node_dir[MAXPATHSIZE];
int max_cpus;
cpu_cacheinfo_t *this_cpu; /* one cpu_ci in cpu_ci_list */
int cache_cnt = 0;
@@ -1177,7 +1183,7 @@ static int topology_create_temp_cpu_cache_list(int node,
*temp_cpu_ci_list = NULL;
/* Get info from /sys/devices/system/node/nodeX/cpuY/cache */
snprintf(node_dir, 256, "/sys/devices/system/node/node%d", node);
snprintf(node_dir, MAXPATHSIZE, "/sys/devices/system/node/node%d", node);
/* Other than cpuY folders, this dir also has cpulist and cpumap */
max_cpus = num_subdirs(node_dir, "cpu");
if (max_cpus <= 0) {
@@ -1199,7 +1205,7 @@ static int topology_create_temp_cpu_cache_list(int node,
continue;
if (!isdigit(dir->d_name[3])) /* ignore files like cpulist */
continue;
snprintf(path, 256, "/sys/devices/system/node/node%d/%s/cache",
snprintf(path, MAXPATHSIZE, "/sys/devices/system/node/node%d/%s/cache",
node, dir->d_name);
this_cpu->num_caches = num_subdirs(path, "index");
this_cpu->cache_prop = calloc(this_cpu->num_caches,