From ae1864064454df483e3298e7b030fa3c7624fc18 Mon Sep 17 00:00:00 2001 From: Tvrtko Ursulin Date: Fri, 27 May 2022 11:50:41 +0100 Subject: lib/drm_fdinfo: Ensure buffer is null terminated Ensure buffer is null terminated at the point where the read ended and not at the end of the whole buffer. Otherwise string parsing can stray into un-initialised memory. Signed-off-by: Tvrtko Ursulin Reviewed-by: Petri Latvala --- lib/igt_drm_fdinfo.c | 8 ++++---- lib/igt_drm_fdinfo.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c index b422f67a..250d9e89 100644 --- a/lib/igt_drm_fdinfo.c +++ b/lib/igt_drm_fdinfo.c @@ -44,12 +44,12 @@ static size_t read_fdinfo(char *buf, const size_t sz, int at, const char *name) if (fd < 0) return 0; - buf[sz - 1] = 0; - count = read(fd, buf, sz); - buf[sz - 1] = 0; + count = read(fd, buf, sz - 1); + if (count > 0) + buf[count - 1] = 0; close(fd); - return count; + return count > 0 ? count : 0; } static int parse_engine(char *line, struct drm_client_fdinfo *info, diff --git a/lib/igt_drm_fdinfo.h b/lib/igt_drm_fdinfo.h index 5db63e28..87594716 100644 --- a/lib/igt_drm_fdinfo.h +++ b/lib/igt_drm_fdinfo.h @@ -46,7 +46,7 @@ struct drm_client_fdinfo { * igt_parse_drm_fdinfo: Parses the drm fdinfo file * * @drm_fd: DRM file descriptor - * @info: Structure to populate with read data + * @info: Structure to populate with read data. Must be zeroed. * * Returns the number of valid drm fdinfo keys found or zero if not all * mandatory keys were present or no engines found. @@ -58,7 +58,7 @@ unsigned int igt_parse_drm_fdinfo(int drm_fd, struct drm_client_fdinfo *info); * * @dir: File descriptor pointing to /proc/pid/fdinfo directory * @fd: String representation of the file descriptor number to parse. - * @info: Structure to populate with read data + * @info: Structure to populate with read data. Must be zeroed. * * Returns the number of valid drm fdinfo keys found or zero if not all * mandatory keys were present or no engines found. -- cgit v1.2.3