[CI 1/6] lib/igt_drm_fdinfo: Fix wrong name len assert

Lucas De Marchi lucas.demarchi at intel.com
Tue Apr 30 19:01:45 UTC 2024


When parsing engine name, at this point we have something like:

	"drm-engine-render:	232409619162 ns"
	            ^      ^
	            |      |
	          name     p

We are copying the engine name to the final destination, but
strlen(name) will actually contain the entire string. Since we already
know the name length, calculated previously, just use it for copying the
string.

Since each name is 256-bytes long, the assert doesn't trigger easily,
but it's better to be correct. And more efficient.

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
---
 lib/igt_drm_fdinfo.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index 18dbb5d0b..a1f4ad10d 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -90,8 +90,9 @@ static int parse_engine(char *line, struct drm_client_fdinfo *info,
 
 		if (found < 0) {
 			assert((info->num_engines + 1) < ARRAY_SIZE(info->names));
-			assert((strlen(name) + 1) < sizeof(info->names[0]));
-			strncpy(info->names[info->num_engines], name, name_len);
+			assert(name_len  < sizeof(info->names[0]));
+			memcpy(info->names[info->num_engines], name, name_len);
+			info->names[info->num_engines][name_len] = '\0';
 			found = info->num_engines;
 		}
 	}
-- 
2.43.0



More information about the igt-dev mailing list