#include <linux/string_helpers.h>
 #include "kstrtox.h"
 
+/* Disable pointer hashing if requested */
+bool no_hash_pointers __ro_after_init;
+EXPORT_SYMBOL_GPL(no_hash_pointers);
+
 static noinline unsigned long long simple_strntoull(const char *startp, size_t max_chars, char **endp, unsigned int base)
 {
        const char *cp;
        return pointer_string(buf, end, (const void *)hashval, spec);
 }
 
+static char *default_pointer(char *buf, char *end, const void *ptr,
+                            struct printf_spec spec)
+{
+       /*
+        * default is to _not_ leak addresses, so hash before printing,
+        * unless no_hash_pointers is specified on the command line.
+        */
+       if (unlikely(no_hash_pointers))
+               return pointer_string(buf, end, ptr, spec);
+
+       return ptr_to_id(buf, end, ptr, spec);
+}
+
 int kptr_restrict __read_mostly;
 
 static noinline_for_stack
        switch (kptr_restrict) {
        case 0:
                /* Handle as %p, hash and do _not_ leak addresses. */
-               return ptr_to_id(buf, end, ptr, spec);
+               return default_pointer(buf, end, ptr, spec);
        case 1: {
                const struct cred *cred;
 
        return widen_string(buf, buf - buf_start, end, spec);
 }
 
-/* Disable pointer hashing if requested */
-bool no_hash_pointers __ro_after_init;
-EXPORT_SYMBOL_GPL(no_hash_pointers);
-
 int __init no_hash_pointers_enable(char *str)
 {
        if (no_hash_pointers)
        case 'e':
                /* %pe with a non-ERR_PTR gets treated as plain %p */
                if (!IS_ERR(ptr))
-                       break;
+                       return default_pointer(buf, end, ptr, spec);
                return err_ptr(buf, end, ptr, spec);
        case 'u':
        case 'k':
                default:
                        return error_string(buf, end, "(einval)", spec);
                }
+       default:
+               return default_pointer(buf, end, ptr, spec);
        }
-
-       /*
-        * default is to _not_ leak addresses, so hash before printing,
-        * unless no_hash_pointers is specified on the command line.
-        */
-       if (unlikely(no_hash_pointers))
-               return pointer_string(buf, end, ptr, spec);
-       else
-               return ptr_to_id(buf, end, ptr, spec);
 }
 
 /*