From d8acb8dacee3fc6d4a9cbba7845f8cc157cc2537 Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Fri, 19 Jun 2015 08:43:14 +0300 Subject: [PATCH] [FIX] NULL pointer dereference when wrong probe type Change-Id: I581a7e56a6dc5a1692d6607ef7aeea277c374234 Signed-off-by: Vyacheslav Cherkashin --- us_manager/sspt/sspt.h | 1 + us_manager/sspt/sspt_page.c | 10 ++-------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/us_manager/sspt/sspt.h b/us_manager/sspt/sspt.h index 6524776..3199ae7 100644 --- a/us_manager/sspt/sspt.h +++ b/us_manager/sspt/sspt.h @@ -58,6 +58,7 @@ static inline int sspt_register_usprobe(struct us_ip *ip) return -EINVAL; } + up->kp.addr = (kprobe_opcode_t *)ip->orig_addr; up->task = ip->page->file->proc->task; up->sm = ip->page->file->proc->sm; diff --git a/us_manager/sspt/sspt_page.c b/us_manager/sspt/sspt_page.c index 40413a2..a701ecf 100644 --- a/us_manager/sspt/sspt_page.c +++ b/us_manager/sspt/sspt_page.c @@ -141,8 +141,6 @@ int sspt_register_page(struct sspt_page *page, struct sspt_file *file) int err = 0; struct us_ip *ip, *n; struct list_head ip_list_tmp; - struct uprobe *up; - unsigned long addr; spin_lock(&page->lock); if (list_empty(&page->ip_list_no_inst)) { @@ -160,12 +158,8 @@ int sspt_register_page(struct sspt_page *page, struct sspt_file *file) spin_unlock(&page->lock); list_for_each_entry_safe(ip, n, &ip_list_tmp, list) { - /* set uprobe address */ - addr = file->vm_start + page->offset + ip->offset; - - ip->orig_addr = addr; - up = probe_info_get_uprobe(ip->info, ip); - up->kp.addr = (kprobe_opcode_t *)addr; + /* set virtual address */ + ip->orig_addr = file->vm_start + page->offset + ip->offset; err = sspt_register_usprobe(ip); if (err) { -- 2.7.4