lib/vsprintf: Less restrictive hashed pointer printing

Commit ad67b74d24 ("printk: hash addresses printed with %p") and
Commit ef0010a309 ("vsprintf: don't use 'restricted_pointer()'
when not restricting") effectively removed the ability to display
kernel addresses in the kernel log. While this may be a useful feature
in production builds, it is undesirable when trying to debug.

%px is not a possible alternative, because it is unable to differentiate
between a debug and production build.

Change-Id: I139fae7b8488936d214efdd2b5b807fa1c005467
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
This commit is contained in:
Patrick Daly
2019-06-07 17:00:54 -07:00
parent db92782ead
commit 0585b78e53
2 changed files with 14 additions and 1 deletions

View File

@@ -146,6 +146,15 @@ config DYNAMIC_DEBUG
See Documentation/admin-guide/dynamic-debug-howto.rst for additional
information.
config DEBUG_CONSOLE_UNHASHED_POINTERS
bool "Display unhashed kernel pointers"
depends on DEBUG_KERNEL
help
Pointers %p and %pK are normally hashed prior to being displayed to
prevent leaking kernel addresses. On debug builds, always print
actual pointer values, ignoring the kptr_restrict setting.
Not to be enabled on production builds.
endmenu # "printk and dmesg options"
menu "Compile-time checks and compiler options"

View File

@@ -1940,7 +1940,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
return buf;
}
case 'K':
if (!kptr_restrict)
if (!kptr_restrict ||
IS_ENABLED(CONFIG_DEBUG_CONSOLE_UNHASHED_POINTERS))
break;
return restricted_pointer(buf, end, ptr, spec);
case 'N':
@@ -1972,6 +1973,9 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
return pointer_string(buf, end, ptr, spec);
}
if (IS_ENABLED(CONFIG_DEBUG_CONSOLE_UNHASHED_POINTERS))
return pointer_string(buf, end, ptr, spec);
/* default is to _not_ leak addresses, hash before printing */
return ptr_to_id(buf, end, ptr, spec);
}