1 /* 2 * linux/lib/vsprintf.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7 /* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ 8 /* 9 * Wirzenius wrote this portably, Torvalds fucked it up :-) 10 */ 11 12 /* 13 * Fri Jul 13 2001 Crutcher Dunnavant <crutcher+kernel@datastacks.com> 14 * - changed to provide snprintf and vsnprintf functions 15 * So Feb 1 16:51:32 CET 2004 Juergen Quade <quade@hsnr.de> 16 * - scnprintf and vscnprintf 17 */ 18 19 #include <stdarg.h> 20 #include <linux/clk.h> 21 #include <linux/clk-provider.h> 22 #include <linux/module.h> /* for KSYM_SYMBOL_LEN */ 23 #include <linux/types.h> 24 #include <linux/string.h> 25 #include <linux/ctype.h> 26 #include <linux/kernel.h> 27 #include <linux/kallsyms.h> 28 #include <linux/math64.h> 29 #include <linux/uaccess.h> 30 #include <linux/ioport.h> 31 #include <linux/dcache.h> 32 #include <linux/cred.h> 33 #include <net/addrconf.h> 34 #ifdef CONFIG_BLOCK 35 #include <linux/blkdev.h> 36 #endif 37 38 #include <asm/page.h> /* for PAGE_SIZE */ 39 #include <asm/sections.h> /* for dereference_function_descriptor() */ 40 #include <asm/byteorder.h> /* cpu_to_le16 */ 41 42 #include <linux/string_helpers.h> 43 #include "kstrtox.h" 44 45 /** 46 * simple_strtoull - convert a string to an unsigned long long 47 * @cp: The start of the string 48 * @endp: A pointer to the end of the parsed string will be placed here 49 * @base: The number base to use 50 * 51 * This function is obsolete. Please use kstrtoull instead. 52 */ 53 unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) 54 { 55 unsigned long long result; 56 unsigned int rv; 57 58 cp = _parse_integer_fixup_radix(cp, &base); 59 rv = _parse_integer(cp, base, &result); 60 /* FIXME */ 61 cp += (rv & ~KSTRTOX_OVERFLOW); 62 63 if (endp) 64 *endp = (char *)cp; 65 66 return result; 67 } 68 EXPORT_SYMBOL(simple_strtoull); 69 70 /** 71 * simple_strtoul - convert a string to an unsigned long 72 * @cp: The start of the string 73 * @endp: A pointer to the end of the parsed string will be placed here 74 * @base: The number base to use 75 * 76 * This function is obsolete. Please use kstrtoul instead. 77 */ 78 unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) 79 { 80 return simple_strtoull(cp, endp, base); 81 } 82 EXPORT_SYMBOL(simple_strtoul); 83 84 /** 85 * simple_strtol - convert a string to a signed long 86 * @cp: The start of the string 87 * @endp: A pointer to the end of the parsed string will be placed here 88 * @base: The number base to use 89 * 90 * This function is obsolete. Please use kstrtol instead. 91 */ 92 long simple_strtol(const char *cp, char **endp, unsigned int base) 93 { 94 if (*cp == '-') 95 return -simple_strtoul(cp + 1, endp, base); 96 97 return simple_strtoul(cp, endp, base); 98 } 99 EXPORT_SYMBOL(simple_strtol); 100 101 /** 102 * simple_strtoll - convert a string to a signed long long 103 * @cp: The start of the string 104 * @endp: A pointer to the end of the parsed string will be placed here 105 * @base: The number base to use 106 * 107 * This function is obsolete. Please use kstrtoll instead. 108 */ 109 long long simple_strtoll(const char *cp, char **endp, unsigned int base) 110 { 111 if (*cp == '-') 112 return -simple_strtoull(cp + 1, endp, base); 113 114 return simple_strtoull(cp, endp, base); 115 } 116 EXPORT_SYMBOL(simple_strtoll); 117 118 static noinline_for_stack 119 int skip_atoi(const char **s) 120 { 121 int i = 0; 122 123 do { 124 i = i*10 + *((*s)++) - '0'; 125 } while (isdigit(**s)); 126 127 return i; 128 } 129 130 /* 131 * Decimal conversion is by far the most typical, and is used for 132 * /proc and /sys data. This directly impacts e.g. top performance 133 * with many processes running. We optimize it for speed by emitting 134 * two characters at a time, using a 200 byte lookup table. This 135 * roughly halves the number of multiplications compared to computing 136 * the digits one at a time. Implementation strongly inspired by the 137 * previous version, which in turn used ideas described at 138 * <http://www.cs.uiowa.edu/~jones/bcd/divide.html> (with permission 139 * from the author, Douglas W. Jones). 140 * 141 * It turns out there is precisely one 26 bit fixed-point 142 * approximation a of 64/100 for which x/100 == (x * (u64)a) >> 32 143 * holds for all x in [0, 10^8-1], namely a = 0x28f5c29. The actual 144 * range happens to be somewhat larger (x <= 1073741898), but that's 145 * irrelevant for our purpose. 146 * 147 * For dividing a number in the range [10^4, 10^6-1] by 100, we still 148 * need a 32x32->64 bit multiply, so we simply use the same constant. 149 * 150 * For dividing a number in the range [100, 10^4-1] by 100, there are 151 * several options. The simplest is (x * 0x147b) >> 19, which is valid 152 * for all x <= 43698. 153 */ 154 155 static const u16 decpair[100] = { 156 #define _(x) (__force u16) cpu_to_le16(((x % 10) | ((x / 10) << 8)) + 0x3030) 157 _( 0), _( 1), _( 2), _( 3), _( 4), _( 5), _( 6), _( 7), _( 8), _( 9), 158 _(10), _(11), _(12), _(13), _(14), _(15), _(16), _(17), _(18), _(19), 159 _(20), _(21), _(22), _(23), _(24), _(25), _(26), _(27), _(28), _(29), 160 _(30), _(31), _(32), _(33), _(34), _(35), _(36), _(37), _(38), _(39), 161 _(40), _(41), _(42), _(43), _(44), _(45), _(46), _(47), _(48), _(49), 162 _(50), _(51), _(52), _(53), _(54), _(55), _(56), _(57), _(58), _(59), 163 _(60), _(61), _(62), _(63), _(64), _(65), _(66), _(67), _(68), _(69), 164 _(70), _(71), _(72), _(73), _(74), _(75), _(76), _(77), _(78), _(79), 165 _(80), _(81), _(82), _(83), _(84), _(85), _(86), _(87), _(88), _(89), 166 _(90), _(91), _(92), _(93), _(94), _(95), _(96), _(97), _(98), _(99), 167 #undef _ 168 }; 169 170 /* 171 * This will print a single '0' even if r == 0, since we would 172 * immediately jump to out_r where two 0s would be written but only 173 * one of them accounted for in buf. This is needed by ip4_string 174 * below. All other callers pass a non-zero value of r. 175 */ 176 static noinline_for_stack 177 char *put_dec_trunc8(char *buf, unsigned r) 178 { 179 unsigned q; 180 181 /* 1 <= r < 10^8 */ 182 if (r < 100) 183 goto out_r; 184 185 /* 100 <= r < 10^8 */ 186 q = (r * (u64)0x28f5c29) >> 32; 187 *((u16 *)buf) = decpair[r - 100*q]; 188 buf += 2; 189 190 /* 1 <= q < 10^6 */ 191 if (q < 100) 192 goto out_q; 193 194 /* 100 <= q < 10^6 */ 195 r = (q * (u64)0x28f5c29) >> 32; 196 *((u16 *)buf) = decpair[q - 100*r]; 197 buf += 2; 198 199 /* 1 <= r < 10^4 */ 200 if (r < 100) 201 goto out_r; 202 203 /* 100 <= r < 10^4 */ 204 q = (r * 0x147b) >> 19; 205 *((u16 *)buf) = decpair[r - 100*q]; 206 buf += 2; 207 out_q: 208 /* 1 <= q < 100 */ 209 r = q; 210 out_r: 211 /* 1 <= r < 100 */ 212 *((u16 *)buf) = decpair[r]; 213 buf += r < 10 ? 1 : 2; 214 return buf; 215 } 216 217 #if BITS_PER_LONG == 64 && BITS_PER_LONG_LONG == 64 218 static noinline_for_stack 219 char *put_dec_full8(char *buf, unsigned r) 220 { 221 unsigned q; 222 223 /* 0 <= r < 10^8 */ 224 q = (r * (u64)0x28f5c29) >> 32; 225 *((u16 *)buf) = decpair[r - 100*q]; 226 buf += 2; 227 228 /* 0 <= q < 10^6 */ 229 r = (q * (u64)0x28f5c29) >> 32; 230 *((u16 *)buf) = decpair[q - 100*r]; 231 buf += 2; 232 233 /* 0 <= r < 10^4 */ 234 q = (r * 0x147b) >> 19; 235 *((u16 *)buf) = decpair[r - 100*q]; 236 buf += 2; 237 238 /* 0 <= q < 100 */ 239 *((u16 *)buf) = decpair[q]; 240 buf += 2; 241 return buf; 242 } 243 244 static noinline_for_stack 245 char *put_dec(char *buf, unsigned long long n) 246 { 247 if (n >= 100*1000*1000) 248 buf = put_dec_full8(buf, do_div(n, 100*1000*1000)); 249 /* 1 <= n <= 1.6e11 */ 250 if (n >= 100*1000*1000) 251 buf = put_dec_full8(buf, do_div(n, 100*1000*1000)); 252 /* 1 <= n < 1e8 */ 253 return put_dec_trunc8(buf, n); 254 } 255 256 #elif BITS_PER_LONG == 32 && BITS_PER_LONG_LONG == 64 257 258 static void 259 put_dec_full4(char *buf, unsigned r) 260 { 261 unsigned q; 262 263 /* 0 <= r < 10^4 */ 264 q = (r * 0x147b) >> 19; 265 *((u16 *)buf) = decpair[r - 100*q]; 266 buf += 2; 267 /* 0 <= q < 100 */ 268 *((u16 *)buf) = decpair[q]; 269 } 270 271 /* 272 * Call put_dec_full4 on x % 10000, return x / 10000. 273 * The approximation x/10000 == (x * 0x346DC5D7) >> 43 274 * holds for all x < 1,128,869,999. The largest value this 275 * helper will ever be asked to convert is 1,125,520,955. 276 * (second call in the put_dec code, assuming n is all-ones). 277 */ 278 static noinline_for_stack 279 unsigned put_dec_helper4(char *buf, unsigned x) 280 { 281 uint32_t q = (x * (uint64_t)0x346DC5D7) >> 43; 282 283 put_dec_full4(buf, x - q * 10000); 284 return q; 285 } 286 287 /* Based on code by Douglas W. Jones found at 288 * <http://www.cs.uiowa.edu/~jones/bcd/decimal.html#sixtyfour> 289 * (with permission from the author). 290 * Performs no 64-bit division and hence should be fast on 32-bit machines. 291 */ 292 static 293 char *put_dec(char *buf, unsigned long long n) 294 { 295 uint32_t d3, d2, d1, q, h; 296 297 if (n < 100*1000*1000) 298 return put_dec_trunc8(buf, n); 299 300 d1 = ((uint32_t)n >> 16); /* implicit "& 0xffff" */ 301 h = (n >> 32); 302 d2 = (h ) & 0xffff; 303 d3 = (h >> 16); /* implicit "& 0xffff" */ 304 305 /* n = 2^48 d3 + 2^32 d2 + 2^16 d1 + d0 306 = 281_4749_7671_0656 d3 + 42_9496_7296 d2 + 6_5536 d1 + d0 */ 307 q = 656 * d3 + 7296 * d2 + 5536 * d1 + ((uint32_t)n & 0xffff); 308 q = put_dec_helper4(buf, q); 309 310 q += 7671 * d3 + 9496 * d2 + 6 * d1; 311 q = put_dec_helper4(buf+4, q); 312 313 q += 4749 * d3 + 42 * d2; 314 q = put_dec_helper4(buf+8, q); 315 316 q += 281 * d3; 317 buf += 12; 318 if (q) 319 buf = put_dec_trunc8(buf, q); 320 else while (buf[-1] == '0') 321 --buf; 322 323 return buf; 324 } 325 326 #endif 327 328 /* 329 * Convert passed number to decimal string. 330 * Returns the length of string. On buffer overflow, returns 0. 331 * 332 * If speed is not important, use snprintf(). It's easy to read the code. 333 */ 334 int num_to_str(char *buf, int size, unsigned long long num) 335 { 336 /* put_dec requires 2-byte alignment of the buffer. */ 337 char tmp[sizeof(num) * 3] __aligned(2); 338 int idx, len; 339 340 /* put_dec() may work incorrectly for num = 0 (generate "", not "0") */ 341 if (num <= 9) { 342 tmp[0] = '0' + num; 343 len = 1; 344 } else { 345 len = put_dec(tmp, num) - tmp; 346 } 347 348 if (len > size) 349 return 0; 350 for (idx = 0; idx < len; ++idx) 351 buf[idx] = tmp[len - idx - 1]; 352 return len; 353 } 354 355 #define SIGN 1 /* unsigned/signed, must be 1 */ 356 #define LEFT 2 /* left justified */ 357 #define PLUS 4 /* show plus */ 358 #define SPACE 8 /* space if plus */ 359 #define ZEROPAD 16 /* pad with zero, must be 16 == '0' - ' ' */ 360 #define SMALL 32 /* use lowercase in hex (must be 32 == 0x20) */ 361 #define SPECIAL 64 /* prefix hex with "0x", octal with "0" */ 362 363 enum format_type { 364 FORMAT_TYPE_NONE, /* Just a string part */ 365 FORMAT_TYPE_WIDTH, 366 FORMAT_TYPE_PRECISION, 367 FORMAT_TYPE_CHAR, 368 FORMAT_TYPE_STR, 369 FORMAT_TYPE_PTR, 370 FORMAT_TYPE_PERCENT_CHAR, 371 FORMAT_TYPE_INVALID, 372 FORMAT_TYPE_LONG_LONG, 373 FORMAT_TYPE_ULONG, 374 FORMAT_TYPE_LONG, 375 FORMAT_TYPE_UBYTE, 376 FORMAT_TYPE_BYTE, 377 FORMAT_TYPE_USHORT, 378 FORMAT_TYPE_SHORT, 379 FORMAT_TYPE_UINT, 380 FORMAT_TYPE_INT, 381 FORMAT_TYPE_SIZE_T, 382 FORMAT_TYPE_PTRDIFF 383 }; 384 385 struct printf_spec { 386 unsigned int type:8; /* format_type enum */ 387 signed int field_width:24; /* width of output field */ 388 unsigned int flags:8; /* flags to number() */ 389 unsigned int base:8; /* number base, 8, 10 or 16 only */ 390 signed int precision:16; /* # of digits/chars */ 391 } __packed; 392 #define FIELD_WIDTH_MAX ((1 << 23) - 1) 393 #define PRECISION_MAX ((1 << 15) - 1) 394 395 static noinline_for_stack 396 char *number(char *buf, char *end, unsigned long long num, 397 struct printf_spec spec) 398 { 399 /* put_dec requires 2-byte alignment of the buffer. */ 400 char tmp[3 * sizeof(num)] __aligned(2); 401 char sign; 402 char locase; 403 int need_pfx = ((spec.flags & SPECIAL) && spec.base != 10); 404 int i; 405 bool is_zero = num == 0LL; 406 int field_width = spec.field_width; 407 int precision = spec.precision; 408 409 BUILD_BUG_ON(sizeof(struct printf_spec) != 8); 410 411 /* locase = 0 or 0x20. ORing digits or letters with 'locase' 412 * produces same digits or (maybe lowercased) letters */ 413 locase = (spec.flags & SMALL); 414 if (spec.flags & LEFT) 415 spec.flags &= ~ZEROPAD; 416 sign = 0; 417 if (spec.flags & SIGN) { 418 if ((signed long long)num < 0) { 419 sign = '-'; 420 num = -(signed long long)num; 421 field_width--; 422 } else if (spec.flags & PLUS) { 423 sign = '+'; 424 field_width--; 425 } else if (spec.flags & SPACE) { 426 sign = ' '; 427 field_width--; 428 } 429 } 430 if (need_pfx) { 431 if (spec.base == 16) 432 field_width -= 2; 433 else if (!is_zero) 434 field_width--; 435 } 436 437 /* generate full string in tmp[], in reverse order */ 438 i = 0; 439 if (num < spec.base) 440 tmp[i++] = hex_asc_upper[num] | locase; 441 else if (spec.base != 10) { /* 8 or 16 */ 442 int mask = spec.base - 1; 443 int shift = 3; 444 445 if (spec.base == 16) 446 shift = 4; 447 do { 448 tmp[i++] = (hex_asc_upper[((unsigned char)num) & mask] | locase); 449 num >>= shift; 450 } while (num); 451 } else { /* base 10 */ 452 i = put_dec(tmp, num) - tmp; 453 } 454 455 /* printing 100 using %2d gives "100", not "00" */ 456 if (i > precision) 457 precision = i; 458 /* leading space padding */ 459 field_width -= precision; 460 if (!(spec.flags & (ZEROPAD | LEFT))) { 461 while (--field_width >= 0) { 462 if (buf < end) 463 *buf = ' '; 464 ++buf; 465 } 466 } 467 /* sign */ 468 if (sign) { 469 if (buf < end) 470 *buf = sign; 471 ++buf; 472 } 473 /* "0x" / "0" prefix */ 474 if (need_pfx) { 475 if (spec.base == 16 || !is_zero) { 476 if (buf < end) 477 *buf = '0'; 478 ++buf; 479 } 480 if (spec.base == 16) { 481 if (buf < end) 482 *buf = ('X' | locase); 483 ++buf; 484 } 485 } 486 /* zero or space padding */ 487 if (!(spec.flags & LEFT)) { 488 char c = ' ' + (spec.flags & ZEROPAD); 489 BUILD_BUG_ON(' ' + ZEROPAD != '0'); 490 while (--field_width >= 0) { 491 if (buf < end) 492 *buf = c; 493 ++buf; 494 } 495 } 496 /* hmm even more zero padding? */ 497 while (i <= --precision) { 498 if (buf < end) 499 *buf = '0'; 500 ++buf; 501 } 502 /* actual digits of result */ 503 while (--i >= 0) { 504 if (buf < end) 505 *buf = tmp[i]; 506 ++buf; 507 } 508 /* trailing space padding */ 509 while (--field_width >= 0) { 510 if (buf < end) 511 *buf = ' '; 512 ++buf; 513 } 514 515 return buf; 516 } 517 518 static noinline_for_stack 519 char *special_hex_number(char *buf, char *end, unsigned long long num, int size) 520 { 521 struct printf_spec spec; 522 523 spec.type = FORMAT_TYPE_PTR; 524 spec.field_width = 2 + 2 * size; /* 0x + hex */ 525 spec.flags = SPECIAL | SMALL | ZEROPAD; 526 spec.base = 16; 527 spec.precision = -1; 528 529 return number(buf, end, num, spec); 530 } 531 532 static void move_right(char *buf, char *end, unsigned len, unsigned spaces) 533 { 534 size_t size; 535 if (buf >= end) /* nowhere to put anything */ 536 return; 537 size = end - buf; 538 if (size <= spaces) { 539 memset(buf, ' ', size); 540 return; 541 } 542 if (len) { 543 if (len > size - spaces) 544 len = size - spaces; 545 memmove(buf + spaces, buf, len); 546 } 547 memset(buf, ' ', spaces); 548 } 549 550 /* 551 * Handle field width padding for a string. 552 * @buf: current buffer position 553 * @n: length of string 554 * @end: end of output buffer 555 * @spec: for field width and flags 556 * Returns: new buffer position after padding. 557 */ 558 static noinline_for_stack 559 char *widen_string(char *buf, int n, char *end, struct printf_spec spec) 560 { 561 unsigned spaces; 562 563 if (likely(n >= spec.field_width)) 564 return buf; 565 /* we want to pad the sucker */ 566 spaces = spec.field_width - n; 567 if (!(spec.flags & LEFT)) { 568 move_right(buf - n, end, n, spaces); 569 return buf + spaces; 570 } 571 while (spaces--) { 572 if (buf < end) 573 *buf = ' '; 574 ++buf; 575 } 576 return buf; 577 } 578 579 static noinline_for_stack 580 char *string(char *buf, char *end, const char *s, struct printf_spec spec) 581 { 582 int len = 0; 583 size_t lim = spec.precision; 584 585 if ((unsigned long)s < PAGE_SIZE) 586 s = "(null)"; 587 588 while (lim--) { 589 char c = *s++; 590 if (!c) 591 break; 592 if (buf < end) 593 *buf = c; 594 ++buf; 595 ++len; 596 } 597 return widen_string(buf, len, end, spec); 598 } 599 600 static noinline_for_stack 601 char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_spec spec, 602 const char *fmt) 603 { 604 const char *array[4], *s; 605 const struct dentry *p; 606 int depth; 607 int i, n; 608 609 switch (fmt[1]) { 610 case '2': case '3': case '4': 611 depth = fmt[1] - '0'; 612 break; 613 default: 614 depth = 1; 615 } 616 617 rcu_read_lock(); 618 for (i = 0; i < depth; i++, d = p) { 619 p = ACCESS_ONCE(d->d_parent); 620 array[i] = ACCESS_ONCE(d->d_name.name); 621 if (p == d) { 622 if (i) 623 array[i] = ""; 624 i++; 625 break; 626 } 627 } 628 s = array[--i]; 629 for (n = 0; n != spec.precision; n++, buf++) { 630 char c = *s++; 631 if (!c) { 632 if (!i) 633 break; 634 c = '/'; 635 s = array[--i]; 636 } 637 if (buf < end) 638 *buf = c; 639 } 640 rcu_read_unlock(); 641 return widen_string(buf, n, end, spec); 642 } 643 644 #ifdef CONFIG_BLOCK 645 static noinline_for_stack 646 char *bdev_name(char *buf, char *end, struct block_device *bdev, 647 struct printf_spec spec, const char *fmt) 648 { 649 struct gendisk *hd = bdev->bd_disk; 650 651 buf = string(buf, end, hd->disk_name, spec); 652 if (bdev->bd_part->partno) { 653 if (isdigit(hd->disk_name[strlen(hd->disk_name)-1])) { 654 if (buf < end) 655 *buf = 'p'; 656 buf++; 657 } 658 buf = number(buf, end, bdev->bd_part->partno, spec); 659 } 660 return buf; 661 } 662 #endif 663 664 static noinline_for_stack 665 char *symbol_string(char *buf, char *end, void *ptr, 666 struct printf_spec spec, const char *fmt) 667 { 668 unsigned long value; 669 #ifdef CONFIG_KALLSYMS 670 char sym[KSYM_SYMBOL_LEN]; 671 #endif 672 673 if (fmt[1] == 'R') 674 ptr = __builtin_extract_return_addr(ptr); 675 value = (unsigned long)ptr; 676 677 #ifdef CONFIG_KALLSYMS 678 if (*fmt == 'B') 679 sprint_backtrace(sym, value); 680 else if (*fmt != 'f' && *fmt != 's') 681 sprint_symbol(sym, value); 682 else 683 sprint_symbol_no_offset(sym, value); 684 685 return string(buf, end, sym, spec); 686 #else 687 return special_hex_number(buf, end, value, sizeof(void *)); 688 #endif 689 } 690 691 static noinline_for_stack 692 char *resource_string(char *buf, char *end, struct resource *res, 693 struct printf_spec spec, const char *fmt) 694 { 695 #ifndef IO_RSRC_PRINTK_SIZE 696 #define IO_RSRC_PRINTK_SIZE 6 697 #endif 698 699 #ifndef MEM_RSRC_PRINTK_SIZE 700 #define MEM_RSRC_PRINTK_SIZE 10 701 #endif 702 static const struct printf_spec io_spec = { 703 .base = 16, 704 .field_width = IO_RSRC_PRINTK_SIZE, 705 .precision = -1, 706 .flags = SPECIAL | SMALL | ZEROPAD, 707 }; 708 static const struct printf_spec mem_spec = { 709 .base = 16, 710 .field_width = MEM_RSRC_PRINTK_SIZE, 711 .precision = -1, 712 .flags = SPECIAL | SMALL | ZEROPAD, 713 }; 714 static const struct printf_spec bus_spec = { 715 .base = 16, 716 .field_width = 2, 717 .precision = -1, 718 .flags = SMALL | ZEROPAD, 719 }; 720 static const struct printf_spec dec_spec = { 721 .base = 10, 722 .precision = -1, 723 .flags = 0, 724 }; 725 static const struct printf_spec str_spec = { 726 .field_width = -1, 727 .precision = 10, 728 .flags = LEFT, 729 }; 730 static const struct printf_spec flag_spec = { 731 .base = 16, 732 .precision = -1, 733 .flags = SPECIAL | SMALL, 734 }; 735 736 /* 32-bit res (sizeof==4): 10 chars in dec, 10 in hex ("0x" + 8) 737 * 64-bit res (sizeof==8): 20 chars in dec, 18 in hex ("0x" + 16) */ 738 #define RSRC_BUF_SIZE ((2 * sizeof(resource_size_t)) + 4) 739 #define FLAG_BUF_SIZE (2 * sizeof(res->flags)) 740 #define DECODED_BUF_SIZE sizeof("[mem - 64bit pref window disabled]") 741 #define RAW_BUF_SIZE sizeof("[mem - flags 0x]") 742 char sym[max(2*RSRC_BUF_SIZE + DECODED_BUF_SIZE, 743 2*RSRC_BUF_SIZE + FLAG_BUF_SIZE + RAW_BUF_SIZE)]; 744 745 char *p = sym, *pend = sym + sizeof(sym); 746 int decode = (fmt[0] == 'R') ? 1 : 0; 747 const struct printf_spec *specp; 748 749 *p++ = '['; 750 if (res->flags & IORESOURCE_IO) { 751 p = string(p, pend, "io ", str_spec); 752 specp = &io_spec; 753 } else if (res->flags & IORESOURCE_MEM) { 754 p = string(p, pend, "mem ", str_spec); 755 specp = &mem_spec; 756 } else if (res->flags & IORESOURCE_IRQ) { 757 p = string(p, pend, "irq ", str_spec); 758 specp = &dec_spec; 759 } else if (res->flags & IORESOURCE_DMA) { 760 p = string(p, pend, "dma ", str_spec); 761 specp = &dec_spec; 762 } else if (res->flags & IORESOURCE_BUS) { 763 p = string(p, pend, "bus ", str_spec); 764 specp = &bus_spec; 765 } else { 766 p = string(p, pend, "??? ", str_spec); 767 specp = &mem_spec; 768 decode = 0; 769 } 770 if (decode && res->flags & IORESOURCE_UNSET) { 771 p = string(p, pend, "size ", str_spec); 772 p = number(p, pend, resource_size(res), *specp); 773 } else { 774 p = number(p, pend, res->start, *specp); 775 if (res->start != res->end) { 776 *p++ = '-'; 777 p = number(p, pend, res->end, *specp); 778 } 779 } 780 if (decode) { 781 if (res->flags & IORESOURCE_MEM_64) 782 p = string(p, pend, " 64bit", str_spec); 783 if (res->flags & IORESOURCE_PREFETCH) 784 p = string(p, pend, " pref", str_spec); 785 if (res->flags & IORESOURCE_WINDOW) 786 p = string(p, pend, " window", str_spec); 787 if (res->flags & IORESOURCE_DISABLED) 788 p = string(p, pend, " disabled", str_spec); 789 } else { 790 p = string(p, pend, " flags ", str_spec); 791 p = number(p, pend, res->flags, flag_spec); 792 } 793 *p++ = ']'; 794 *p = '\0'; 795 796 return string(buf, end, sym, spec); 797 } 798 799 static noinline_for_stack 800 char *hex_string(char *buf, char *end, u8 *addr, struct printf_spec spec, 801 const char *fmt) 802 { 803 int i, len = 1; /* if we pass '%ph[CDN]', field width remains 804 negative value, fallback to the default */ 805 char separator; 806 807 if (spec.field_width == 0) 808 /* nothing to print */ 809 return buf; 810 811 if (ZERO_OR_NULL_PTR(addr)) 812 /* NULL pointer */ 813 return string(buf, end, NULL, spec); 814 815 switch (fmt[1]) { 816 case 'C': 817 separator = ':'; 818 break; 819 case 'D': 820 separator = '-'; 821 break; 822 case 'N': 823 separator = 0; 824 break; 825 default: 826 separator = ' '; 827 break; 828 } 829 830 if (spec.field_width > 0) 831 len = min_t(int, spec.field_width, 64); 832 833 for (i = 0; i < len; ++i) { 834 if (buf < end) 835 *buf = hex_asc_hi(addr[i]); 836 ++buf; 837 if (buf < end) 838 *buf = hex_asc_lo(addr[i]); 839 ++buf; 840 841 if (separator && i != len - 1) { 842 if (buf < end) 843 *buf = separator; 844 ++buf; 845 } 846 } 847 848 return buf; 849 } 850 851 static noinline_for_stack 852 char *bitmap_string(char *buf, char *end, unsigned long *bitmap, 853 struct printf_spec spec, const char *fmt) 854 { 855 const int CHUNKSZ = 32; 856 int nr_bits = max_t(int, spec.field_width, 0); 857 int i, chunksz; 858 bool first = true; 859 860 /* reused to print numbers */ 861 spec = (struct printf_spec){ .flags = SMALL | ZEROPAD, .base = 16 }; 862 863 chunksz = nr_bits & (CHUNKSZ - 1); 864 if (chunksz == 0) 865 chunksz = CHUNKSZ; 866 867 i = ALIGN(nr_bits, CHUNKSZ) - CHUNKSZ; 868 for (; i >= 0; i -= CHUNKSZ) { 869 u32 chunkmask, val; 870 int word, bit; 871 872 chunkmask = ((1ULL << chunksz) - 1); 873 word = i / BITS_PER_LONG; 874 bit = i % BITS_PER_LONG; 875 val = (bitmap[word] >> bit) & chunkmask; 876 877 if (!first) { 878 if (buf < end) 879 *buf = ','; 880 buf++; 881 } 882 first = false; 883 884 spec.field_width = DIV_ROUND_UP(chunksz, 4); 885 buf = number(buf, end, val, spec); 886 887 chunksz = CHUNKSZ; 888 } 889 return buf; 890 } 891 892 static noinline_for_stack 893 char *bitmap_list_string(char *buf, char *end, unsigned long *bitmap, 894 struct printf_spec spec, const char *fmt) 895 { 896 int nr_bits = max_t(int, spec.field_width, 0); 897 /* current bit is 'cur', most recently seen range is [rbot, rtop] */ 898 int cur, rbot, rtop; 899 bool first = true; 900 901 /* reused to print numbers */ 902 spec = (struct printf_spec){ .base = 10 }; 903 904 rbot = cur = find_first_bit(bitmap, nr_bits); 905 while (cur < nr_bits) { 906 rtop = cur; 907 cur = find_next_bit(bitmap, nr_bits, cur + 1); 908 if (cur < nr_bits && cur <= rtop + 1) 909 continue; 910 911 if (!first) { 912 if (buf < end) 913 *buf = ','; 914 buf++; 915 } 916 first = false; 917 918 buf = number(buf, end, rbot, spec); 919 if (rbot < rtop) { 920 if (buf < end) 921 *buf = '-'; 922 buf++; 923 924 buf = number(buf, end, rtop, spec); 925 } 926 927 rbot = cur; 928 } 929 return buf; 930 } 931 932 static noinline_for_stack 933 char *mac_address_string(char *buf, char *end, u8 *addr, 934 struct printf_spec spec, const char *fmt) 935 { 936 char mac_addr[sizeof("xx:xx:xx:xx:xx:xx")]; 937 char *p = mac_addr; 938 int i; 939 char separator; 940 bool reversed = false; 941 942 switch (fmt[1]) { 943 case 'F': 944 separator = '-'; 945 break; 946 947 case 'R': 948 reversed = true; 949 /* fall through */ 950 951 default: 952 separator = ':'; 953 break; 954 } 955 956 for (i = 0; i < 6; i++) { 957 if (reversed) 958 p = hex_byte_pack(p, addr[5 - i]); 959 else 960 p = hex_byte_pack(p, addr[i]); 961 962 if (fmt[0] == 'M' && i != 5) 963 *p++ = separator; 964 } 965 *p = '\0'; 966 967 return string(buf, end, mac_addr, spec); 968 } 969 970 static noinline_for_stack 971 char *ip4_string(char *p, const u8 *addr, const char *fmt) 972 { 973 int i; 974 bool leading_zeros = (fmt[0] == 'i'); 975 int index; 976 int step; 977 978 switch (fmt[2]) { 979 case 'h': 980 #ifdef __BIG_ENDIAN 981 index = 0; 982 step = 1; 983 #else 984 index = 3; 985 step = -1; 986 #endif 987 break; 988 case 'l': 989 index = 3; 990 step = -1; 991 break; 992 case 'n': 993 case 'b': 994 default: 995 index = 0; 996 step = 1; 997 break; 998 } 999 for (i = 0; i < 4; i++) { 1000 char temp[4] __aligned(2); /* hold each IP quad in reverse order */ 1001 int digits = put_dec_trunc8(temp, addr[index]) - temp; 1002 if (leading_zeros) { 1003 if (digits < 3) 1004 *p++ = '0'; 1005 if (digits < 2) 1006 *p++ = '0'; 1007 } 1008 /* reverse the digits in the quad */ 1009 while (digits--) 1010 *p++ = temp[digits]; 1011 if (i < 3) 1012 *p++ = '.'; 1013 index += step; 1014 } 1015 *p = '\0'; 1016 1017 return p; 1018 } 1019 1020 static noinline_for_stack 1021 char *ip6_compressed_string(char *p, const char *addr) 1022 { 1023 int i, j, range; 1024 unsigned char zerolength[8]; 1025 int longest = 1; 1026 int colonpos = -1; 1027 u16 word; 1028 u8 hi, lo; 1029 bool needcolon = false; 1030 bool useIPv4; 1031 struct in6_addr in6; 1032 1033 memcpy(&in6, addr, sizeof(struct in6_addr)); 1034 1035 useIPv4 = ipv6_addr_v4mapped(&in6) || ipv6_addr_is_isatap(&in6); 1036 1037 memset(zerolength, 0, sizeof(zerolength)); 1038 1039 if (useIPv4) 1040 range = 6; 1041 else 1042 range = 8; 1043 1044 /* find position of longest 0 run */ 1045 for (i = 0; i < range; i++) { 1046 for (j = i; j < range; j++) { 1047 if (in6.s6_addr16[j] != 0) 1048 break; 1049 zerolength[i]++; 1050 } 1051 } 1052 for (i = 0; i < range; i++) { 1053 if (zerolength[i] > longest) { 1054 longest = zerolength[i]; 1055 colonpos = i; 1056 } 1057 } 1058 if (longest == 1) /* don't compress a single 0 */ 1059 colonpos = -1; 1060 1061 /* emit address */ 1062 for (i = 0; i < range; i++) { 1063 if (i == colonpos) { 1064 if (needcolon || i == 0) 1065 *p++ = ':'; 1066 *p++ = ':'; 1067 needcolon = false; 1068 i += longest - 1; 1069 continue; 1070 } 1071 if (needcolon) { 1072 *p++ = ':'; 1073 needcolon = false; 1074 } 1075 /* hex u16 without leading 0s */ 1076 word = ntohs(in6.s6_addr16[i]); 1077 hi = word >> 8; 1078 lo = word & 0xff; 1079 if (hi) { 1080 if (hi > 0x0f) 1081 p = hex_byte_pack(p, hi); 1082 else 1083 *p++ = hex_asc_lo(hi); 1084 p = hex_byte_pack(p, lo); 1085 } 1086 else if (lo > 0x0f) 1087 p = hex_byte_pack(p, lo); 1088 else 1089 *p++ = hex_asc_lo(lo); 1090 needcolon = true; 1091 } 1092 1093 if (useIPv4) { 1094 if (needcolon) 1095 *p++ = ':'; 1096 p = ip4_string(p, &in6.s6_addr[12], "I4"); 1097 } 1098 *p = '\0'; 1099 1100 return p; 1101 } 1102 1103 static noinline_for_stack 1104 char *ip6_string(char *p, const char *addr, const char *fmt) 1105 { 1106 int i; 1107 1108 for (i = 0; i < 8; i++) { 1109 p = hex_byte_pack(p, *addr++); 1110 p = hex_byte_pack(p, *addr++); 1111 if (fmt[0] == 'I' && i != 7) 1112 *p++ = ':'; 1113 } 1114 *p = '\0'; 1115 1116 return p; 1117 } 1118 1119 static noinline_for_stack 1120 char *ip6_addr_string(char *buf, char *end, const u8 *addr, 1121 struct printf_spec spec, const char *fmt) 1122 { 1123 char ip6_addr[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255")]; 1124 1125 if (fmt[0] == 'I' && fmt[2] == 'c') 1126 ip6_compressed_string(ip6_addr, addr); 1127 else 1128 ip6_string(ip6_addr, addr, fmt); 1129 1130 return string(buf, end, ip6_addr, spec); 1131 } 1132 1133 static noinline_for_stack 1134 char *ip4_addr_string(char *buf, char *end, const u8 *addr, 1135 struct printf_spec spec, const char *fmt) 1136 { 1137 char ip4_addr[sizeof("255.255.255.255")]; 1138 1139 ip4_string(ip4_addr, addr, fmt); 1140 1141 return string(buf, end, ip4_addr, spec); 1142 } 1143 1144 static noinline_for_stack 1145 char *ip6_addr_string_sa(char *buf, char *end, const struct sockaddr_in6 *sa, 1146 struct printf_spec spec, const char *fmt) 1147 { 1148 bool have_p = false, have_s = false, have_f = false, have_c = false; 1149 char ip6_addr[sizeof("[xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255]") + 1150 sizeof(":12345") + sizeof("/123456789") + 1151 sizeof("%1234567890")]; 1152 char *p = ip6_addr, *pend = ip6_addr + sizeof(ip6_addr); 1153 const u8 *addr = (const u8 *) &sa->sin6_addr; 1154 char fmt6[2] = { fmt[0], '6' }; 1155 u8 off = 0; 1156 1157 fmt++; 1158 while (isalpha(*++fmt)) { 1159 switch (*fmt) { 1160 case 'p': 1161 have_p = true; 1162 break; 1163 case 'f': 1164 have_f = true; 1165 break; 1166 case 's': 1167 have_s = true; 1168 break; 1169 case 'c': 1170 have_c = true; 1171 break; 1172 } 1173 } 1174 1175 if (have_p || have_s || have_f) { 1176 *p = '['; 1177 off = 1; 1178 } 1179 1180 if (fmt6[0] == 'I' && have_c) 1181 p = ip6_compressed_string(ip6_addr + off, addr); 1182 else 1183 p = ip6_string(ip6_addr + off, addr, fmt6); 1184 1185 if (have_p || have_s || have_f) 1186 *p++ = ']'; 1187 1188 if (have_p) { 1189 *p++ = ':'; 1190 p = number(p, pend, ntohs(sa->sin6_port), spec); 1191 } 1192 if (have_f) { 1193 *p++ = '/'; 1194 p = number(p, pend, ntohl(sa->sin6_flowinfo & 1195 IPV6_FLOWINFO_MASK), spec); 1196 } 1197 if (have_s) { 1198 *p++ = '%'; 1199 p = number(p, pend, sa->sin6_scope_id, spec); 1200 } 1201 *p = '\0'; 1202 1203 return string(buf, end, ip6_addr, spec); 1204 } 1205 1206 static noinline_for_stack 1207 char *ip4_addr_string_sa(char *buf, char *end, const struct sockaddr_in *sa, 1208 struct printf_spec spec, const char *fmt) 1209 { 1210 bool have_p = false; 1211 char *p, ip4_addr[sizeof("255.255.255.255") + sizeof(":12345")]; 1212 char *pend = ip4_addr + sizeof(ip4_addr); 1213 const u8 *addr = (const u8 *) &sa->sin_addr.s_addr; 1214 char fmt4[3] = { fmt[0], '4', 0 }; 1215 1216 fmt++; 1217 while (isalpha(*++fmt)) { 1218 switch (*fmt) { 1219 case 'p': 1220 have_p = true; 1221 break; 1222 case 'h': 1223 case 'l': 1224 case 'n': 1225 case 'b': 1226 fmt4[2] = *fmt; 1227 break; 1228 } 1229 } 1230 1231 p = ip4_string(ip4_addr, addr, fmt4); 1232 if (have_p) { 1233 *p++ = ':'; 1234 p = number(p, pend, ntohs(sa->sin_port), spec); 1235 } 1236 *p = '\0'; 1237 1238 return string(buf, end, ip4_addr, spec); 1239 } 1240 1241 static noinline_for_stack 1242 char *escaped_string(char *buf, char *end, u8 *addr, struct printf_spec spec, 1243 const char *fmt) 1244 { 1245 bool found = true; 1246 int count = 1; 1247 unsigned int flags = 0; 1248 int len; 1249 1250 if (spec.field_width == 0) 1251 return buf; /* nothing to print */ 1252 1253 if (ZERO_OR_NULL_PTR(addr)) 1254 return string(buf, end, NULL, spec); /* NULL pointer */ 1255 1256 1257 do { 1258 switch (fmt[count++]) { 1259 case 'a': 1260 flags |= ESCAPE_ANY; 1261 break; 1262 case 'c': 1263 flags |= ESCAPE_SPECIAL; 1264 break; 1265 case 'h': 1266 flags |= ESCAPE_HEX; 1267 break; 1268 case 'n': 1269 flags |= ESCAPE_NULL; 1270 break; 1271 case 'o': 1272 flags |= ESCAPE_OCTAL; 1273 break; 1274 case 'p': 1275 flags |= ESCAPE_NP; 1276 break; 1277 case 's': 1278 flags |= ESCAPE_SPACE; 1279 break; 1280 default: 1281 found = false; 1282 break; 1283 } 1284 } while (found); 1285 1286 if (!flags) 1287 flags = ESCAPE_ANY_NP; 1288 1289 len = spec.field_width < 0 ? 1 : spec.field_width; 1290 1291 /* 1292 * string_escape_mem() writes as many characters as it can to 1293 * the given buffer, and returns the total size of the output 1294 * had the buffer been big enough. 1295 */ 1296 buf += string_escape_mem(addr, len, buf, buf < end ? end - buf : 0, flags, NULL); 1297 1298 return buf; 1299 } 1300 1301 static noinline_for_stack 1302 char *uuid_string(char *buf, char *end, const u8 *addr, 1303 struct printf_spec spec, const char *fmt) 1304 { 1305 char uuid[sizeof("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]; 1306 char *p = uuid; 1307 int i; 1308 static const u8 be[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 1309 static const u8 le[16] = {3,2,1,0,5,4,7,6,8,9,10,11,12,13,14,15}; 1310 const u8 *index = be; 1311 bool uc = false; 1312 1313 switch (*(++fmt)) { 1314 case 'L': 1315 uc = true; /* fall-through */ 1316 case 'l': 1317 index = le; 1318 break; 1319 case 'B': 1320 uc = true; 1321 break; 1322 } 1323 1324 for (i = 0; i < 16; i++) { 1325 p = hex_byte_pack(p, addr[index[i]]); 1326 switch (i) { 1327 case 3: 1328 case 5: 1329 case 7: 1330 case 9: 1331 *p++ = '-'; 1332 break; 1333 } 1334 } 1335 1336 *p = 0; 1337 1338 if (uc) { 1339 p = uuid; 1340 do { 1341 *p = toupper(*p); 1342 } while (*(++p)); 1343 } 1344 1345 return string(buf, end, uuid, spec); 1346 } 1347 1348 static noinline_for_stack 1349 char *netdev_bits(char *buf, char *end, const void *addr, const char *fmt) 1350 { 1351 unsigned long long num; 1352 int size; 1353 1354 switch (fmt[1]) { 1355 case 'F': 1356 num = *(const netdev_features_t *)addr; 1357 size = sizeof(netdev_features_t); 1358 break; 1359 default: 1360 num = (unsigned long)addr; 1361 size = sizeof(unsigned long); 1362 break; 1363 } 1364 1365 return special_hex_number(buf, end, num, size); 1366 } 1367 1368 static noinline_for_stack 1369 char *address_val(char *buf, char *end, const void *addr, const char *fmt) 1370 { 1371 unsigned long long num; 1372 int size; 1373 1374 switch (fmt[1]) { 1375 case 'd': 1376 num = *(const dma_addr_t *)addr; 1377 size = sizeof(dma_addr_t); 1378 break; 1379 case 'p': 1380 default: 1381 num = *(const phys_addr_t *)addr; 1382 size = sizeof(phys_addr_t); 1383 break; 1384 } 1385 1386 return special_hex_number(buf, end, num, size); 1387 } 1388 1389 static noinline_for_stack 1390 char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec, 1391 const char *fmt) 1392 { 1393 if (!IS_ENABLED(CONFIG_HAVE_CLK) || !clk) 1394 return string(buf, end, NULL, spec); 1395 1396 switch (fmt[1]) { 1397 case 'r': 1398 return number(buf, end, clk_get_rate(clk), spec); 1399 1400 case 'n': 1401 default: 1402 #ifdef CONFIG_COMMON_CLK 1403 return string(buf, end, __clk_get_name(clk), spec); 1404 #else 1405 return special_hex_number(buf, end, (unsigned long)clk, sizeof(unsigned long)); 1406 #endif 1407 } 1408 } 1409 1410 int kptr_restrict __read_mostly; 1411 1412 /* 1413 * Show a '%p' thing. A kernel extension is that the '%p' is followed 1414 * by an extra set of alphanumeric characters that are extended format 1415 * specifiers. 1416 * 1417 * Right now we handle: 1418 * 1419 * - 'F' For symbolic function descriptor pointers with offset 1420 * - 'f' For simple symbolic function names without offset 1421 * - 'S' For symbolic direct pointers with offset 1422 * - 's' For symbolic direct pointers without offset 1423 * - '[FfSs]R' as above with __builtin_extract_return_addr() translation 1424 * - 'B' For backtraced symbolic direct pointers with offset 1425 * - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref] 1426 * - 'r' For raw struct resource, e.g., [mem 0x0-0x1f flags 0x201] 1427 * - 'b[l]' For a bitmap, the number of bits is determined by the field 1428 * width which must be explicitly specified either as part of the 1429 * format string '%32b[l]' or through '%*b[l]', [l] selects 1430 * range-list format instead of hex format 1431 * - 'M' For a 6-byte MAC address, it prints the address in the 1432 * usual colon-separated hex notation 1433 * - 'm' For a 6-byte MAC address, it prints the hex address without colons 1434 * - 'MF' For a 6-byte MAC FDDI address, it prints the address 1435 * with a dash-separated hex notation 1436 * - '[mM]R' For a 6-byte MAC address, Reverse order (Bluetooth) 1437 * - 'I' [46] for IPv4/IPv6 addresses printed in the usual way 1438 * IPv4 uses dot-separated decimal without leading 0's (1.2.3.4) 1439 * IPv6 uses colon separated network-order 16 bit hex with leading 0's 1440 * [S][pfs] 1441 * Generic IPv4/IPv6 address (struct sockaddr *) that falls back to 1442 * [4] or [6] and is able to print port [p], flowinfo [f], scope [s] 1443 * - 'i' [46] for 'raw' IPv4/IPv6 addresses 1444 * IPv6 omits the colons (01020304...0f) 1445 * IPv4 uses dot-separated decimal with leading 0's (010.123.045.006) 1446 * [S][pfs] 1447 * Generic IPv4/IPv6 address (struct sockaddr *) that falls back to 1448 * [4] or [6] and is able to print port [p], flowinfo [f], scope [s] 1449 * - '[Ii][4S][hnbl]' IPv4 addresses in host, network, big or little endian order 1450 * - 'I[6S]c' for IPv6 addresses printed as specified by 1451 * http://tools.ietf.org/html/rfc5952 1452 * - 'E[achnops]' For an escaped buffer, where rules are defined by combination 1453 * of the following flags (see string_escape_mem() for the 1454 * details): 1455 * a - ESCAPE_ANY 1456 * c - ESCAPE_SPECIAL 1457 * h - ESCAPE_HEX 1458 * n - ESCAPE_NULL 1459 * o - ESCAPE_OCTAL 1460 * p - ESCAPE_NP 1461 * s - ESCAPE_SPACE 1462 * By default ESCAPE_ANY_NP is used. 1463 * - 'U' For a 16 byte UUID/GUID, it prints the UUID/GUID in the form 1464 * "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" 1465 * Options for %pU are: 1466 * b big endian lower case hex (default) 1467 * B big endian UPPER case hex 1468 * l little endian lower case hex 1469 * L little endian UPPER case hex 1470 * big endian output byte order is: 1471 * [0][1][2][3]-[4][5]-[6][7]-[8][9]-[10][11][12][13][14][15] 1472 * little endian output byte order is: 1473 * [3][2][1][0]-[5][4]-[7][6]-[8][9]-[10][11][12][13][14][15] 1474 * - 'V' For a struct va_format which contains a format string * and va_list *, 1475 * call vsnprintf(->format, *->va_list). 1476 * Implements a "recursive vsnprintf". 1477 * Do not use this feature without some mechanism to verify the 1478 * correctness of the format string and va_list arguments. 1479 * - 'K' For a kernel pointer that should be hidden from unprivileged users 1480 * - 'NF' For a netdev_features_t 1481 * - 'h[CDN]' For a variable-length buffer, it prints it as a hex string with 1482 * a certain separator (' ' by default): 1483 * C colon 1484 * D dash 1485 * N no separator 1486 * The maximum supported length is 64 bytes of the input. Consider 1487 * to use print_hex_dump() for the larger input. 1488 * - 'a[pd]' For address types [p] phys_addr_t, [d] dma_addr_t and derivatives 1489 * (default assumed to be phys_addr_t, passed by reference) 1490 * - 'd[234]' For a dentry name (optionally 2-4 last components) 1491 * - 'D[234]' Same as 'd' but for a struct file 1492 * - 'g' For block_device name (gendisk + partition number) 1493 * - 'C' For a clock, it prints the name (Common Clock Framework) or address 1494 * (legacy clock framework) of the clock 1495 * - 'Cn' For a clock, it prints the name (Common Clock Framework) or address 1496 * (legacy clock framework) of the clock 1497 * - 'Cr' For a clock, it prints the current rate of the clock 1498 * 1499 * ** Please update also Documentation/printk-formats.txt when making changes ** 1500 * 1501 * Note: The difference between 'S' and 'F' is that on ia64 and ppc64 1502 * function pointers are really function descriptors, which contain a 1503 * pointer to the real address. 1504 */ 1505 static noinline_for_stack 1506 char *pointer(const char *fmt, char *buf, char *end, void *ptr, 1507 struct printf_spec spec) 1508 { 1509 const int default_width = 2 * sizeof(void *); 1510 1511 if (!ptr && *fmt != 'K') { 1512 /* 1513 * Print (null) with the same width as a pointer so it makes 1514 * tabular output look nice. 1515 */ 1516 if (spec.field_width == -1) 1517 spec.field_width = default_width; 1518 return string(buf, end, "(null)", spec); 1519 } 1520 1521 switch (*fmt) { 1522 case 'F': 1523 case 'f': 1524 ptr = dereference_function_descriptor(ptr); 1525 /* Fallthrough */ 1526 case 'S': 1527 case 's': 1528 case 'B': 1529 return symbol_string(buf, end, ptr, spec, fmt); 1530 case 'R': 1531 case 'r': 1532 return resource_string(buf, end, ptr, spec, fmt); 1533 case 'h': 1534 return hex_string(buf, end, ptr, spec, fmt); 1535 case 'b': 1536 switch (fmt[1]) { 1537 case 'l': 1538 return bitmap_list_string(buf, end, ptr, spec, fmt); 1539 default: 1540 return bitmap_string(buf, end, ptr, spec, fmt); 1541 } 1542 case 'M': /* Colon separated: 00:01:02:03:04:05 */ 1543 case 'm': /* Contiguous: 000102030405 */ 1544 /* [mM]F (FDDI) */ 1545 /* [mM]R (Reverse order; Bluetooth) */ 1546 return mac_address_string(buf, end, ptr, spec, fmt); 1547 case 'I': /* Formatted IP supported 1548 * 4: 1.2.3.4 1549 * 6: 0001:0203:...:0708 1550 * 6c: 1::708 or 1::1.2.3.4 1551 */ 1552 case 'i': /* Contiguous: 1553 * 4: 001.002.003.004 1554 * 6: 000102...0f 1555 */ 1556 switch (fmt[1]) { 1557 case '6': 1558 return ip6_addr_string(buf, end, ptr, spec, fmt); 1559 case '4': 1560 return ip4_addr_string(buf, end, ptr, spec, fmt); 1561 case 'S': { 1562 const union { 1563 struct sockaddr raw; 1564 struct sockaddr_in v4; 1565 struct sockaddr_in6 v6; 1566 } *sa = ptr; 1567 1568 switch (sa->raw.sa_family) { 1569 case AF_INET: 1570 return ip4_addr_string_sa(buf, end, &sa->v4, spec, fmt); 1571 case AF_INET6: 1572 return ip6_addr_string_sa(buf, end, &sa->v6, spec, fmt); 1573 default: 1574 return string(buf, end, "(invalid address)", spec); 1575 }} 1576 } 1577 break; 1578 case 'E': 1579 return escaped_string(buf, end, ptr, spec, fmt); 1580 case 'U': 1581 return uuid_string(buf, end, ptr, spec, fmt); 1582 case 'V': 1583 { 1584 va_list va; 1585 1586 va_copy(va, *((struct va_format *)ptr)->va); 1587 buf += vsnprintf(buf, end > buf ? end - buf : 0, 1588 ((struct va_format *)ptr)->fmt, va); 1589 va_end(va); 1590 return buf; 1591 } 1592 case 'K': 1593 switch (kptr_restrict) { 1594 case 0: 1595 /* Always print %pK values */ 1596 break; 1597 case 1: { 1598 const struct cred *cred; 1599 1600 /* 1601 * kptr_restrict==1 cannot be used in IRQ context 1602 * because its test for CAP_SYSLOG would be meaningless. 1603 */ 1604 if (in_irq() || in_serving_softirq() || in_nmi()) { 1605 if (spec.field_width == -1) 1606 spec.field_width = default_width; 1607 return string(buf, end, "pK-error", spec); 1608 } 1609 1610 /* 1611 * Only print the real pointer value if the current 1612 * process has CAP_SYSLOG and is running with the 1613 * same credentials it started with. This is because 1614 * access to files is checked at open() time, but %pK 1615 * checks permission at read() time. We don't want to 1616 * leak pointer values if a binary opens a file using 1617 * %pK and then elevates privileges before reading it. 1618 */ 1619 cred = current_cred(); 1620 if (!has_capability_noaudit(current, CAP_SYSLOG) || 1621 !uid_eq(cred->euid, cred->uid) || 1622 !gid_eq(cred->egid, cred->gid)) 1623 ptr = NULL; 1624 break; 1625 } 1626 case 2: 1627 default: 1628 /* Always print 0's for %pK */ 1629 ptr = NULL; 1630 break; 1631 } 1632 break; 1633 1634 case 'N': 1635 return netdev_bits(buf, end, ptr, fmt); 1636 case 'a': 1637 return address_val(buf, end, ptr, fmt); 1638 case 'd': 1639 return dentry_name(buf, end, ptr, spec, fmt); 1640 case 'C': 1641 return clock(buf, end, ptr, spec, fmt); 1642 case 'D': 1643 return dentry_name(buf, end, 1644 ((const struct file *)ptr)->f_path.dentry, 1645 spec, fmt); 1646 #ifdef CONFIG_BLOCK 1647 case 'g': 1648 return bdev_name(buf, end, ptr, spec, fmt); 1649 #endif 1650 1651 } 1652 spec.flags |= SMALL; 1653 if (spec.field_width == -1) { 1654 spec.field_width = default_width; 1655 spec.flags |= ZEROPAD; 1656 } 1657 spec.base = 16; 1658 1659 return number(buf, end, (unsigned long) ptr, spec); 1660 } 1661 1662 /* 1663 * Helper function to decode printf style format. 1664 * Each call decode a token from the format and return the 1665 * number of characters read (or likely the delta where it wants 1666 * to go on the next call). 1667 * The decoded token is returned through the parameters 1668 * 1669 * 'h', 'l', or 'L' for integer fields 1670 * 'z' support added 23/7/1999 S.H. 1671 * 'z' changed to 'Z' --davidm 1/25/99 1672 * 't' added for ptrdiff_t 1673 * 1674 * @fmt: the format string 1675 * @type of the token returned 1676 * @flags: various flags such as +, -, # tokens.. 1677 * @field_width: overwritten width 1678 * @base: base of the number (octal, hex, ...) 1679 * @precision: precision of a number 1680 * @qualifier: qualifier of a number (long, size_t, ...) 1681 */ 1682 static noinline_for_stack 1683 int format_decode(const char *fmt, struct printf_spec *spec) 1684 { 1685 const char *start = fmt; 1686 char qualifier; 1687 1688 /* we finished early by reading the field width */ 1689 if (spec->type == FORMAT_TYPE_WIDTH) { 1690 if (spec->field_width < 0) { 1691 spec->field_width = -spec->field_width; 1692 spec->flags |= LEFT; 1693 } 1694 spec->type = FORMAT_TYPE_NONE; 1695 goto precision; 1696 } 1697 1698 /* we finished early by reading the precision */ 1699 if (spec->type == FORMAT_TYPE_PRECISION) { 1700 if (spec->precision < 0) 1701 spec->precision = 0; 1702 1703 spec->type = FORMAT_TYPE_NONE; 1704 goto qualifier; 1705 } 1706 1707 /* By default */ 1708 spec->type = FORMAT_TYPE_NONE; 1709 1710 for (; *fmt ; ++fmt) { 1711 if (*fmt == '%') 1712 break; 1713 } 1714 1715 /* Return the current non-format string */ 1716 if (fmt != start || !*fmt) 1717 return fmt - start; 1718 1719 /* Process flags */ 1720 spec->flags = 0; 1721 1722 while (1) { /* this also skips first '%' */ 1723 bool found = true; 1724 1725 ++fmt; 1726 1727 switch (*fmt) { 1728 case '-': spec->flags |= LEFT; break; 1729 case '+': spec->flags |= PLUS; break; 1730 case ' ': spec->flags |= SPACE; break; 1731 case '#': spec->flags |= SPECIAL; break; 1732 case '0': spec->flags |= ZEROPAD; break; 1733 default: found = false; 1734 } 1735 1736 if (!found) 1737 break; 1738 } 1739 1740 /* get field width */ 1741 spec->field_width = -1; 1742 1743 if (isdigit(*fmt)) 1744 spec->field_width = skip_atoi(&fmt); 1745 else if (*fmt == '*') { 1746 /* it's the next argument */ 1747 spec->type = FORMAT_TYPE_WIDTH; 1748 return ++fmt - start; 1749 } 1750 1751 precision: 1752 /* get the precision */ 1753 spec->precision = -1; 1754 if (*fmt == '.') { 1755 ++fmt; 1756 if (isdigit(*fmt)) { 1757 spec->precision = skip_atoi(&fmt); 1758 if (spec->precision < 0) 1759 spec->precision = 0; 1760 } else if (*fmt == '*') { 1761 /* it's the next argument */ 1762 spec->type = FORMAT_TYPE_PRECISION; 1763 return ++fmt - start; 1764 } 1765 } 1766 1767 qualifier: 1768 /* get the conversion qualifier */ 1769 qualifier = 0; 1770 if (*fmt == 'h' || _tolower(*fmt) == 'l' || 1771 _tolower(*fmt) == 'z' || *fmt == 't') { 1772 qualifier = *fmt++; 1773 if (unlikely(qualifier == *fmt)) { 1774 if (qualifier == 'l') { 1775 qualifier = 'L'; 1776 ++fmt; 1777 } else if (qualifier == 'h') { 1778 qualifier = 'H'; 1779 ++fmt; 1780 } 1781 } 1782 } 1783 1784 /* default base */ 1785 spec->base = 10; 1786 switch (*fmt) { 1787 case 'c': 1788 spec->type = FORMAT_TYPE_CHAR; 1789 return ++fmt - start; 1790 1791 case 's': 1792 spec->type = FORMAT_TYPE_STR; 1793 return ++fmt - start; 1794 1795 case 'p': 1796 spec->type = FORMAT_TYPE_PTR; 1797 return ++fmt - start; 1798 1799 case '%': 1800 spec->type = FORMAT_TYPE_PERCENT_CHAR; 1801 return ++fmt - start; 1802 1803 /* integer number formats - set up the flags and "break" */ 1804 case 'o': 1805 spec->base = 8; 1806 break; 1807 1808 case 'x': 1809 spec->flags |= SMALL; 1810 1811 case 'X': 1812 spec->base = 16; 1813 break; 1814 1815 case 'd': 1816 case 'i': 1817 spec->flags |= SIGN; 1818 case 'u': 1819 break; 1820 1821 case 'n': 1822 /* 1823 * Since %n poses a greater security risk than 1824 * utility, treat it as any other invalid or 1825 * unsupported format specifier. 1826 */ 1827 /* Fall-through */ 1828 1829 default: 1830 WARN_ONCE(1, "Please remove unsupported %%%c in format string\n", *fmt); 1831 spec->type = FORMAT_TYPE_INVALID; 1832 return fmt - start; 1833 } 1834 1835 if (qualifier == 'L') 1836 spec->type = FORMAT_TYPE_LONG_LONG; 1837 else if (qualifier == 'l') { 1838 BUILD_BUG_ON(FORMAT_TYPE_ULONG + SIGN != FORMAT_TYPE_LONG); 1839 spec->type = FORMAT_TYPE_ULONG + (spec->flags & SIGN); 1840 } else if (_tolower(qualifier) == 'z') { 1841 spec->type = FORMAT_TYPE_SIZE_T; 1842 } else if (qualifier == 't') { 1843 spec->type = FORMAT_TYPE_PTRDIFF; 1844 } else if (qualifier == 'H') { 1845 BUILD_BUG_ON(FORMAT_TYPE_UBYTE + SIGN != FORMAT_TYPE_BYTE); 1846 spec->type = FORMAT_TYPE_UBYTE + (spec->flags & SIGN); 1847 } else if (qualifier == 'h') { 1848 BUILD_BUG_ON(FORMAT_TYPE_USHORT + SIGN != FORMAT_TYPE_SHORT); 1849 spec->type = FORMAT_TYPE_USHORT + (spec->flags & SIGN); 1850 } else { 1851 BUILD_BUG_ON(FORMAT_TYPE_UINT + SIGN != FORMAT_TYPE_INT); 1852 spec->type = FORMAT_TYPE_UINT + (spec->flags & SIGN); 1853 } 1854 1855 return ++fmt - start; 1856 } 1857 1858 static void 1859 set_field_width(struct printf_spec *spec, int width) 1860 { 1861 spec->field_width = width; 1862 if (WARN_ONCE(spec->field_width != width, "field width %d too large", width)) { 1863 spec->field_width = clamp(width, -FIELD_WIDTH_MAX, FIELD_WIDTH_MAX); 1864 } 1865 } 1866 1867 static void 1868 set_precision(struct printf_spec *spec, int prec) 1869 { 1870 spec->precision = prec; 1871 if (WARN_ONCE(spec->precision != prec, "precision %d too large", prec)) { 1872 spec->precision = clamp(prec, 0, PRECISION_MAX); 1873 } 1874 } 1875 1876 /** 1877 * vsnprintf - Format a string and place it in a buffer 1878 * @buf: The buffer to place the result into 1879 * @size: The size of the buffer, including the trailing null space 1880 * @fmt: The format string to use 1881 * @args: Arguments for the format string 1882 * 1883 * This function generally follows C99 vsnprintf, but has some 1884 * extensions and a few limitations: 1885 * 1886 * %n is unsupported 1887 * %p* is handled by pointer() 1888 * 1889 * See pointer() or Documentation/printk-formats.txt for more 1890 * extensive description. 1891 * 1892 * ** Please update the documentation in both places when making changes ** 1893 * 1894 * The return value is the number of characters which would 1895 * be generated for the given input, excluding the trailing 1896 * '\0', as per ISO C99. If you want to have the exact 1897 * number of characters written into @buf as return value 1898 * (not including the trailing '\0'), use vscnprintf(). If the 1899 * return is greater than or equal to @size, the resulting 1900 * string is truncated. 1901 * 1902 * If you're not already dealing with a va_list consider using snprintf(). 1903 */ 1904 int vsnprintf(char *buf, size_t size, const char *fmt, va_list args) 1905 { 1906 unsigned long long num; 1907 char *str, *end; 1908 struct printf_spec spec = {0}; 1909 1910 /* Reject out-of-range values early. Large positive sizes are 1911 used for unknown buffer sizes. */ 1912 if (WARN_ON_ONCE(size > INT_MAX)) 1913 return 0; 1914 1915 str = buf; 1916 end = buf + size; 1917 1918 /* Make sure end is always >= buf */ 1919 if (end < buf) { 1920 end = ((void *)-1); 1921 size = end - buf; 1922 } 1923 1924 while (*fmt) { 1925 const char *old_fmt = fmt; 1926 int read = format_decode(fmt, &spec); 1927 1928 fmt += read; 1929 1930 switch (spec.type) { 1931 case FORMAT_TYPE_NONE: { 1932 int copy = read; 1933 if (str < end) { 1934 if (copy > end - str) 1935 copy = end - str; 1936 memcpy(str, old_fmt, copy); 1937 } 1938 str += read; 1939 break; 1940 } 1941 1942 case FORMAT_TYPE_WIDTH: 1943 set_field_width(&spec, va_arg(args, int)); 1944 break; 1945 1946 case FORMAT_TYPE_PRECISION: 1947 set_precision(&spec, va_arg(args, int)); 1948 break; 1949 1950 case FORMAT_TYPE_CHAR: { 1951 char c; 1952 1953 if (!(spec.flags & LEFT)) { 1954 while (--spec.field_width > 0) { 1955 if (str < end) 1956 *str = ' '; 1957 ++str; 1958 1959 } 1960 } 1961 c = (unsigned char) va_arg(args, int); 1962 if (str < end) 1963 *str = c; 1964 ++str; 1965 while (--spec.field_width > 0) { 1966 if (str < end) 1967 *str = ' '; 1968 ++str; 1969 } 1970 break; 1971 } 1972 1973 case FORMAT_TYPE_STR: 1974 str = string(str, end, va_arg(args, char *), spec); 1975 break; 1976 1977 case FORMAT_TYPE_PTR: 1978 str = pointer(fmt, str, end, va_arg(args, void *), 1979 spec); 1980 while (isalnum(*fmt)) 1981 fmt++; 1982 break; 1983 1984 case FORMAT_TYPE_PERCENT_CHAR: 1985 if (str < end) 1986 *str = '%'; 1987 ++str; 1988 break; 1989 1990 case FORMAT_TYPE_INVALID: 1991 /* 1992 * Presumably the arguments passed gcc's type 1993 * checking, but there is no safe or sane way 1994 * for us to continue parsing the format and 1995 * fetching from the va_list; the remaining 1996 * specifiers and arguments would be out of 1997 * sync. 1998 */ 1999 goto out; 2000 2001 default: 2002 switch (spec.type) { 2003 case FORMAT_TYPE_LONG_LONG: 2004 num = va_arg(args, long long); 2005 break; 2006 case FORMAT_TYPE_ULONG: 2007 num = va_arg(args, unsigned long); 2008 break; 2009 case FORMAT_TYPE_LONG: 2010 num = va_arg(args, long); 2011 break; 2012 case FORMAT_TYPE_SIZE_T: 2013 if (spec.flags & SIGN) 2014 num = va_arg(args, ssize_t); 2015 else 2016 num = va_arg(args, size_t); 2017 break; 2018 case FORMAT_TYPE_PTRDIFF: 2019 num = va_arg(args, ptrdiff_t); 2020 break; 2021 case FORMAT_TYPE_UBYTE: 2022 num = (unsigned char) va_arg(args, int); 2023 break; 2024 case FORMAT_TYPE_BYTE: 2025 num = (signed char) va_arg(args, int); 2026 break; 2027 case FORMAT_TYPE_USHORT: 2028 num = (unsigned short) va_arg(args, int); 2029 break; 2030 case FORMAT_TYPE_SHORT: 2031 num = (short) va_arg(args, int); 2032 break; 2033 case FORMAT_TYPE_INT: 2034 num = (int) va_arg(args, int); 2035 break; 2036 default: 2037 num = va_arg(args, unsigned int); 2038 } 2039 2040 str = number(str, end, num, spec); 2041 } 2042 } 2043 2044 out: 2045 if (size > 0) { 2046 if (str < end) 2047 *str = '\0'; 2048 else 2049 end[-1] = '\0'; 2050 } 2051 2052 /* the trailing null byte doesn't count towards the total */ 2053 return str-buf; 2054 2055 } 2056 EXPORT_SYMBOL(vsnprintf); 2057 2058 /** 2059 * vscnprintf - Format a string and place it in a buffer 2060 * @buf: The buffer to place the result into 2061 * @size: The size of the buffer, including the trailing null space 2062 * @fmt: The format string to use 2063 * @args: Arguments for the format string 2064 * 2065 * The return value is the number of characters which have been written into 2066 * the @buf not including the trailing '\0'. If @size is == 0 the function 2067 * returns 0. 2068 * 2069 * If you're not already dealing with a va_list consider using scnprintf(). 2070 * 2071 * See the vsnprintf() documentation for format string extensions over C99. 2072 */ 2073 int vscnprintf(char *buf, size_t size, const char *fmt, va_list args) 2074 { 2075 int i; 2076 2077 i = vsnprintf(buf, size, fmt, args); 2078 2079 if (likely(i < size)) 2080 return i; 2081 if (size != 0) 2082 return size - 1; 2083 return 0; 2084 } 2085 EXPORT_SYMBOL(vscnprintf); 2086 2087 /** 2088 * snprintf - Format a string and place it in a buffer 2089 * @buf: The buffer to place the result into 2090 * @size: The size of the buffer, including the trailing null space 2091 * @fmt: The format string to use 2092 * @...: Arguments for the format string 2093 * 2094 * The return value is the number of characters which would be 2095 * generated for the given input, excluding the trailing null, 2096 * as per ISO C99. If the return is greater than or equal to 2097 * @size, the resulting string is truncated. 2098 * 2099 * See the vsnprintf() documentation for format string extensions over C99. 2100 */ 2101 int snprintf(char *buf, size_t size, const char *fmt, ...) 2102 { 2103 va_list args; 2104 int i; 2105 2106 va_start(args, fmt); 2107 i = vsnprintf(buf, size, fmt, args); 2108 va_end(args); 2109 2110 return i; 2111 } 2112 EXPORT_SYMBOL(snprintf); 2113 2114 /** 2115 * scnprintf - Format a string and place it in a buffer 2116 * @buf: The buffer to place the result into 2117 * @size: The size of the buffer, including the trailing null space 2118 * @fmt: The format string to use 2119 * @...: Arguments for the format string 2120 * 2121 * The return value is the number of characters written into @buf not including 2122 * the trailing '\0'. If @size is == 0 the function returns 0. 2123 */ 2124 2125 int scnprintf(char *buf, size_t size, const char *fmt, ...) 2126 { 2127 va_list args; 2128 int i; 2129 2130 va_start(args, fmt); 2131 i = vscnprintf(buf, size, fmt, args); 2132 va_end(args); 2133 2134 return i; 2135 } 2136 EXPORT_SYMBOL(scnprintf); 2137 2138 /** 2139 * vsprintf - Format a string and place it in a buffer 2140 * @buf: The buffer to place the result into 2141 * @fmt: The format string to use 2142 * @args: Arguments for the format string 2143 * 2144 * The function returns the number of characters written 2145 * into @buf. Use vsnprintf() or vscnprintf() in order to avoid 2146 * buffer overflows. 2147 * 2148 * If you're not already dealing with a va_list consider using sprintf(). 2149 * 2150 * See the vsnprintf() documentation for format string extensions over C99. 2151 */ 2152 int vsprintf(char *buf, const char *fmt, va_list args) 2153 { 2154 return vsnprintf(buf, INT_MAX, fmt, args); 2155 } 2156 EXPORT_SYMBOL(vsprintf); 2157 2158 /** 2159 * sprintf - Format a string and place it in a buffer 2160 * @buf: The buffer to place the result into 2161 * @fmt: The format string to use 2162 * @...: Arguments for the format string 2163 * 2164 * The function returns the number of characters written 2165 * into @buf. Use snprintf() or scnprintf() in order to avoid 2166 * buffer overflows. 2167 * 2168 * See the vsnprintf() documentation for format string extensions over C99. 2169 */ 2170 int sprintf(char *buf, const char *fmt, ...) 2171 { 2172 va_list args; 2173 int i; 2174 2175 va_start(args, fmt); 2176 i = vsnprintf(buf, INT_MAX, fmt, args); 2177 va_end(args); 2178 2179 return i; 2180 } 2181 EXPORT_SYMBOL(sprintf); 2182 2183 #ifdef CONFIG_BINARY_PRINTF 2184 /* 2185 * bprintf service: 2186 * vbin_printf() - VA arguments to binary data 2187 * bstr_printf() - Binary data to text string 2188 */ 2189 2190 /** 2191 * vbin_printf - Parse a format string and place args' binary value in a buffer 2192 * @bin_buf: The buffer to place args' binary value 2193 * @size: The size of the buffer(by words(32bits), not characters) 2194 * @fmt: The format string to use 2195 * @args: Arguments for the format string 2196 * 2197 * The format follows C99 vsnprintf, except %n is ignored, and its argument 2198 * is skipped. 2199 * 2200 * The return value is the number of words(32bits) which would be generated for 2201 * the given input. 2202 * 2203 * NOTE: 2204 * If the return value is greater than @size, the resulting bin_buf is NOT 2205 * valid for bstr_printf(). 2206 */ 2207 int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args) 2208 { 2209 struct printf_spec spec = {0}; 2210 char *str, *end; 2211 2212 str = (char *)bin_buf; 2213 end = (char *)(bin_buf + size); 2214 2215 #define save_arg(type) \ 2216 do { \ 2217 if (sizeof(type) == 8) { \ 2218 unsigned long long value; \ 2219 str = PTR_ALIGN(str, sizeof(u32)); \ 2220 value = va_arg(args, unsigned long long); \ 2221 if (str + sizeof(type) <= end) { \ 2222 *(u32 *)str = *(u32 *)&value; \ 2223 *(u32 *)(str + 4) = *((u32 *)&value + 1); \ 2224 } \ 2225 } else { \ 2226 unsigned long value; \ 2227 str = PTR_ALIGN(str, sizeof(type)); \ 2228 value = va_arg(args, int); \ 2229 if (str + sizeof(type) <= end) \ 2230 *(typeof(type) *)str = (type)value; \ 2231 } \ 2232 str += sizeof(type); \ 2233 } while (0) 2234 2235 while (*fmt) { 2236 int read = format_decode(fmt, &spec); 2237 2238 fmt += read; 2239 2240 switch (spec.type) { 2241 case FORMAT_TYPE_NONE: 2242 case FORMAT_TYPE_PERCENT_CHAR: 2243 break; 2244 case FORMAT_TYPE_INVALID: 2245 goto out; 2246 2247 case FORMAT_TYPE_WIDTH: 2248 case FORMAT_TYPE_PRECISION: 2249 save_arg(int); 2250 break; 2251 2252 case FORMAT_TYPE_CHAR: 2253 save_arg(char); 2254 break; 2255 2256 case FORMAT_TYPE_STR: { 2257 const char *save_str = va_arg(args, char *); 2258 size_t len; 2259 2260 if ((unsigned long)save_str > (unsigned long)-PAGE_SIZE 2261 || (unsigned long)save_str < PAGE_SIZE) 2262 save_str = "(null)"; 2263 len = strlen(save_str) + 1; 2264 if (str + len < end) 2265 memcpy(str, save_str, len); 2266 str += len; 2267 break; 2268 } 2269 2270 case FORMAT_TYPE_PTR: 2271 save_arg(void *); 2272 /* skip all alphanumeric pointer suffixes */ 2273 while (isalnum(*fmt)) 2274 fmt++; 2275 break; 2276 2277 default: 2278 switch (spec.type) { 2279 2280 case FORMAT_TYPE_LONG_LONG: 2281 save_arg(long long); 2282 break; 2283 case FORMAT_TYPE_ULONG: 2284 case FORMAT_TYPE_LONG: 2285 save_arg(unsigned long); 2286 break; 2287 case FORMAT_TYPE_SIZE_T: 2288 save_arg(size_t); 2289 break; 2290 case FORMAT_TYPE_PTRDIFF: 2291 save_arg(ptrdiff_t); 2292 break; 2293 case FORMAT_TYPE_UBYTE: 2294 case FORMAT_TYPE_BYTE: 2295 save_arg(char); 2296 break; 2297 case FORMAT_TYPE_USHORT: 2298 case FORMAT_TYPE_SHORT: 2299 save_arg(short); 2300 break; 2301 default: 2302 save_arg(int); 2303 } 2304 } 2305 } 2306 2307 out: 2308 return (u32 *)(PTR_ALIGN(str, sizeof(u32))) - bin_buf; 2309 #undef save_arg 2310 } 2311 EXPORT_SYMBOL_GPL(vbin_printf); 2312 2313 /** 2314 * bstr_printf - Format a string from binary arguments and place it in a buffer 2315 * @buf: The buffer to place the result into 2316 * @size: The size of the buffer, including the trailing null space 2317 * @fmt: The format string to use 2318 * @bin_buf: Binary arguments for the format string 2319 * 2320 * This function like C99 vsnprintf, but the difference is that vsnprintf gets 2321 * arguments from stack, and bstr_printf gets arguments from @bin_buf which is 2322 * a binary buffer that generated by vbin_printf. 2323 * 2324 * The format follows C99 vsnprintf, but has some extensions: 2325 * see vsnprintf comment for details. 2326 * 2327 * The return value is the number of characters which would 2328 * be generated for the given input, excluding the trailing 2329 * '\0', as per ISO C99. If you want to have the exact 2330 * number of characters written into @buf as return value 2331 * (not including the trailing '\0'), use vscnprintf(). If the 2332 * return is greater than or equal to @size, the resulting 2333 * string is truncated. 2334 */ 2335 int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) 2336 { 2337 struct printf_spec spec = {0}; 2338 char *str, *end; 2339 const char *args = (const char *)bin_buf; 2340 2341 if (WARN_ON_ONCE(size > INT_MAX)) 2342 return 0; 2343 2344 str = buf; 2345 end = buf + size; 2346 2347 #define get_arg(type) \ 2348 ({ \ 2349 typeof(type) value; \ 2350 if (sizeof(type) == 8) { \ 2351 args = PTR_ALIGN(args, sizeof(u32)); \ 2352 *(u32 *)&value = *(u32 *)args; \ 2353 *((u32 *)&value + 1) = *(u32 *)(args + 4); \ 2354 } else { \ 2355 args = PTR_ALIGN(args, sizeof(type)); \ 2356 value = *(typeof(type) *)args; \ 2357 } \ 2358 args += sizeof(type); \ 2359 value; \ 2360 }) 2361 2362 /* Make sure end is always >= buf */ 2363 if (end < buf) { 2364 end = ((void *)-1); 2365 size = end - buf; 2366 } 2367 2368 while (*fmt) { 2369 const char *old_fmt = fmt; 2370 int read = format_decode(fmt, &spec); 2371 2372 fmt += read; 2373 2374 switch (spec.type) { 2375 case FORMAT_TYPE_NONE: { 2376 int copy = read; 2377 if (str < end) { 2378 if (copy > end - str) 2379 copy = end - str; 2380 memcpy(str, old_fmt, copy); 2381 } 2382 str += read; 2383 break; 2384 } 2385 2386 case FORMAT_TYPE_WIDTH: 2387 set_field_width(&spec, get_arg(int)); 2388 break; 2389 2390 case FORMAT_TYPE_PRECISION: 2391 set_precision(&spec, get_arg(int)); 2392 break; 2393 2394 case FORMAT_TYPE_CHAR: { 2395 char c; 2396 2397 if (!(spec.flags & LEFT)) { 2398 while (--spec.field_width > 0) { 2399 if (str < end) 2400 *str = ' '; 2401 ++str; 2402 } 2403 } 2404 c = (unsigned char) get_arg(char); 2405 if (str < end) 2406 *str = c; 2407 ++str; 2408 while (--spec.field_width > 0) { 2409 if (str < end) 2410 *str = ' '; 2411 ++str; 2412 } 2413 break; 2414 } 2415 2416 case FORMAT_TYPE_STR: { 2417 const char *str_arg = args; 2418 args += strlen(str_arg) + 1; 2419 str = string(str, end, (char *)str_arg, spec); 2420 break; 2421 } 2422 2423 case FORMAT_TYPE_PTR: 2424 str = pointer(fmt, str, end, get_arg(void *), spec); 2425 while (isalnum(*fmt)) 2426 fmt++; 2427 break; 2428 2429 case FORMAT_TYPE_PERCENT_CHAR: 2430 if (str < end) 2431 *str = '%'; 2432 ++str; 2433 break; 2434 2435 case FORMAT_TYPE_INVALID: 2436 goto out; 2437 2438 default: { 2439 unsigned long long num; 2440 2441 switch (spec.type) { 2442 2443 case FORMAT_TYPE_LONG_LONG: 2444 num = get_arg(long long); 2445 break; 2446 case FORMAT_TYPE_ULONG: 2447 case FORMAT_TYPE_LONG: 2448 num = get_arg(unsigned long); 2449 break; 2450 case FORMAT_TYPE_SIZE_T: 2451 num = get_arg(size_t); 2452 break; 2453 case FORMAT_TYPE_PTRDIFF: 2454 num = get_arg(ptrdiff_t); 2455 break; 2456 case FORMAT_TYPE_UBYTE: 2457 num = get_arg(unsigned char); 2458 break; 2459 case FORMAT_TYPE_BYTE: 2460 num = get_arg(signed char); 2461 break; 2462 case FORMAT_TYPE_USHORT: 2463 num = get_arg(unsigned short); 2464 break; 2465 case FORMAT_TYPE_SHORT: 2466 num = get_arg(short); 2467 break; 2468 case FORMAT_TYPE_UINT: 2469 num = get_arg(unsigned int); 2470 break; 2471 default: 2472 num = get_arg(int); 2473 } 2474 2475 str = number(str, end, num, spec); 2476 } /* default: */ 2477 } /* switch(spec.type) */ 2478 } /* while(*fmt) */ 2479 2480 out: 2481 if (size > 0) { 2482 if (str < end) 2483 *str = '\0'; 2484 else 2485 end[-1] = '\0'; 2486 } 2487 2488 #undef get_arg 2489 2490 /* the trailing null byte doesn't count towards the total */ 2491 return str - buf; 2492 } 2493 EXPORT_SYMBOL_GPL(bstr_printf); 2494 2495 /** 2496 * bprintf - Parse a format string and place args' binary value in a buffer 2497 * @bin_buf: The buffer to place args' binary value 2498 * @size: The size of the buffer(by words(32bits), not characters) 2499 * @fmt: The format string to use 2500 * @...: Arguments for the format string 2501 * 2502 * The function returns the number of words(u32) written 2503 * into @bin_buf. 2504 */ 2505 int bprintf(u32 *bin_buf, size_t size, const char *fmt, ...) 2506 { 2507 va_list args; 2508 int ret; 2509 2510 va_start(args, fmt); 2511 ret = vbin_printf(bin_buf, size, fmt, args); 2512 va_end(args); 2513 2514 return ret; 2515 } 2516 EXPORT_SYMBOL_GPL(bprintf); 2517 2518 #endif /* CONFIG_BINARY_PRINTF */ 2519 2520 /** 2521 * vsscanf - Unformat a buffer into a list of arguments 2522 * @buf: input buffer 2523 * @fmt: format of buffer 2524 * @args: arguments 2525 */ 2526 int vsscanf(const char *buf, const char *fmt, va_list args) 2527 { 2528 const char *str = buf; 2529 char *next; 2530 char digit; 2531 int num = 0; 2532 u8 qualifier; 2533 unsigned int base; 2534 union { 2535 long long s; 2536 unsigned long long u; 2537 } val; 2538 s16 field_width; 2539 bool is_sign; 2540 2541 while (*fmt) { 2542 /* skip any white space in format */ 2543 /* white space in format matchs any amount of 2544 * white space, including none, in the input. 2545 */ 2546 if (isspace(*fmt)) { 2547 fmt = skip_spaces(++fmt); 2548 str = skip_spaces(str); 2549 } 2550 2551 /* anything that is not a conversion must match exactly */ 2552 if (*fmt != '%' && *fmt) { 2553 if (*fmt++ != *str++) 2554 break; 2555 continue; 2556 } 2557 2558 if (!*fmt) 2559 break; 2560 ++fmt; 2561 2562 /* skip this conversion. 2563 * advance both strings to next white space 2564 */ 2565 if (*fmt == '*') { 2566 if (!*str) 2567 break; 2568 while (!isspace(*fmt) && *fmt != '%' && *fmt) 2569 fmt++; 2570 while (!isspace(*str) && *str) 2571 str++; 2572 continue; 2573 } 2574 2575 /* get field width */ 2576 field_width = -1; 2577 if (isdigit(*fmt)) { 2578 field_width = skip_atoi(&fmt); 2579 if (field_width <= 0) 2580 break; 2581 } 2582 2583 /* get conversion qualifier */ 2584 qualifier = -1; 2585 if (*fmt == 'h' || _tolower(*fmt) == 'l' || 2586 _tolower(*fmt) == 'z') { 2587 qualifier = *fmt++; 2588 if (unlikely(qualifier == *fmt)) { 2589 if (qualifier == 'h') { 2590 qualifier = 'H'; 2591 fmt++; 2592 } else if (qualifier == 'l') { 2593 qualifier = 'L'; 2594 fmt++; 2595 } 2596 } 2597 } 2598 2599 if (!*fmt) 2600 break; 2601 2602 if (*fmt == 'n') { 2603 /* return number of characters read so far */ 2604 *va_arg(args, int *) = str - buf; 2605 ++fmt; 2606 continue; 2607 } 2608 2609 if (!*str) 2610 break; 2611 2612 base = 10; 2613 is_sign = false; 2614 2615 switch (*fmt++) { 2616 case 'c': 2617 { 2618 char *s = (char *)va_arg(args, char*); 2619 if (field_width == -1) 2620 field_width = 1; 2621 do { 2622 *s++ = *str++; 2623 } while (--field_width > 0 && *str); 2624 num++; 2625 } 2626 continue; 2627 case 's': 2628 { 2629 char *s = (char *)va_arg(args, char *); 2630 if (field_width == -1) 2631 field_width = SHRT_MAX; 2632 /* first, skip leading white space in buffer */ 2633 str = skip_spaces(str); 2634 2635 /* now copy until next white space */ 2636 while (*str && !isspace(*str) && field_width--) 2637 *s++ = *str++; 2638 *s = '\0'; 2639 num++; 2640 } 2641 continue; 2642 case 'o': 2643 base = 8; 2644 break; 2645 case 'x': 2646 case 'X': 2647 base = 16; 2648 break; 2649 case 'i': 2650 base = 0; 2651 case 'd': 2652 is_sign = true; 2653 case 'u': 2654 break; 2655 case '%': 2656 /* looking for '%' in str */ 2657 if (*str++ != '%') 2658 return num; 2659 continue; 2660 default: 2661 /* invalid format; stop here */ 2662 return num; 2663 } 2664 2665 /* have some sort of integer conversion. 2666 * first, skip white space in buffer. 2667 */ 2668 str = skip_spaces(str); 2669 2670 digit = *str; 2671 if (is_sign && digit == '-') 2672 digit = *(str + 1); 2673 2674 if (!digit 2675 || (base == 16 && !isxdigit(digit)) 2676 || (base == 10 && !isdigit(digit)) 2677 || (base == 8 && (!isdigit(digit) || digit > '7')) 2678 || (base == 0 && !isdigit(digit))) 2679 break; 2680 2681 if (is_sign) 2682 val.s = qualifier != 'L' ? 2683 simple_strtol(str, &next, base) : 2684 simple_strtoll(str, &next, base); 2685 else 2686 val.u = qualifier != 'L' ? 2687 simple_strtoul(str, &next, base) : 2688 simple_strtoull(str, &next, base); 2689 2690 if (field_width > 0 && next - str > field_width) { 2691 if (base == 0) 2692 _parse_integer_fixup_radix(str, &base); 2693 while (next - str > field_width) { 2694 if (is_sign) 2695 val.s = div_s64(val.s, base); 2696 else 2697 val.u = div_u64(val.u, base); 2698 --next; 2699 } 2700 } 2701 2702 switch (qualifier) { 2703 case 'H': /* that's 'hh' in format */ 2704 if (is_sign) 2705 *va_arg(args, signed char *) = val.s; 2706 else 2707 *va_arg(args, unsigned char *) = val.u; 2708 break; 2709 case 'h': 2710 if (is_sign) 2711 *va_arg(args, short *) = val.s; 2712 else 2713 *va_arg(args, unsigned short *) = val.u; 2714 break; 2715 case 'l': 2716 if (is_sign) 2717 *va_arg(args, long *) = val.s; 2718 else 2719 *va_arg(args, unsigned long *) = val.u; 2720 break; 2721 case 'L': 2722 if (is_sign) 2723 *va_arg(args, long long *) = val.s; 2724 else 2725 *va_arg(args, unsigned long long *) = val.u; 2726 break; 2727 case 'Z': 2728 case 'z': 2729 *va_arg(args, size_t *) = val.u; 2730 break; 2731 default: 2732 if (is_sign) 2733 *va_arg(args, int *) = val.s; 2734 else 2735 *va_arg(args, unsigned int *) = val.u; 2736 break; 2737 } 2738 num++; 2739 2740 if (!next) 2741 break; 2742 str = next; 2743 } 2744 2745 return num; 2746 } 2747 EXPORT_SYMBOL(vsscanf); 2748 2749 /** 2750 * sscanf - Unformat a buffer into a list of arguments 2751 * @buf: input buffer 2752 * @fmt: formatting of buffer 2753 * @...: resulting arguments 2754 */ 2755 int sscanf(const char *buf, const char *fmt, ...) 2756 { 2757 va_list args; 2758 int i; 2759 2760 va_start(args, fmt); 2761 i = vsscanf(buf, fmt, args); 2762 va_end(args); 2763 2764 return i; 2765 } 2766 EXPORT_SYMBOL(sscanf); 2767