1========================================= 2How to get printk format specifiers right 3========================================= 4 5.. _printk-specifiers: 6 7:Author: Randy Dunlap <rdunlap@infradead.org> 8:Author: Andrew Murray <amurray@mpc-data.co.uk> 9 10 11Integer types 12============= 13 14:: 15 16 If variable is of Type, use printk format specifier: 17 ------------------------------------------------------------ 18 char %d or %x 19 unsigned char %u or %x 20 short int %d or %x 21 unsigned short int %u or %x 22 int %d or %x 23 unsigned int %u or %x 24 long %ld or %lx 25 unsigned long %lu or %lx 26 long long %lld or %llx 27 unsigned long long %llu or %llx 28 size_t %zu or %zx 29 ssize_t %zd or %zx 30 s8 %d or %x 31 u8 %u or %x 32 s16 %d or %x 33 u16 %u or %x 34 s32 %d or %x 35 u32 %u or %x 36 s64 %lld or %llx 37 u64 %llu or %llx 38 39 40If <type> is architecture-dependent for its size (e.g., cycles_t, tcflag_t) or 41is dependent on a config option for its size (e.g., blk_status_t), use a format 42specifier of its largest possible type and explicitly cast to it. 43 44Example:: 45 46 printk("test: latency: %llu cycles\n", (unsigned long long)time); 47 48Reminder: sizeof() returns type size_t. 49 50The kernel's printf does not support %n. Floating point formats (%e, %f, 51%g, %a) are also not recognized, for obvious reasons. Use of any 52unsupported specifier or length qualifier results in a WARN and early 53return from vsnprintf(). 54 55Pointer types 56============= 57 58A raw pointer value may be printed with %p which will hash the address 59before printing. The kernel also supports extended specifiers for printing 60pointers of different types. 61 62Some of the extended specifiers print the data on the given address instead 63of printing the address itself. In this case, the following error messages 64might be printed instead of the unreachable information:: 65 66 (null) data on plain NULL address 67 (efault) data on invalid address 68 (einval) invalid data on a valid address 69 70Plain Pointers 71-------------- 72 73:: 74 75 %p abcdef12 or 00000000abcdef12 76 77Pointers printed without a specifier extension (i.e unadorned %p) are 78hashed to prevent leaking information about the kernel memory layout. This 79has the added benefit of providing a unique identifier. On 64-bit machines 80the first 32 bits are zeroed. The kernel will print ``(ptrval)`` until it 81gathers enough entropy. 82 83When possible, use specialised modifiers such as %pS or %pB (described below) 84to avoid the need of providing an unhashed address that has to be interpreted 85post-hoc. If not possible, and the aim of printing the address is to provide 86more information for debugging, use %p and boot the kernel with the 87``no_hash_pointers`` parameter during debugging, which will print all %p 88addresses unmodified. If you *really* always want the unmodified address, see 89%px below. 90 91If (and only if) you are printing addresses as a content of a virtual file in 92e.g. procfs or sysfs (using e.g. seq_printf(), not printk()) read by a 93userspace process, use the %pK modifier described below instead of %p or %px. 94 95Error Pointers 96-------------- 97 98:: 99 100 %pe -ENOSPC 101 102For printing error pointers (i.e. a pointer for which IS_ERR() is true) 103as a symbolic error name. Error values for which no symbolic name is 104known are printed in decimal, while a non-ERR_PTR passed as the 105argument to %pe gets treated as ordinary %p. 106 107Symbols/Function Pointers 108------------------------- 109 110:: 111 112 %pS versatile_init+0x0/0x110 113 %ps versatile_init 114 %pSR versatile_init+0x9/0x110 115 (with __builtin_extract_return_addr() translation) 116 %pB prev_fn_of_versatile_init+0x88/0x88 117 118 119The ``S`` and ``s`` specifiers are used for printing a pointer in symbolic 120format. They result in the symbol name with (S) or without (s) 121offsets. If KALLSYMS are disabled then the symbol address is printed instead. 122 123The ``B`` specifier results in the symbol name with offsets and should be 124used when printing stack backtraces. The specifier takes into 125consideration the effect of compiler optimisations which may occur 126when tail-calls are used and marked with the noreturn GCC attribute. 127 128If the pointer is within a module, the module name and optionally build ID is 129printed after the symbol name with an extra ``b`` appended to the end of the 130specifier. 131 132:: 133 134 %pS versatile_init+0x0/0x110 [module_name] 135 %pSb versatile_init+0x0/0x110 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] 136 %pSRb versatile_init+0x9/0x110 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] 137 (with __builtin_extract_return_addr() translation) 138 %pBb prev_fn_of_versatile_init+0x88/0x88 [module_name ed5019fdf5e53be37cb1ba7899292d7e143b259e] 139 140Probed Pointers from BPF / tracing 141---------------------------------- 142 143:: 144 145 %pks kernel string 146 %pus user string 147 148The ``k`` and ``u`` specifiers are used for printing prior probed memory from 149either kernel memory (k) or user memory (u). The subsequent ``s`` specifier 150results in printing a string. For direct use in regular vsnprintf() the (k) 151and (u) annotation is ignored, however, when used out of BPF's bpf_trace_printk(), 152for example, it reads the memory it is pointing to without faulting. 153 154Kernel Pointers 155--------------- 156 157:: 158 159 %pK 01234567 or 0123456789abcdef 160 161For printing kernel pointers which should be hidden from unprivileged 162users. The behaviour of %pK depends on the kptr_restrict sysctl - see 163Documentation/admin-guide/sysctl/kernel.rst for more details. 164 165This modifier is *only* intended when producing content of a file read by 166userspace from e.g. procfs or sysfs, not for dmesg. Please refer to the 167section about %p above for discussion about how to manage hashing pointers 168in printk(). 169 170Unmodified Addresses 171-------------------- 172 173:: 174 175 %px 01234567 or 0123456789abcdef 176 177For printing pointers when you *really* want to print the address. Please 178consider whether or not you are leaking sensitive information about the 179kernel memory layout before printing pointers with %px. %px is functionally 180equivalent to %lx (or %lu). %px is preferred because it is more uniquely 181grep'able. If in the future we need to modify the way the kernel handles 182printing pointers we will be better equipped to find the call sites. 183 184Before using %px, consider if using %p is sufficient together with enabling the 185``no_hash_pointers`` kernel parameter during debugging sessions (see the %p 186description above). One valid scenario for %px might be printing information 187immediately before a panic, which prevents any sensitive information to be 188exploited anyway, and with %px there would be no need to reproduce the panic 189with no_hash_pointers. 190 191Pointer Differences 192------------------- 193 194:: 195 196 %td 2560 197 %tx a00 198 199For printing the pointer differences, use the %t modifier for ptrdiff_t. 200 201Example:: 202 203 printk("test: difference between pointers: %td\n", ptr2 - ptr1); 204 205Struct Resources 206---------------- 207 208:: 209 210 %pr [mem 0x60000000-0x6fffffff flags 0x2200] or 211 [mem 0x0000000060000000-0x000000006fffffff flags 0x2200] 212 %pR [mem 0x60000000-0x6fffffff pref] or 213 [mem 0x0000000060000000-0x000000006fffffff pref] 214 215For printing struct resources. The ``R`` and ``r`` specifiers result in a 216printed resource with (R) or without (r) a decoded flags member. 217 218Passed by reference. 219 220Physical address types phys_addr_t 221---------------------------------- 222 223:: 224 225 %pa[p] 0x01234567 or 0x0123456789abcdef 226 227For printing a phys_addr_t type (and its derivatives, such as 228resource_size_t) which can vary based on build options, regardless of the 229width of the CPU data path. 230 231Passed by reference. 232 233DMA address types dma_addr_t 234---------------------------- 235 236:: 237 238 %pad 0x01234567 or 0x0123456789abcdef 239 240For printing a dma_addr_t type which can vary based on build options, 241regardless of the width of the CPU data path. 242 243Passed by reference. 244 245Raw buffer as an escaped string 246------------------------------- 247 248:: 249 250 %*pE[achnops] 251 252For printing raw buffer as an escaped string. For the following buffer:: 253 254 1b 62 20 5c 43 07 22 90 0d 5d 255 256A few examples show how the conversion would be done (excluding surrounding 257quotes):: 258 259 %*pE "\eb \C\a"\220\r]" 260 %*pEhp "\x1bb \C\x07"\x90\x0d]" 261 %*pEa "\e\142\040\\\103\a\042\220\r\135" 262 263The conversion rules are applied according to an optional combination 264of flags (see :c:func:`string_escape_mem` kernel documentation for the 265details): 266 267 - a - ESCAPE_ANY 268 - c - ESCAPE_SPECIAL 269 - h - ESCAPE_HEX 270 - n - ESCAPE_NULL 271 - o - ESCAPE_OCTAL 272 - p - ESCAPE_NP 273 - s - ESCAPE_SPACE 274 275By default ESCAPE_ANY_NP is used. 276 277ESCAPE_ANY_NP is the sane choice for many cases, in particularly for 278printing SSIDs. 279 280If field width is omitted then 1 byte only will be escaped. 281 282Raw buffer as a hex string 283-------------------------- 284 285:: 286 287 %*ph 00 01 02 ... 3f 288 %*phC 00:01:02: ... :3f 289 %*phD 00-01-02- ... -3f 290 %*phN 000102 ... 3f 291 292For printing small buffers (up to 64 bytes long) as a hex string with a 293certain separator. For larger buffers consider using 294:c:func:`print_hex_dump`. 295 296MAC/FDDI addresses 297------------------ 298 299:: 300 301 %pM 00:01:02:03:04:05 302 %pMR 05:04:03:02:01:00 303 %pMF 00-01-02-03-04-05 304 %pm 000102030405 305 %pmR 050403020100 306 307For printing 6-byte MAC/FDDI addresses in hex notation. The ``M`` and ``m`` 308specifiers result in a printed address with (M) or without (m) byte 309separators. The default byte separator is the colon (:). 310 311Where FDDI addresses are concerned the ``F`` specifier can be used after 312the ``M`` specifier to use dash (-) separators instead of the default 313separator. 314 315For Bluetooth addresses the ``R`` specifier shall be used after the ``M`` 316specifier to use reversed byte order suitable for visual interpretation 317of Bluetooth addresses which are in the little endian order. 318 319Passed by reference. 320 321IPv4 addresses 322-------------- 323 324:: 325 326 %pI4 1.2.3.4 327 %pi4 001.002.003.004 328 %p[Ii]4[hnbl] 329 330For printing IPv4 dot-separated decimal addresses. The ``I4`` and ``i4`` 331specifiers result in a printed address with (i4) or without (I4) leading 332zeros. 333 334The additional ``h``, ``n``, ``b``, and ``l`` specifiers are used to specify 335host, network, big or little endian order addresses respectively. Where 336no specifier is provided the default network/big endian order is used. 337 338Passed by reference. 339 340IPv6 addresses 341-------------- 342 343:: 344 345 %pI6 0001:0002:0003:0004:0005:0006:0007:0008 346 %pi6 00010002000300040005000600070008 347 %pI6c 1:2:3:4:5:6:7:8 348 349For printing IPv6 network-order 16-bit hex addresses. The ``I6`` and ``i6`` 350specifiers result in a printed address with (I6) or without (i6) 351colon-separators. Leading zeros are always used. 352 353The additional ``c`` specifier can be used with the ``I`` specifier to 354print a compressed IPv6 address as described by 355https://tools.ietf.org/html/rfc5952 356 357Passed by reference. 358 359IPv4/IPv6 addresses (generic, with port, flowinfo, scope) 360--------------------------------------------------------- 361 362:: 363 364 %pIS 1.2.3.4 or 0001:0002:0003:0004:0005:0006:0007:0008 365 %piS 001.002.003.004 or 00010002000300040005000600070008 366 %pISc 1.2.3.4 or 1:2:3:4:5:6:7:8 367 %pISpc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345 368 %p[Ii]S[pfschnbl] 369 370For printing an IP address without the need to distinguish whether it's of 371type AF_INET or AF_INET6. A pointer to a valid struct sockaddr, 372specified through ``IS`` or ``iS``, can be passed to this format specifier. 373 374The additional ``p``, ``f``, and ``s`` specifiers are used to specify port 375(IPv4, IPv6), flowinfo (IPv6) and scope (IPv6). Ports have a ``:`` prefix, 376flowinfo a ``/`` and scope a ``%``, each followed by the actual value. 377 378In case of an IPv6 address the compressed IPv6 address as described by 379https://tools.ietf.org/html/rfc5952 is being used if the additional 380specifier ``c`` is given. The IPv6 address is surrounded by ``[``, ``]`` in 381case of additional specifiers ``p``, ``f`` or ``s`` as suggested by 382https://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07 383 384In case of IPv4 addresses, the additional ``h``, ``n``, ``b``, and ``l`` 385specifiers can be used as well and are ignored in case of an IPv6 386address. 387 388Passed by reference. 389 390Further examples:: 391 392 %pISfc 1.2.3.4 or [1:2:3:4:5:6:7:8]/123456789 393 %pISsc 1.2.3.4 or [1:2:3:4:5:6:7:8]%1234567890 394 %pISpfc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345/123456789 395 396UUID/GUID addresses 397------------------- 398 399:: 400 401 %pUb 00010203-0405-0607-0809-0a0b0c0d0e0f 402 %pUB 00010203-0405-0607-0809-0A0B0C0D0E0F 403 %pUl 03020100-0504-0706-0809-0a0b0c0e0e0f 404 %pUL 03020100-0504-0706-0809-0A0B0C0E0E0F 405 406For printing 16-byte UUID/GUIDs addresses. The additional ``l``, ``L``, 407``b`` and ``B`` specifiers are used to specify a little endian order in 408lower (l) or upper case (L) hex notation - and big endian order in lower (b) 409or upper case (B) hex notation. 410 411Where no additional specifiers are used the default big endian 412order with lower case hex notation will be printed. 413 414Passed by reference. 415 416dentry names 417------------ 418 419:: 420 421 %pd{,2,3,4} 422 %pD{,2,3,4} 423 424For printing dentry name; if we race with :c:func:`d_move`, the name might 425be a mix of old and new ones, but it won't oops. %pd dentry is a safer 426equivalent of %s dentry->d_name.name we used to use, %pd<n> prints ``n`` 427last components. %pD does the same thing for struct file. 428 429Passed by reference. 430 431block_device names 432------------------ 433 434:: 435 436 %pg sda, sda1 or loop0p1 437 438For printing name of block_device pointers. 439 440struct va_format 441---------------- 442 443:: 444 445 %pV 446 447For printing struct va_format structures. These contain a format string 448and va_list as follows:: 449 450 struct va_format { 451 const char *fmt; 452 va_list *va; 453 }; 454 455Implements a "recursive vsnprintf". 456 457Do not use this feature without some mechanism to verify the 458correctness of the format string and va_list arguments. 459 460Passed by reference. 461 462Device tree nodes 463----------------- 464 465:: 466 467 %pOF[fnpPcCF] 468 469 470For printing device tree node structures. Default behaviour is 471equivalent to %pOFf. 472 473 - f - device node full_name 474 - n - device node name 475 - p - device node phandle 476 - P - device node path spec (name + @unit) 477 - F - device node flags 478 - c - major compatible string 479 - C - full compatible string 480 481The separator when using multiple arguments is ':' 482 483Examples:: 484 485 %pOF /foo/bar@0 - Node full name 486 %pOFf /foo/bar@0 - Same as above 487 %pOFfp /foo/bar@0:10 - Node full name + phandle 488 %pOFfcF /foo/bar@0:foo,device:--P- - Node full name + 489 major compatible string + 490 node flags 491 D - dynamic 492 d - detached 493 P - Populated 494 B - Populated bus 495 496Passed by reference. 497 498Fwnode handles 499-------------- 500 501:: 502 503 %pfw[fP] 504 505For printing information on fwnode handles. The default is to print the full 506node name, including the path. The modifiers are functionally equivalent to 507%pOF above. 508 509 - f - full name of the node, including the path 510 - P - the name of the node including an address (if there is one) 511 512Examples (ACPI):: 513 514 %pfwf \_SB.PCI0.CIO2.port@1.endpoint@0 - Full node name 515 %pfwP endpoint@0 - Node name 516 517Examples (OF):: 518 519 %pfwf /ocp@68000000/i2c@48072000/camera@10/port/endpoint - Full name 520 %pfwP endpoint - Node name 521 522Time and date 523------------- 524 525:: 526 527 %pt[RT] YYYY-mm-ddTHH:MM:SS 528 %pt[RT]s YYYY-mm-dd HH:MM:SS 529 %pt[RT]d YYYY-mm-dd 530 %pt[RT]t HH:MM:SS 531 %pt[RT][dt][r][s] 532 533For printing date and time as represented by:: 534 535 R struct rtc_time structure 536 T time64_t type 537 538in human readable format. 539 540By default year will be incremented by 1900 and month by 1. 541Use %pt[RT]r (raw) to suppress this behaviour. 542 543The %pt[RT]s (space) will override ISO 8601 separator by using ' ' (space) 544instead of 'T' (Capital T) between date and time. It won't have any effect 545when date or time is omitted. 546 547Passed by reference. 548 549struct clk 550---------- 551 552:: 553 554 %pC pll1 555 %pCn pll1 556 557For printing struct clk structures. %pC and %pCn print the name of the clock 558(Common Clock Framework) or a unique 32-bit ID (legacy clock framework). 559 560Passed by reference. 561 562bitmap and its derivatives such as cpumask and nodemask 563------------------------------------------------------- 564 565:: 566 567 %*pb 0779 568 %*pbl 0,3-6,8-10 569 570For printing bitmap and its derivatives such as cpumask and nodemask, 571%*pb outputs the bitmap with field width as the number of bits and %*pbl 572output the bitmap as range list with field width as the number of bits. 573 574The field width is passed by value, the bitmap is passed by reference. 575Helper macros cpumask_pr_args() and nodemask_pr_args() are available to ease 576printing cpumask and nodemask. 577 578Flags bitfields such as page flags, page_type, gfp_flags 579-------------------------------------------------------- 580 581:: 582 583 %pGp 0x17ffffc0002036(referenced|uptodate|lru|active|private|node=0|zone=2|lastcpupid=0x1fffff) 584 %pGt 0xffffff7f(buddy) 585 %pGg GFP_USER|GFP_DMA32|GFP_NOWARN 586 %pGv read|exec|mayread|maywrite|mayexec|denywrite 587 588For printing flags bitfields as a collection of symbolic constants that 589would construct the value. The type of flags is given by the third 590character. Currently supported are: 591 592 - p - [p]age flags, expects value of type (``unsigned long *``) 593 - t - page [t]ype, expects value of type (``unsigned int *``) 594 - v - [v]ma_flags, expects value of type (``unsigned long *``) 595 - g - [g]fp_flags, expects value of type (``gfp_t *``) 596 597The flag names and print order depends on the particular type. 598 599Note that this format should not be used directly in the 600:c:func:`TP_printk()` part of a tracepoint. Instead, use the show_*_flags() 601functions from <trace/events/mmflags.h>. 602 603Passed by reference. 604 605Network device features 606----------------------- 607 608:: 609 610 %pNF 0x000000000000c000 611 612For printing netdev_features_t. 613 614Passed by reference. 615 616V4L2 and DRM FourCC code (pixel format) 617--------------------------------------- 618 619:: 620 621 %p4cc 622 623Print a FourCC code used by V4L2 or DRM, including format endianness and 624its numerical value as hexadecimal. 625 626Passed by reference. 627 628Examples:: 629 630 %p4cc BG12 little-endian (0x32314742) 631 %p4cc Y10 little-endian (0x20303159) 632 %p4cc NV12 big-endian (0xb231564e) 633 634Rust 635---- 636 637:: 638 639 %pA 640 641Only intended to be used from Rust code to format ``core::fmt::Arguments``. 642Do *not* use it from C. 643 644Thanks 645====== 646 647If you add other %p extensions, please extend <lib/test_printf.c> with 648one or more test cases, if at all feasible. 649 650Thank you for your cooperation and attention. 651