From 0ed4e9e907b3a3f1c2ae209b1dab384b1fa7a490 Mon Sep 17 00:00:00 2001 From: "Artyom V. Poptsov" Date: Sun, 3 Nov 2024 09:02:45 +0300 Subject: [PATCH] intel_name_lookup_shim.c (get_intel_device_name): Fix SEGFAULT btop would always fail with "Segmentation fault" when used on machines where the GPU does not have a codename (e.g. on embedded Intel graphics on Intel(R) Atom(TM) CPU D2500.) The reason for this behavior is that when a GPU does not have codename (it is NULL) the call to "strcpy" segfaults as the procedure effectively tries to access a NULL pointer. See . * src/linux/intel_gpu_top/intel_name_lookup_shim.c (get_intel_device_name): Add a check if "info->codename" is null; if it is, set the device name to "(unknown)" to prevent the SEGFAULT error. --- src/linux/intel_gpu_top/intel_name_lookup_shim.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/linux/intel_gpu_top/intel_name_lookup_shim.c b/src/linux/intel_gpu_top/intel_name_lookup_shim.c index e714f80..38f87fa 100644 --- a/src/linux/intel_gpu_top/intel_name_lookup_shim.c +++ b/src/linux/intel_gpu_top/intel_name_lookup_shim.c @@ -84,10 +84,14 @@ char *get_intel_device_name(const char *device_id) { char full_name[256]; const struct intel_device_info *info = intel_get_device_info(devid); if (info) { - strcpy(dev_name, info->codename); - dev_name[0] = toupper(dev_name[0]); + if (info->codename == NULL) { + strcpy(dev_name, "(unknown)"); + } else { + strcpy(dev_name, info->codename); + dev_name[0] = toupper(dev_name[0]); + } snprintf(full_name, sizeof(full_name), "Intel %s (Gen%u)", dev_name, info->graphics_ver); return strdup(full_name); } return NULL; -} \ No newline at end of file +} base-commit: 2e7208d59c54515080027a5ecbb89d2054047985 -- 2.46.0