Linux Audio

Check our new training course

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