[PATCH] Add erase_sample extension as an data erase reference
Tao Liu
ltao at redhat.com
Wed Jun 10 16:42:50 PDT 2026
This patch will add a erase_sample.c as a data erase reference. It will
erase all tasks & threads's comm[] member within their task_struct, as
a result, you will see the ps info outputted by crash utility similiar
as follows:
crash> ps
...
1 0 10 ffff96b7c0980000 IN 0.0 25504 15704 XXXXXXXXXXXXXXX
2 0 15 ffff96b7c0982f40 IN 0.0 0 0 [XXXXXXXXXXXXXXX]
3 2 2 ffff96b7c09a0000 IN 0.0 0 0 [XXXXXXXXXXXXXXX]
4 2 0 ffff96b7c09a2f40 ID 0.0 0 0 [XXXXXXXXXXXXXXX]
5 2 0 ffff96b7c09a8000 ID 0.0 0 0 [XXXXXXXXXXXXXXX]
The comm[] erasure doesn't cause critical info loss and has slight
impact on vmcore analyze, so it is safe to take it as an example for
developers.
Signed-off-by: Tao Liu <ltao at redhat.com>
---
Hi maintainers,
This patch should be applied upon "[PATCH v5][makedumpfile 9/9] Add amdgpu mm
pages filtering extension". Since this patch doesn't do
modifications on any previous patches, and you are reviewing v5, so I
post appended to v5. If this causes any confusing, I'm happy to post a
v6 with a cleaner format. Thanks!
---
extensions/Makefile | 2 +-
extensions/erase_sample.c | 78 +++++++++++++++++++++++++++++++++++++++
2 files changed, 79 insertions(+), 1 deletion(-)
create mode 100644 extensions/erase_sample.c
diff --git a/extensions/Makefile b/extensions/Makefile
index c1dbc4f..9dd4f8e 100644
--- a/extensions/Makefile
+++ b/extensions/Makefile
@@ -1,5 +1,5 @@
CC ?= gcc
-CONTRIB_SO := sample.so amdgpu_filter.so
+CONTRIB_SO := sample.so erase_sample.so amdgpu_filter.so
all: $(CONTRIB_SO)
diff --git a/extensions/erase_sample.c b/extensions/erase_sample.c
new file mode 100644
index 0000000..7c935d1
--- /dev/null
+++ b/extensions/erase_sample.c
@@ -0,0 +1,78 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "../makedumpfile.h"
+#include "../btf_info.h"
+#include "../kallsyms.h"
+#include "../extension.h"
+#include "../erase_info.h"
+
+INIT_MOD_STRUCT_MEMBER(vmlinux, task_struct, tasks);
+INIT_MOD_STRUCT_MEMBER(vmlinux, task_struct, thread_node);
+INIT_MOD_STRUCT_MEMBER(vmlinux, task_struct, signal);
+INIT_MOD_STRUCT_MEMBER(vmlinux, signal_struct, thread_head);
+INIT_MOD_STRUCT_MEMBER(vmlinux, task_struct, comm);
+INIT_MOD_SYM(vmlinux, init_task);
+
+#define MOD_MEMBER_OFF(MOD, S, M) \
+ GET_MOD_STRUCT_MEMBER_MOFF(MOD, S, M) / 8
+#define KERN_MEMBER_OFF(S, M) MOD_MEMBER_OFF(vmlinux, S, M)
+#define GET_KERN_STRUCT_MEMBER_MSIZE(S, M) \
+ GET_MOD_STRUCT_MEMBER_MSIZE(vmlinux, S, M)
+#define GET_KERN_SYM(SYM) GET_MOD_SYM(vmlinux, SYM)
+
+/* task_struct.comm eraser */
+static bool erase_task_struct_comm(void)
+{
+ uint64_t task_list, init_task, comm, signal, thread_head, thread_list;
+ uint32_t size;
+
+ init_task = GET_KERN_SYM(init_task);
+ size = GET_KERN_STRUCT_MEMBER_MSIZE(task_struct, comm);
+ task_list = init_task + KERN_MEMBER_OFF(task_struct, tasks);
+
+ /* Iterate all tasks */
+ do {
+ thread_list = task_list - KERN_MEMBER_OFF(task_struct, tasks) +
+ KERN_MEMBER_OFF(task_struct, thread_node);
+ if (!readmem(VADDR, task_list - KERN_MEMBER_OFF(task_struct, tasks) +
+ KERN_MEMBER_OFF(task_struct, signal), &signal, sizeof(uint64_t))) {
+ ERRMSG("Can't get task_struct member signal!\n");
+ goto out;
+ }
+ thread_head = signal + KERN_MEMBER_OFF(signal_struct, thread_head);
+
+ /* Iterate all threads of the task */
+ do {
+ comm = thread_list - KERN_MEMBER_OFF(task_struct, thread_node) +
+ KERN_MEMBER_OFF(task_struct, comm);
+
+ if (!update_filter_info_raw(comm, 'X', size)) {
+ ERRMSG("Failed update filter info!\n");
+ goto out;
+ }
+
+ thread_list = next_list(thread_list);
+ } while (thread_list != thread_head);
+
+ task_list = next_list(task_list);
+ } while (task_list != init_task + KERN_MEMBER_OFF(task_struct, tasks));
+
+ return true;
+out:
+ return false;
+}
+
+void extension_init(void)
+{
+ if (!erase_task_struct_comm()) {
+ ERRMSG("erase_sample.so: erase fail!\n");
+ goto out;
+ }
+ MSG("erase_sample.so: erase success!\n");
+out:
+ return;
+}
+
+__attribute__((destructor))
+void extension_cleanup(void) { }
+
--
2.47.0
More information about the kexec
mailing list