Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756128AbdLOOWE (ORCPT ); Fri, 15 Dec 2017 09:22:04 -0500 Received: from merlin.infradead.org ([205.233.59.134]:45400 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755503AbdLOOWA (ORCPT ); Fri, 15 Dec 2017 09:22:00 -0500 Date: Fri, 15 Dec 2017 15:21:53 +0100 From: Peter Zijlstra To: Thomas-Mich Richter Cc: Arnaldo Carvalho de Melo , Linux Kernel Mailing List , Ingo Molnar , Martin Schwidefsky , Heiko Carstens , Linus Torvalds , mhiramat@kernel.org Subject: Re: Linux 4.15.0-rc3 perf probe/uprobe issue with address randomization Message-ID: <20171215142153.nty3ymz2r2exawes@hirez.programming.kicks-ass.net> References: <8402bed0-bb40-53dc-faf8-bd26f6997de5@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <8402bed0-bb40-53dc-faf8-bd26f6997de5@linux.vnet.ibm.com> User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1591 Lines: 42 On Fri, Dec 15, 2017 at 03:14:37PM +0100, Thomas-Mich Richter wrote: > During debugging of perf probe tool I discovered an issue with > uprobes and address randomization. > > To set a uprobe on a function named inet_pton in libc library, you > obtain the address of the symbol inet_pton using command nm and > then use the following command to set the uprobe: > > # echo "p:probe_libc/inet_pton /usr/lib64/libc-2.26.so:0x142060" > > /sys/kernel/debug/tracing/uprobe_events > > 0x142060 is the address of inet_pton on my system. > This works nicely and the uprobe is usable. > > The issue is with the output: > # cat /sys/kernel/debug/tracing/uprobe_events > p:probe_libc/inet_pton /usr/lib64/libc-2.26.so:0x000000002d0f8952 > # > > The displayed address 0x000000002d0f8952 is wrong, probably > randomized and post processing of this output with the perf > probe tool fails due to this random address: > > # linux/tools/perf/perf probe -l > Failed to find debug information for address 2d0f8952 > probe_libc:inet_pton (on 0x2d0f8952 in /usr/lib64/libc-2.26.so) > # > > So how to fix this (if at all)? > Is replacing %p by %llx in line 612 of file kernel/trace/trace_uprobe.c > seq_printf(m, "0x%p", (void *)tu->offset) > an option? > Or is this broken by design and intention? So recently %p got changed to hash pointers in order to avoid leaking kernel addresses. ad67b74d2469 ("printk: hash addresses printed with %p") I'm not sure what privilidges are required for reading that kprobe state, but I suspect its root only, so changing this to %px might be what is needed.