vsprintf: neaten %pK kptr_restrict, save a bit of code space
authorJoe Perches <joe@perches.com>
Tue, 22 Mar 2011 23:34:19 +0000 (16:34 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 Mar 2011 00:44:12 +0000 (17:44 -0700)
If kptr restrictions are on, just set the passed pointer to NULL.

$ size lib/vsprintf.o.*
   text    data     bss     dec     hex filename
   8247       4       2    8253    203d lib/vsprintf.o.new
   8282       4       2    8288    2060 lib/vsprintf.o.old

Signed-off-by: Joe Perches <joe@perches.com>
Cc: Dan Rosenberg <drosenberg@vsecurity.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
lib/vsprintf.c

index d3023df..070d134 100644 (file)
@@ -1047,16 +1047,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
                        if (spec.field_width == -1)
                                spec.field_width = 2 * sizeof(void *);
                        return string(buf, end, "pK-error", spec);
-               } else if ((kptr_restrict == 0) ||
-                        (kptr_restrict == 1 &&
-                         has_capability_noaudit(current, CAP_SYSLOG)))
-                       break;
-
-               if (spec.field_width == -1) {
-                       spec.field_width = 2 * sizeof(void *);
-                       spec.flags |= ZEROPAD;
                }
-               return number(buf, end, 0, spec);
+               if (!((kptr_restrict == 0) ||
+                     (kptr_restrict == 1 &&
+                      has_capability_noaudit(current, CAP_SYSLOG))))
+                       ptr = NULL;
+               break;
        }
        spec.flags |= SMALL;
        if (spec.field_width == -1) {