Uprobe: fix NULL dereference on x86 94/100294/3 SRR_20161209
authorAlexander Aksenov <a.aksenov@samsung.com>
Fri, 25 Nov 2016 16:02:42 +0000 (19:02 +0300)
committerDmitry Kovalenko <d.kovalenko@samsung.com>
Tue, 6 Dec 2016 07:22:30 +0000 (23:22 -0800)
When uprobe_handler_part2() is called, it dereferences
pre_handler callback without any check, but
uprobe_handler_part2() is called itself from
uprobe_handler_atomic() when pre_handler is NULL.

Change-Id: Ia4cdbdc20c50aa3d891c790eea3545da06506f47
Signed-off-by: Alexander Aksenov <a.aksenov@samsung.com>
uprobe/arch/x86/swap-asm/swap_uprobes.c

index 99308bc..28de890 100644 (file)
@@ -549,7 +549,7 @@ static int uprobe_handler_retprobe(struct uprobe *p, struct pt_regs *regs)
 
 static int uprobe_handler_part2(struct uprobe *p, struct pt_regs *regs)
 {
-       if (!p->pre_handler(p, regs)) {
+       if (p->pre_handler && !p->pre_handler(p, regs)) {
                prepare_tramp(p, regs);
                if (p->ainsn.boostable == 1 && !p->post_handler)
                        goto exit_and_put_up;