Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp995606ybt; Fri, 19 Jun 2020 20:59:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyVAKsKqBaNyVf8gGcZVpwQRj3i5cvoax5N9Zw9EL/EM8LY8zNlAO6YJAtPUb953eAv2ypP X-Received: by 2002:a17:906:f189:: with SMTP id gs9mr6337015ejb.203.1592625595826; Fri, 19 Jun 2020 20:59:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592625595; cv=none; d=google.com; s=arc-20160816; b=soyxSMtaRgZT5HsY0qe2H2qCQE2XIxxDBSGa5jtV4lFhXTxkHi86vLk5EDadhoDSap RRmnDkD2F7y5urFntAhmR62TXfQfnoKI0XmY2uoP75vuR35Az1THtOJZL6qxjTEFRIhI MpX0aU3dv/xfqG0kzBm3+LfqUvTwXJr6C660zqBmit7a5DikapzdNosilOV4ZX5HM3VQ mdOTC1m7+uZU1HvxebiVt0wVcZkM+qwOp//CpuqgfHPYZWSPYyvM7k4ZGBnJFHzuKual GDNB7xFv9Nv0jUwkqYgWR2Z93MmpcJ+8Xqt001udRq96koYP7IHi64eM9Hp2Yyv+Hp/b TtQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=pIjJy6dhM/9boOk3WoPzKO2bcMJ1Nf4tBjglnFVXVlk=; b=U1lvYKS/LT9OuBkK0lUOsjlaaviLdnviPiLUKQ/rRpLGVcAhLPKVlQfTF+lraBTsBj 1D6NdOsH+ZpzUN6Q+uR2sOO3WCRDudA+UFyQpMuyb9HupZK174iS2OxT7undKNGRmbMA Ji5oQwLebdLAod3OZiQi0iz6VqB2rV3FI1NfbCWk0cCXi2tIVB9HqUxIAasMB4p1InT4 mfHeI2K1BpgFbU8EiI1gotpYpXwsqBzKN9tCL1wLXpi6NHMuxS0y8OG3nsKhEQW9Voz3 TmJEBygVbzU+mRuRXONi0HV/jcsGMgcSY/e7QsmW8qoJAV5a1NrP/78UFvfhCEp4uKuA tjSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=JvcRZZX1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dd12si5101546ejb.59.2020.06.19.20.59.33; Fri, 19 Jun 2020 20:59:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=JvcRZZX1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2394914AbgFSQbU (ORCPT + 99 others); Fri, 19 Jun 2020 12:31:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:47234 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389652AbgFSOw7 (ORCPT ); Fri, 19 Jun 2020 10:52:59 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B358C21556; Fri, 19 Jun 2020 14:52:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592578379; bh=0V3FvdG4nQLOOIOgNGR1n3/vSMQfS1its0pK4X/69+A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JvcRZZX1Vafq4P0YunLn7xruq6cblM6+Ux6ZyseFW8o1Tg/yWXFc7R9sNuKs7+apc uq5QppIdO167Z8J74lblSiFeN/iixWL0uzP61kAocCAV+m1uXR1vYrr/kRsNmCG3gq D0RgKpuosFaUCqjTD1ThWbtlQ/uABIiHAWtthVBg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Masami Hiramatsu , Arnaldo Carvalho de Melo , Jiri Olsa , Namhyung Kim Subject: [PATCH 4.14 189/190] perf probe: Fix to check blacklist address correctly Date: Fri, 19 Jun 2020 16:33:54 +0200 Message-Id: <20200619141643.302307142@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200619141633.446429600@linuxfoundation.org> References: <20200619141633.446429600@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Masami Hiramatsu commit 80526491c2ca6abc028c0f0dbb0707a1f35fb18a upstream. Fix to check kprobe blacklist address correctly with relocated address by adjusting debuginfo address. Since the address in the debuginfo is same as objdump, it is different from relocated kernel address with KASLR. Thus, 'perf probe' always misses to catch the blacklisted addresses. Without this patch, 'perf probe' can not detect the blacklist addresses on a KASLR enabled kernel. # perf probe kprobe_dispatcher Failed to write event: Invalid argument Error: Failed to add events. # With this patch, it correctly shows the error message. # perf probe kprobe_dispatcher kprobe_dispatcher is blacklisted function, skip it. Probe point 'kprobe_dispatcher' not found. Error: Failed to add events. # Fixes: 9aaf5a5f479b ("perf probe: Check kprobes blacklist when adding new events") Signed-off-by: Masami Hiramatsu Tested-by: Arnaldo Carvalho de Melo Cc: Jiri Olsa Cc: Namhyung Kim Cc: stable@vger.kernel.org Link: http://lore.kernel.org/lkml/158763966411.30755.5882376357738273695.stgit@devnote2 Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: Greg Kroah-Hartman --- tools/perf/util/probe-event.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -122,7 +122,7 @@ static struct symbol *__find_kernel_func return machine__find_kernel_function(host_machine, addr, mapp); } -static struct ref_reloc_sym *kernel_get_ref_reloc_sym(void) +static struct ref_reloc_sym *kernel_get_ref_reloc_sym(struct map **pmap) { /* kmap->ref_reloc_sym should be set if host_machine is initialized */ struct kmap *kmap; @@ -134,6 +134,10 @@ static struct ref_reloc_sym *kernel_get_ kmap = map__kmap(map); if (!kmap) return NULL; + + if (pmap) + *pmap = map; + return kmap->ref_reloc_sym; } @@ -145,7 +149,7 @@ static int kernel_get_symbol_address_by_ struct map *map; /* ref_reloc_sym is just a label. Need a special fix*/ - reloc_sym = kernel_get_ref_reloc_sym(); + reloc_sym = kernel_get_ref_reloc_sym(NULL); if (reloc_sym && strcmp(name, reloc_sym->name) == 0) *addr = (reloc) ? reloc_sym->addr : reloc_sym->unrelocated_addr; else { @@ -764,6 +768,7 @@ post_process_kernel_probe_trace_events(s int ntevs) { struct ref_reloc_sym *reloc_sym; + struct map *map; char *tmp; int i, skipped = 0; @@ -772,7 +777,7 @@ post_process_kernel_probe_trace_events(s return post_process_offline_probe_trace_events(tevs, ntevs, symbol_conf.vmlinux_name); - reloc_sym = kernel_get_ref_reloc_sym(); + reloc_sym = kernel_get_ref_reloc_sym(&map); if (!reloc_sym) { pr_warning("Relocated base symbol is not found!\n"); return -EINVAL; @@ -783,9 +788,13 @@ post_process_kernel_probe_trace_events(s continue; if (tevs[i].point.retprobe && !kretprobe_offset_is_supported()) continue; - /* If we found a wrong one, mark it by NULL symbol */ + /* + * If we found a wrong one, mark it by NULL symbol. + * Since addresses in debuginfo is same as objdump, we need + * to convert it to addresses on memory. + */ if (kprobe_warn_out_range(tevs[i].point.symbol, - tevs[i].point.address)) { + map__objdump_2mem(map, tevs[i].point.address))) { tmp = NULL; skipped++; } else { @@ -2887,7 +2896,7 @@ static int find_probe_trace_events_from_ /* Note that the symbols in the kmodule are not relocated */ if (!pev->uprobes && !pev->target && (!pp->retprobe || kretprobe_offset_is_supported())) { - reloc_sym = kernel_get_ref_reloc_sym(); + reloc_sym = kernel_get_ref_reloc_sym(NULL); if (!reloc_sym) { pr_warning("Relocated base symbol is not found!\n"); ret = -EINVAL;