Skip to content

Commit 1c85feb

Browse files
committed
arm64 uses compat execve when running arm32 binaries
1 parent 6a9968e commit 1c85feb

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

dwarf.c

+12
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#define HANDLER_BUF_SIZE 256
1414

1515
static struct kprobe execve_probe;
16+
static struct kprobe compat_execve_probe;
1617

1718
/*
1819
* function declarations
@@ -204,24 +205,35 @@ static int __init dwarf_init(void) {
204205
disable_selinux();
205206

206207
printk(KERN_INFO "dwarf -> sys execve: 0x%p", (void *) kallsyms_lookup_name("SyS_execve"));
208+
printk(KERN_INFO "dwarf -> compat sys execve: 0x%p", (void *) kallsyms_lookup_name("compat_SyS_execve"));
207209

208210
execve_probe.pre_handler = handler_pre;
209211
execve_probe.addr = (kprobe_opcode_t *) kallsyms_lookup_name("SyS_execve");
212+
compat_execve_probe.pre_handler = handler_pre;
213+
compat_execve_probe.addr = (kprobe_opcode_t *) kallsyms_lookup_name("compat_SyS_execve");
210214

211215
ret = register_kprobe(&execve_probe);
212216
if (ret < 0) {
213217
printk(KERN_INFO "dwarf -> cannot register probe on execve, returned %d\n", ret);
214218
return ret;
215219
}
216220

221+
ret = register_kprobe(&compat_execve_probe);
222+
if (ret < 0) {
223+
printk(KERN_INFO "dwarf -> cannot register probe on compat execve, returned %d\n", ret);
224+
//return ret;
225+
}
226+
217227
printk(KERN_INFO "dwarf -> planted execve kprobe at %p\n", execve_probe.addr);
218228
return 0;
219229
}
220230

221231

222232
static void __exit dwarf_end(void) {
223233
unregister_kprobe(&execve_probe);
234+
unregister_kprobe(&compat_execve_probe);
224235
printk(KERN_INFO "dwarf -> kprobe at %p unregistered\n", execve_probe.addr);
236+
printk(KERN_INFO "dwarf -> kprobe at %p unregistered\n", compat_execve_probe.addr);
225237
}
226238

227239
module_init(dwarf_init);

0 commit comments

Comments
 (0)