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