[PATCH 3/3] tests/amdgpu: Fix buffer overflow

Luben Tuikov luben.tuikov at amd.com
Mon Dec 9 18:58:01 UTC 2019


This patch fixes the following warning:
-Wformat-overflow=

Signed-off-by: Luben Tuikov <luben.tuikov at amd.com>
---
 tests/amdgpu/meson.build |  1 +
 tests/amdgpu/ras_tests.c | 41 ++++++++++++++++++++++++++++------------
 2 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/tests/amdgpu/meson.build b/tests/amdgpu/meson.build
index 2a48b43f..faaf0ee6 100644
--- a/tests/amdgpu/meson.build
+++ b/tests/amdgpu/meson.build
@@ -28,6 +28,7 @@ if dep_cunit.found()
     ),
     dependencies : [dep_cunit, dep_threads],
     include_directories : [inc_root, inc_drm, include_directories('../../amdgpu')],
+    link_args : ['-lbsd'],
     link_with : [libdrm, libdrm_amdgpu],
     install : with_install_tests,
   )
diff --git a/tests/amdgpu/ras_tests.c b/tests/amdgpu/ras_tests.c
index f745166b..c96cde45 100644
--- a/tests/amdgpu/ras_tests.c
+++ b/tests/amdgpu/ras_tests.c
@@ -30,6 +30,10 @@
 #include <fcntl.h>
 #include <stdio.h>
 #include "xf86drm.h"
+#include <bsd/string.h>
+#include <limits.h>
+
+#define PATH_SIZE PATH_MAX
 
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
 
@@ -498,7 +502,7 @@ static int get_file_contents(char *file, char *buf, int size);
 
 static int amdgpu_ras_lookup_id(drmDevicePtr device)
 {
-	char path[1024];
+	char path[PATH_SIZE];
 	char str[128];
 	drmPciBusInfo info;
 	int i;
@@ -525,8 +529,8 @@ static int amdgpu_ras_lookup_id(drmDevicePtr device)
 //helpers
 
 static int test_card;
-static char sysfs_path[1024];
-static char debugfs_path[1024];
+static char sysfs_path[PATH_SIZE];
+static char debugfs_path[PATH_SIZE];
 static uint32_t ras_mask;
 static amdgpu_device_handle device_handle;
 
@@ -605,10 +609,11 @@ static int amdgpu_ras_is_feature_supported(enum amdgpu_ras_block block)
 
 static int amdgpu_ras_invoke(struct ras_debug_if *data)
 {
-	char path[1024];
+	char path[PATH_SIZE];
 	int ret;
 
-	sprintf(path, "%s%s", get_ras_debugfs_root(), "ras_ctrl");
+	snprintf(path, sizeof(path), "%s", get_ras_debugfs_root());
+	strlcpy(path, "ras_ctrl", sizeof(path));
 
 	ret = set_file_contents(path, (char *)data, sizeof(*data))
 		- sizeof(*data);
@@ -619,14 +624,16 @@ static int amdgpu_ras_query_err_count(enum amdgpu_ras_block block,
 		unsigned long *ue, unsigned long *ce)
 {
 	char buf[64];
-	char name[1024];
+	char name[PATH_SIZE];
 
 	*ue = *ce = 0;
 
 	if (amdgpu_ras_is_feature_supported(block) <= 0)
 		return -1;
 
-	sprintf(name, "%s%s%s", get_ras_sysfs_root(), ras_block_str(block), "_err_count");
+	snprintf(name, sizeof(name), "%s", get_ras_sysfs_root());
+	strlcpy(name, ras_block_str(block), sizeof(name));
+	strlcpy(name, "_err_count", sizeof(name));
 
 	if (is_file_ok(name, O_RDONLY))
 		return 0;
@@ -837,7 +844,7 @@ static void amdgpu_ras_basic_test(void)
 	int i;
 	int j;
 	uint32_t features;
-	char path[1024];
+	char path[PATH_SIZE];
 
 	ret = is_file_ok("/sys/module/amdgpu/parameters/ras_mask", O_RDONLY);
 	CU_ASSERT_EQUAL(ret, 0);
@@ -849,11 +856,15 @@ static void amdgpu_ras_basic_test(void)
 				sizeof(features), &features);
 		CU_ASSERT_EQUAL(ret, 0);
 
-		sprintf(path, "%s%s", get_ras_debugfs_root(), "ras_ctrl");
+		snprintf(path, sizeof(path), "%s", get_ras_debugfs_root());
+		strlcpy(path, "ras_ctrl", sizeof(path));
+
 		ret = is_file_ok(path, O_WRONLY);
 		CU_ASSERT_EQUAL(ret, 0);
 
-		sprintf(path, "%s%s", get_ras_sysfs_root(), "features");
+		snprintf(path, sizeof(path), "%s", get_ras_sysfs_root());
+		strlcpy(path, "features", sizeof(path));
+
 		ret = is_file_ok(path, O_RDONLY);
 		CU_ASSERT_EQUAL(ret, 0);
 
@@ -865,11 +876,17 @@ static void amdgpu_ras_basic_test(void)
 			if (!((1 << j) & ras_block_mask_basic))
 				continue;
 
-			sprintf(path, "%s%s%s", get_ras_sysfs_root(), ras_block_str(j), "_err_count");
+			snprintf(path, sizeof(path), "%s", get_ras_sysfs_root());
+			strlcpy(path, ras_block_str(j), sizeof(path));
+			strlcpy(path, "_err_count", sizeof(path));
+
 			ret = is_file_ok(path, O_RDONLY);
 			CU_ASSERT_EQUAL(ret, 0);
 
-			sprintf(path, "%s%s%s", get_ras_debugfs_root(), ras_block_str(j), "_err_inject");
+			snprintf(path, sizeof(path), "%s", get_ras_debugfs_root());
+			strlcpy(path, ras_block_str(j), sizeof(path));
+			strlcpy(path, "_err_inject", sizeof(path));
+
 			ret = is_file_ok(path, O_WRONLY);
 			CU_ASSERT_EQUAL(ret, 0);
 		}
-- 
2.24.0.390.g083378cc35



More information about the amd-gfx mailing list