UPSTREAM: printk: hash addresses printed with %p
authorTobin C. Harding <me@tobin.cc>
Wed, 1 Nov 2017 04:32:23 +0000 (15:32 +1100)
committerAlistair Strachan <astrachan@google.com>
Fri, 29 Mar 2019 04:16:17 +0000 (21:16 -0700)
commitd3ad09e4f77a4b35a60b7bc696379ee42ef3f442
tree1ac3eab7ad1be12ffd54c73fb2e90ac02cae9fec
parent3a8bb21cd5320b612e88acb866fc0570b044041a
UPSTREAM: 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>
(cherry picked from commit ad67b74d2469d9b82aaa572d76474c95bc484d57)
Signed-off-by: Sandeep Patil <sspatil@android.com>
Bug: 78533979
Test: Build and boot cuttlefish
Test: CONFIG_TEST_PRINTF
Change-Id: I9aa3dea0d40a13f5c858ad2253a8a712195ab1d5
Documentation/printk-formats.txt
lib/test_printf.c
lib/vsprintf.c