From c6300ccf942c0f555a0d9d2fe1e469b65ce14cc5 Mon Sep 17 00:00:00 2001 From: weishu Date: Wed, 14 Dec 2022 16:26:43 +0700 Subject: [PATCH] kernel: fix memory leaks and x86_64 args --- kernel/arch.h | 1 - kernel/sucompat.c | 10 ++++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/kernel/arch.h b/kernel/arch.h index e92724e7..4e341ae7 100644 --- a/kernel/arch.h +++ b/kernel/arch.h @@ -4,7 +4,6 @@ #if defined(__aarch64__) -#define __PT_REGS_CAST(x) ((const struct user_pt_regs *)(x)) #define __PT_PARM1_REG regs[0] #define __PT_PARM2_REG regs[1] #define __PT_PARM3_REG regs[2] diff --git a/kernel/sucompat.c b/kernel/sucompat.c index 534bfb0b..88f7423f 100644 --- a/kernel/sucompat.c +++ b/kernel/sucompat.c @@ -54,9 +54,11 @@ static int faccessat_handler_pre(struct kprobe *p, struct pt_regs *regs) { } if (!memcmp(filename->name, su, sizeof(su))) { pr_info("faccessat su->sh!\n"); - regs->regs[1] = sh_user_path(); + PT_REGS_PARM2(regs) = sh_user_path(); } + putname(filename); + return 0; } @@ -76,9 +78,11 @@ static int newfstatat_handler_pre(struct kprobe *p, struct pt_regs *regs) { } if (!memcmp(filename->name, su, sizeof(su))) { pr_info("newfstatat su->sh!\n"); - regs->regs[1] = sh_user_path(); + PT_REGS_PARM2(regs) = sh_user_path(); } + putname(filename); + return 0; } @@ -104,6 +108,8 @@ static int execve_handler_pre(struct kprobe *p, struct pt_regs *regs) { escape_to_root(false); } + putname(filename); + return 0; }