aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/admin.scm4
-rw-r--r--gnu/packages/patches/btop-fix-segfault-on-intel-gpus.patch49
2 files changed, 52 insertions, 1 deletions
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index cd5a76579d..88d68a3afc 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -775,7 +775,9 @@ console.")
(file-name (git-file-name name version))
(sha256
(base32
- "0vgw6hwqh6zbzrvrn3i0xwi9ykm1qdvhqcyz3mjakd7w303lx603"))))
+ "0vgw6hwqh6zbzrvrn3i0xwi9ykm1qdvhqcyz3mjakd7w303lx603"))
+ (patches
+ (search-patches "btop-fix-segfault-on-intel-gpus.patch"))))
(build-system gnu-build-system)
(native-inputs (list lowdown))
(arguments
diff --git a/gnu/packages/patches/btop-fix-segfault-on-intel-gpus.patch b/gnu/packages/patches/btop-fix-segfault-on-intel-gpus.patch
new file mode 100644
index 0000000000..27e2541dbc
--- /dev/null
+++ b/gnu/packages/patches/btop-fix-segfault-on-intel-gpus.patch
@@ -0,0 +1,49 @@
+From 0ed4e9e907b3a3f1c2ae209b1dab384b1fa7a490 Mon Sep 17 00:00:00 2001
+From: "Artyom V. Poptsov" <poptsov.artyom@gmail.com>
+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 <https://github.com/aristocratos/btop/pull/958>.
+
+* 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
+