Currently clang ignores the "kprintf" format attribute. I've got a fix for that, but with that fix it complains about the code fixed in the diff below.
Now our manual page says: FORMAT OPTIONS The kernel functions don't support as many formatting specifiers as their user space counterparts. In addition to the floating point formatting specifiers, the following integer type specifiers are not supported: %hh Argument of char type. This format specifier is accepted by the kernel but will be handled as %h. So as far as the kernel is concerned, this change is a no-op. ok? P.S. While printing as a short is technically incorrect, it works because the arguments are unsigned and promoted to int. Index: subr_disk.c =================================================================== RCS file: /cvs/src/sys/kern/subr_disk.c,v retrieving revision 1.230 diff -u -p -r1.230 subr_disk.c --- subr_disk.c 4 May 2017 22:47:27 -0000 1.230 +++ subr_disk.c 3 Aug 2017 17:38:32 -0000 @@ -1864,7 +1864,7 @@ duid_format(u_char *duid) static char duid_str[17]; snprintf(duid_str, sizeof(duid_str), - "%02hx%02hx%02hx%02hx%02hx%02hx%02hx%02hx", + "%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx", duid[0], duid[1], duid[2], duid[3], duid[4], duid[5], duid[6], duid[7]);