lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Fri,  4 Sep 2020 19:00:24 +0900
From:   Haesung Kim <matia.kim@....com>
To:     jirislaby@...nel.org, mark.rutland@....com,
        akpm@...ux-foundation.org, mingo@...nel.org, geert@...ux-m68k.org
Cc:     linux-kernel@...r.kernel.org, Haesung Kim <matia.kim@....com>
Subject: [PATCH] stacktrace: print real address of trace entries

If function is marked as static and compiler decies to lnline function
with or without inline keyword, the function has no symbol.
We just know symbol located near the address of the inline function
by %pS type that shows symbol and offset. But we don't know function
name.
The real address let us extract the function name and location of
source code by debugging tools such as addr2line. This is helpful to
debug.

Signed-off-by: Haesung Kim <matia.kim@....com>
---
 kernel/stacktrace.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/kernel/stacktrace.c b/kernel/stacktrace.c
index 946f44a..b7168c5 100644
--- a/kernel/stacktrace.c
+++ b/kernel/stacktrace.c
@@ -24,12 +24,15 @@ void stack_trace_print(const unsigned long *entries, unsigned int nr_entries,
 		       int spaces)
 {
 	unsigned int i;
+	unsigned long ip;
 
 	if (WARN_ON(!entries))
 		return;
 
 	for (i = 0; i < nr_entries; i++)
-		printk("%*c%pS\n", 1 + spaces, ' ', (void *)entries[i]);
+		ip = entries[i];
+		printk("%*c[<%px>] %pS\n",
+			1 + spaces, ' ', (void *) ip, (void *) ip);
 }
 EXPORT_SYMBOL_GPL(stack_trace_print);
 
@@ -47,13 +50,15 @@ int stack_trace_snprint(char *buf, size_t size, const unsigned long *entries,
 			unsigned int nr_entries, int spaces)
 {
 	unsigned int generated, i, total = 0;
+	unsigned long ip;
 
 	if (WARN_ON(!entries))
 		return 0;
 
 	for (i = 0; i < nr_entries && size; i++) {
-		generated = snprintf(buf, size, "%*c%pS\n", 1 + spaces, ' ',
-				     (void *)entries[i]);
+		ip = entries[i];
+		generated = snprintf(buf, size, "%*c[<%px>] %pS\n",
+				     1 + spaces, ' ', (void *) ip, (void *) ip);
 
 		total += generated;
 		if (generated >= size) {
-- 
2.7.4

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ