printk: hash addresses printed with %p
authorTobin C. Harding <me@tobin.cc>
Wed, 1 Nov 2017 04:32:23 +0000 (15:32 +1100)
committerTobin C. Harding <me@tobin.cc>
Wed, 29 Nov 2017 01:09:02 +0000 (12:09 +1100)
commitad67b74d2469d9b82aaa572d76474c95bc484d57
treefb0ce583607629e6b5da2842f98febf831ab4c87
parent57e734423adda83f3b05505875343284efe3b39c
printk: hash addresses printed with %p

Currently there exist approximately 14 000 places in the kernel where
addresses are being printed using an unadorned %p. This potentially
leaks sensitive information regarding the Kernel layout in memory. Many
of these calls are stale, instead of fixing every call lets hash the
address by default before printing. This will of course break some
users, forcing code printing needed addresses to be updated.

Code that _really_ needs the address will soon be able to use the new
printk specifier %px to print the address.

For what it's worth, usage of unadorned %p can be broken down as
follows (thanks to Joe Perches).

$ git grep -E '%p[^A-Za-z0-9]' | cut -f1 -d"/" | sort | uniq -c
   1084 arch
     20 block
     10 crypto
     32 Documentation
   8121 drivers
   1221 fs
    143 include
    101 kernel
     69 lib
    100 mm
   1510 net
     40 samples
      7 scripts
     11 security
    166 sound
    152 tools
      2 virt

Add function ptr_to_id() to map an address to a 32 bit unique
identifier. Hash any unadorned usage of specifier %p and any malformed
specifiers.

Signed-off-by: Tobin C. Harding <me@tobin.cc>
Documentation/printk-formats.txt
lib/test_printf.c
lib/vsprintf.c