]> git.baikalelectronics.ru Git - kernel.git/commitdiff
lib/vsprintf: Hash legacy clock addresses
authorGeert Uytterhoeven <geert+renesas@glider.be>
Thu, 11 Oct 2018 08:42:48 +0000 (10:42 +0200)
committerPetr Mladek <pmladek@suse.com>
Fri, 12 Oct 2018 09:24:41 +0000 (11:24 +0200)
On platforms using the Common Clock Framework, "%pC" prints the clock's
name. On legacy platforms, it prints the unhashed clock's address,
potentially leaking sensitive information regarding the kernel layout in
memory.

Avoid this leak by printing the hashed address instead.  To distinguish
between clocks, a 32-bit unique identifier is as good as an actual
pointer value.

Fixes: 7f32ed5e940bb53e ("printk: hash addresses printed with %p")
Link: http://lkml.kernel.org/r/20181011084249.4520-3-geert+renesas@glider.be
To: "Tobin C . Harding" <me@tobin.cc>
To: Andrew Morton <akpm@linux-foundation.org>
To: Jonathan Corbet <corbet@lwn.net>
Cc: linux-doc@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Documentation/core-api/printk-formats.rst
lib/vsprintf.c

index 25dc591cb1108790229e18e33da2291eb0317c74..d39798c2558500d5df57544409f4a97d75592453 100644 (file)
@@ -420,9 +420,8 @@ struct clk
        %pC     pll1
        %pCn    pll1
 
-For printing struct clk structures. %pC and %pCn print the name
-(Common Clock Framework) or address (legacy clock framework) of the
-structure.
+For printing struct clk structures. %pC and %pCn print the name of the clock
+(Common Clock Framework) or a unique 32-bit ID (legacy clock framework).
 
 Passed by reference.
 
index 94940ba3a3bcdaa3f52b31119491ad4ab706d231..fee87b038eadf487e9a0be627935a1b1a2ccad85 100644 (file)
@@ -1563,7 +1563,7 @@ char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
 #ifdef CONFIG_COMMON_CLK
                return string(buf, end, __clk_get_name(clk), spec);
 #else
-               return special_hex_number(buf, end, (unsigned long)clk, sizeof(unsigned long));
+               return ptr_to_id(buf, end, clk, spec);
 #endif
        }
 }