diff options
author | Kees Cook <keescook@chromium.org> | 2020-03-05 10:03:47 +0300 |
---|---|---|
committer | Jonathan Corbet <corbet@lwn.net> | 2020-03-10 20:19:16 +0300 |
commit | d8401f504b49c71280e504e41b3b56876094f081 (patch) | |
tree | 788c7fb20a953a84a5337d31e5e764966191904d /Documentation/process/deprecated.rst | |
parent | d442bbca36751a4c791a7559cd249f5306f5a23f (diff) | |
download | linux-d8401f504b49c71280e504e41b3b56876094f081.tar.xz |
docs: deprecated.rst: Add %p to the list
Once in a while %p usage comes up, and I've needed to have a reference
to point people to. Add %p details to deprecated.rst.
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/202003042301.F844A8C0EC@keescook
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Diffstat (limited to 'Documentation/process/deprecated.rst')
-rw-r--r-- | Documentation/process/deprecated.rst | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/Documentation/process/deprecated.rst b/Documentation/process/deprecated.rst index 179f2a5625a0..7160a449e6c6 100644 --- a/Documentation/process/deprecated.rst +++ b/Documentation/process/deprecated.rst @@ -109,6 +109,28 @@ the given limit of bytes to copy. This is inefficient and can lead to linear read overflows if a source string is not NUL-terminated. The safe replacement is :c:func:`strscpy`. +%p format specifier +------------------- +Traditionally, using "%p" in format strings would lead to regular address +exposure flaws in dmesg, proc, sysfs, etc. Instead of leaving these to +be exploitable, all "%p" uses in the kernel are being printed as a hashed +value, rendering them unusable for addressing. New uses of "%p" should not +be added to the kernel. For text addresses, using "%pS" is likely better, +as it produces the more useful symbol name instead. For nearly everything +else, just do not add "%p" at all. + +Paraphrasing Linus's current `guidance <https://lore.kernel.org/lkml/CA+55aFwQEd_d40g4mUCSsVRZzrFPUJt74vc6PPpb675hYNXcKw@mail.gmail.com/>`_: + +- If the hashed "%p" value is pointless, ask yourself whether the pointer + itself is important. Maybe it should be removed entirely? +- If you really think the true pointer value is important, why is some + system state or user privilege level considered "special"? If you think + you can justify it (in comments and commit log) well enough to stand + up to Linus's scrutiny, maybe you can use "%px", along with making sure + you have sensible permissions. + +And finally, know that a toggle for "%p" hashing will `not be accepted <https://lore.kernel.org/lkml/CA+55aFwieC1-nAs+NFq9RTwaR8ef9hWa4MjNBWL41F-8wM49eA@mail.gmail.com/>`_. + Variable Length Arrays (VLAs) ----------------------------- Using stack VLAs produces much worse machine code than statically |