• Petr Mladek's avatar
    vsprintf: Consistent %pK handling for kptr_restrict == 0 · 1ac2f978
    Petr Mladek authored
    restricted_pointer() pretends that it prints the address when kptr_restrict
    is set to zero. But it is never called in this situation. Instead,
    pointer() falls back to ptr_to_id() and hashes the pointer.
    
    This patch removes the potential confusion. klp_restrict is checked only
    in restricted_pointer().
    
    It actually fixes a small race when the address might get printed unhashed:
    
    CPU0                            CPU1
    
    pointer()
      if (!kptr_restrict)
         /* for example set to 2 */
      restricted_pointer()
    				/* echo 0 >/proc/sys/kernel/kptr_restrict */
    				proc_dointvec_minmax_sysadmin()
    				  klpr_restrict = 0;
        switch(kptr_restrict)
          case 0:
    	break:
    
        number()
    
    Fixes: ef0010a3 ("vsprintf: don't use 'restricted_pointer()' when not restricting")
    Link: http://lkml.kernel.org/r/20190417115350.20479-3-pmladek@suse.com
    To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    To: Rasmus Villemoes <linux@rasmusvillemoes.dk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: "Tobin C . Harding" <me@tobin.cc>
    Cc: Joe Perches <joe@perches.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Michal Hocko <mhocko@suse.cz>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
    Cc: linux-kernel@vger.kernel.org
    Cc: Kees Cook <keescook@chromium.org>
    Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    Reviewed-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    Reviewed-by: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    1ac2f978
vsprintf.c 76.5 KB