[PATCH i-g-t 03/12] lib/igt_drm_fdinfo: Fix wrong name len assert

Tvrtko Ursulin tursulin at ursulin.net
Fri Apr 19 07:48:49 UTC 2024


On 05/04/2024 07:00, Lucas De Marchi wrote:
> 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.
> 
> 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 7a9ae94f0..9b1776775 100644
> --- a/lib/igt_drm_fdinfo.c
> +++ b/lib/igt_drm_fdinfo.c
> @@ -96,8 +96,9 @@ static int parse_engine(const char *name, 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;
>   		}
>   	}

Ah a good fix.

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Also, ideally fixes such as this and next few would be before 
refactoring in the series, but okay, not asking you to re-order.

Regards,

Tvrtko

P.S. One extra space in the assert fwiw.


More information about the igt-dev mailing list