@@ -122,6 +122,17 @@ uniquely grep'able. If, in the future, we need to modify the way the Kernel
handles printing pointers it will be nice to be able to find the call
sites.
+Zeroed Addresses
+================
+
+::
+
+ %pz 00000000 or 0000000000000000
+
+For printing zeroed addresses. This is useful if you are want to sanitize
+an address but there may be userland tools that depend on the correct width
+of the address for parsing.
+
Struct Resources
================
@@ -1727,6 +1727,19 @@ static char *ptr_to_id(char *buf, char *end, void *ptr, struct printf_spec spec)
return number(buf, end, hashval, spec);
}
+static noinline_for_stack
+char *zero_string(char *buf, char *end, struct printf_spec spec)
+{
+ spec.base = 16;
+ spec.flags |= SMALL;
+ if (spec.field_width == -1) {
+ spec.field_width = 2 * sizeof(void *);
+ spec.flags |= ZEROPAD;
+ }
+
+ return number(buf, end, 0, spec);
+}
+
/*
* Show a '%p' thing. A kernel extension is that the '%p' is followed
* by an extra set of alphanumeric characters that are extended format
@@ -1833,6 +1846,9 @@ static char *ptr_to_id(char *buf, char *end, void *ptr, struct printf_spec spec)
* C full compatible string
*
* - 'x' For printing the address. Equivalent to "%lx".
+ * - 'z' For printing zeroed addresses. This is useful if you are want to
+ * sanitize an address but there may be userland tools that depend on the
+ * correct width of the address for parsing.
*
* ** Please update also Documentation/printk-formats.txt when making changes **
*
@@ -1960,6 +1976,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
}
case 'x':
return pointer_string(buf, end, ptr, spec);
+ case 'z':
+ return zero_string(buf, end, spec);
}
/* default is to _not_ leak addresses, hash before printing */
Currently %pK [at times] zeros addresses. It would be nice to remove %pK entirely. Printing zero addresses is useful if we want to sanitize an address but there may be userland tools that currently rely on the address format (i.e the correct width). Add printk specifier %pz. Signed-off-by: Tobin C. Harding <me@tobin.cc> --- Documentation/printk-formats.txt | 11 +++++++++++ lib/vsprintf.c | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+)