Linux Audio

Check our new training course

Loading...
v5.14.15
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 *  linux/lib/vsprintf.c
   4 *
   5 *  Copyright (C) 1991, 1992  Linus Torvalds
   6 */
   7
   8/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */
   9/*
  10 * Wirzenius wrote this portably, Torvalds fucked it up :-)
  11 */
  12
  13/*
  14 * Fri Jul 13 2001 Crutcher Dunnavant <crutcher+kernel@datastacks.com>
  15 * - changed to provide snprintf and vsnprintf functions
  16 * So Feb  1 16:51:32 CET 2004 Juergen Quade <quade@hsnr.de>
  17 * - scnprintf and vscnprintf
  18 */
  19
  20#include <stdarg.h>
  21#include <linux/build_bug.h>
  22#include <linux/clk.h>
  23#include <linux/clk-provider.h>
  24#include <linux/errname.h>
  25#include <linux/module.h>	/* for KSYM_SYMBOL_LEN */
  26#include <linux/types.h>
  27#include <linux/string.h>
  28#include <linux/ctype.h>
  29#include <linux/kernel.h>
  30#include <linux/kallsyms.h>
  31#include <linux/math64.h>
  32#include <linux/uaccess.h>
  33#include <linux/ioport.h>
  34#include <linux/dcache.h>
  35#include <linux/cred.h>
  36#include <linux/rtc.h>
  37#include <linux/time.h>
  38#include <linux/uuid.h>
  39#include <linux/of.h>
  40#include <net/addrconf.h>
  41#include <linux/siphash.h>
  42#include <linux/compiler.h>
  43#include <linux/property.h>
  44#ifdef CONFIG_BLOCK
  45#include <linux/blkdev.h>
  46#endif
  47
  48#include "../mm/internal.h"	/* For the trace_print_flags arrays */
  49
  50#include <asm/page.h>		/* for PAGE_SIZE */
  51#include <asm/byteorder.h>	/* cpu_to_le16 */
  52
  53#include <linux/string_helpers.h>
  54#include "kstrtox.h"
  55
  56static unsigned long long simple_strntoull(const char *startp, size_t max_chars,
  57					   char **endp, unsigned int base)
  58{
  59	const char *cp;
  60	unsigned long long result = 0ULL;
  61	size_t prefix_chars;
  62	unsigned int rv;
  63
  64	cp = _parse_integer_fixup_radix(startp, &base);
  65	prefix_chars = cp - startp;
  66	if (prefix_chars < max_chars) {
  67		rv = _parse_integer_limit(cp, base, &result, max_chars - prefix_chars);
  68		/* FIXME */
  69		cp += (rv & ~KSTRTOX_OVERFLOW);
  70	} else {
  71		/* Field too short for prefix + digit, skip over without converting */
  72		cp = startp + max_chars;
  73	}
  74
  75	if (endp)
  76		*endp = (char *)cp;
  77
  78	return result;
  79}
  80
  81/**
  82 * simple_strtoull - convert a string to an unsigned long long
  83 * @cp: The start of the string
  84 * @endp: A pointer to the end of the parsed string will be placed here
  85 * @base: The number base to use
  86 *
  87 * This function has caveats. Please use kstrtoull instead.
  88 */
  89noinline
  90unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base)
  91{
  92	return simple_strntoull(cp, INT_MAX, endp, base);
 
 
 
 
 
 
 
 
 
 
 
  93}
  94EXPORT_SYMBOL(simple_strtoull);
  95
  96/**
  97 * simple_strtoul - convert a string to an unsigned long
  98 * @cp: The start of the string
  99 * @endp: A pointer to the end of the parsed string will be placed here
 100 * @base: The number base to use
 101 *
 102 * This function has caveats. Please use kstrtoul instead.
 103 */
 104unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)
 105{
 106	return simple_strtoull(cp, endp, base);
 107}
 108EXPORT_SYMBOL(simple_strtoul);
 109
 110/**
 111 * simple_strtol - convert a string to a signed long
 112 * @cp: The start of the string
 113 * @endp: A pointer to the end of the parsed string will be placed here
 114 * @base: The number base to use
 115 *
 116 * This function has caveats. Please use kstrtol instead.
 117 */
 118long simple_strtol(const char *cp, char **endp, unsigned int base)
 119{
 120	if (*cp == '-')
 121		return -simple_strtoul(cp + 1, endp, base);
 122
 123	return simple_strtoul(cp, endp, base);
 124}
 125EXPORT_SYMBOL(simple_strtol);
 126
 127static long long simple_strntoll(const char *cp, size_t max_chars, char **endp,
 128				 unsigned int base)
 129{
 130	/*
 131	 * simple_strntoull() safely handles receiving max_chars==0 in the
 132	 * case cp[0] == '-' && max_chars == 1.
 133	 * If max_chars == 0 we can drop through and pass it to simple_strntoull()
 134	 * and the content of *cp is irrelevant.
 135	 */
 136	if (*cp == '-' && max_chars > 0)
 137		return -simple_strntoull(cp + 1, max_chars - 1, endp, base);
 138
 139	return simple_strntoull(cp, max_chars, endp, base);
 140}
 141
 142/**
 143 * simple_strtoll - convert a string to a signed long long
 144 * @cp: The start of the string
 145 * @endp: A pointer to the end of the parsed string will be placed here
 146 * @base: The number base to use
 147 *
 148 * This function has caveats. Please use kstrtoll instead.
 149 */
 150long long simple_strtoll(const char *cp, char **endp, unsigned int base)
 151{
 152	return simple_strntoll(cp, INT_MAX, endp, base);
 
 
 
 153}
 154EXPORT_SYMBOL(simple_strtoll);
 155
 156static noinline_for_stack
 157int skip_atoi(const char **s)
 158{
 159	int i = 0;
 160
 161	do {
 162		i = i*10 + *((*s)++) - '0';
 163	} while (isdigit(**s));
 164
 165	return i;
 166}
 167
 168/*
 169 * Decimal conversion is by far the most typical, and is used for
 170 * /proc and /sys data. This directly impacts e.g. top performance
 171 * with many processes running. We optimize it for speed by emitting
 172 * two characters at a time, using a 200 byte lookup table. This
 173 * roughly halves the number of multiplications compared to computing
 174 * the digits one at a time. Implementation strongly inspired by the
 175 * previous version, which in turn used ideas described at
 176 * <http://www.cs.uiowa.edu/~jones/bcd/divide.html> (with permission
 177 * from the author, Douglas W. Jones).
 178 *
 179 * It turns out there is precisely one 26 bit fixed-point
 180 * approximation a of 64/100 for which x/100 == (x * (u64)a) >> 32
 181 * holds for all x in [0, 10^8-1], namely a = 0x28f5c29. The actual
 182 * range happens to be somewhat larger (x <= 1073741898), but that's
 183 * irrelevant for our purpose.
 184 *
 185 * For dividing a number in the range [10^4, 10^6-1] by 100, we still
 186 * need a 32x32->64 bit multiply, so we simply use the same constant.
 187 *
 188 * For dividing a number in the range [100, 10^4-1] by 100, there are
 189 * several options. The simplest is (x * 0x147b) >> 19, which is valid
 190 * for all x <= 43698.
 191 */
 192
 193static const u16 decpair[100] = {
 194#define _(x) (__force u16) cpu_to_le16(((x % 10) | ((x / 10) << 8)) + 0x3030)
 195	_( 0), _( 1), _( 2), _( 3), _( 4), _( 5), _( 6), _( 7), _( 8), _( 9),
 196	_(10), _(11), _(12), _(13), _(14), _(15), _(16), _(17), _(18), _(19),
 197	_(20), _(21), _(22), _(23), _(24), _(25), _(26), _(27), _(28), _(29),
 198	_(30), _(31), _(32), _(33), _(34), _(35), _(36), _(37), _(38), _(39),
 199	_(40), _(41), _(42), _(43), _(44), _(45), _(46), _(47), _(48), _(49),
 200	_(50), _(51), _(52), _(53), _(54), _(55), _(56), _(57), _(58), _(59),
 201	_(60), _(61), _(62), _(63), _(64), _(65), _(66), _(67), _(68), _(69),
 202	_(70), _(71), _(72), _(73), _(74), _(75), _(76), _(77), _(78), _(79),
 203	_(80), _(81), _(82), _(83), _(84), _(85), _(86), _(87), _(88), _(89),
 204	_(90), _(91), _(92), _(93), _(94), _(95), _(96), _(97), _(98), _(99),
 205#undef _
 206};
 207
 208/*
 209 * This will print a single '0' even if r == 0, since we would
 210 * immediately jump to out_r where two 0s would be written but only
 211 * one of them accounted for in buf. This is needed by ip4_string
 212 * below. All other callers pass a non-zero value of r.
 213*/
 214static noinline_for_stack
 215char *put_dec_trunc8(char *buf, unsigned r)
 216{
 217	unsigned q;
 218
 219	/* 1 <= r < 10^8 */
 220	if (r < 100)
 221		goto out_r;
 222
 223	/* 100 <= r < 10^8 */
 224	q = (r * (u64)0x28f5c29) >> 32;
 225	*((u16 *)buf) = decpair[r - 100*q];
 226	buf += 2;
 227
 228	/* 1 <= q < 10^6 */
 229	if (q < 100)
 230		goto out_q;
 231
 232	/*  100 <= q < 10^6 */
 233	r = (q * (u64)0x28f5c29) >> 32;
 234	*((u16 *)buf) = decpair[q - 100*r];
 235	buf += 2;
 236
 237	/* 1 <= r < 10^4 */
 238	if (r < 100)
 239		goto out_r;
 240
 241	/* 100 <= r < 10^4 */
 242	q = (r * 0x147b) >> 19;
 243	*((u16 *)buf) = decpair[r - 100*q];
 244	buf += 2;
 245out_q:
 246	/* 1 <= q < 100 */
 247	r = q;
 248out_r:
 249	/* 1 <= r < 100 */
 250	*((u16 *)buf) = decpair[r];
 251	buf += r < 10 ? 1 : 2;
 252	return buf;
 253}
 254
 255#if BITS_PER_LONG == 64 && BITS_PER_LONG_LONG == 64
 256static noinline_for_stack
 257char *put_dec_full8(char *buf, unsigned r)
 258{
 259	unsigned q;
 260
 261	/* 0 <= r < 10^8 */
 262	q = (r * (u64)0x28f5c29) >> 32;
 263	*((u16 *)buf) = decpair[r - 100*q];
 264	buf += 2;
 265
 266	/* 0 <= q < 10^6 */
 267	r = (q * (u64)0x28f5c29) >> 32;
 268	*((u16 *)buf) = decpair[q - 100*r];
 269	buf += 2;
 270
 271	/* 0 <= r < 10^4 */
 272	q = (r * 0x147b) >> 19;
 273	*((u16 *)buf) = decpair[r - 100*q];
 274	buf += 2;
 275
 276	/* 0 <= q < 100 */
 277	*((u16 *)buf) = decpair[q];
 278	buf += 2;
 279	return buf;
 280}
 281
 282static noinline_for_stack
 283char *put_dec(char *buf, unsigned long long n)
 284{
 285	if (n >= 100*1000*1000)
 286		buf = put_dec_full8(buf, do_div(n, 100*1000*1000));
 287	/* 1 <= n <= 1.6e11 */
 288	if (n >= 100*1000*1000)
 289		buf = put_dec_full8(buf, do_div(n, 100*1000*1000));
 290	/* 1 <= n < 1e8 */
 291	return put_dec_trunc8(buf, n);
 292}
 293
 294#elif BITS_PER_LONG == 32 && BITS_PER_LONG_LONG == 64
 295
 296static void
 297put_dec_full4(char *buf, unsigned r)
 298{
 299	unsigned q;
 300
 301	/* 0 <= r < 10^4 */
 302	q = (r * 0x147b) >> 19;
 303	*((u16 *)buf) = decpair[r - 100*q];
 304	buf += 2;
 305	/* 0 <= q < 100 */
 306	*((u16 *)buf) = decpair[q];
 307}
 308
 309/*
 310 * Call put_dec_full4 on x % 10000, return x / 10000.
 311 * The approximation x/10000 == (x * 0x346DC5D7) >> 43
 312 * holds for all x < 1,128,869,999.  The largest value this
 313 * helper will ever be asked to convert is 1,125,520,955.
 314 * (second call in the put_dec code, assuming n is all-ones).
 315 */
 316static noinline_for_stack
 317unsigned put_dec_helper4(char *buf, unsigned x)
 318{
 319        uint32_t q = (x * (uint64_t)0x346DC5D7) >> 43;
 320
 321        put_dec_full4(buf, x - q * 10000);
 322        return q;
 323}
 324
 325/* Based on code by Douglas W. Jones found at
 326 * <http://www.cs.uiowa.edu/~jones/bcd/decimal.html#sixtyfour>
 327 * (with permission from the author).
 328 * Performs no 64-bit division and hence should be fast on 32-bit machines.
 329 */
 330static
 331char *put_dec(char *buf, unsigned long long n)
 332{
 333	uint32_t d3, d2, d1, q, h;
 334
 335	if (n < 100*1000*1000)
 336		return put_dec_trunc8(buf, n);
 337
 338	d1  = ((uint32_t)n >> 16); /* implicit "& 0xffff" */
 339	h   = (n >> 32);
 340	d2  = (h      ) & 0xffff;
 341	d3  = (h >> 16); /* implicit "& 0xffff" */
 342
 343	/* n = 2^48 d3 + 2^32 d2 + 2^16 d1 + d0
 344	     = 281_4749_7671_0656 d3 + 42_9496_7296 d2 + 6_5536 d1 + d0 */
 345	q   = 656 * d3 + 7296 * d2 + 5536 * d1 + ((uint32_t)n & 0xffff);
 346	q = put_dec_helper4(buf, q);
 347
 348	q += 7671 * d3 + 9496 * d2 + 6 * d1;
 349	q = put_dec_helper4(buf+4, q);
 350
 351	q += 4749 * d3 + 42 * d2;
 352	q = put_dec_helper4(buf+8, q);
 353
 354	q += 281 * d3;
 355	buf += 12;
 356	if (q)
 357		buf = put_dec_trunc8(buf, q);
 358	else while (buf[-1] == '0')
 359		--buf;
 360
 361	return buf;
 362}
 363
 364#endif
 365
 366/*
 367 * Convert passed number to decimal string.
 368 * Returns the length of string.  On buffer overflow, returns 0.
 369 *
 370 * If speed is not important, use snprintf(). It's easy to read the code.
 371 */
 372int num_to_str(char *buf, int size, unsigned long long num, unsigned int width)
 373{
 374	/* put_dec requires 2-byte alignment of the buffer. */
 375	char tmp[sizeof(num) * 3] __aligned(2);
 376	int idx, len;
 377
 378	/* put_dec() may work incorrectly for num = 0 (generate "", not "0") */
 379	if (num <= 9) {
 380		tmp[0] = '0' + num;
 381		len = 1;
 382	} else {
 383		len = put_dec(tmp, num) - tmp;
 384	}
 385
 386	if (len > size || width > size)
 387		return 0;
 388
 389	if (width > len) {
 390		width = width - len;
 391		for (idx = 0; idx < width; idx++)
 392			buf[idx] = ' ';
 393	} else {
 394		width = 0;
 395	}
 396
 397	for (idx = 0; idx < len; ++idx)
 398		buf[idx + width] = tmp[len - idx - 1];
 399
 400	return len + width;
 401}
 402
 403#define SIGN	1		/* unsigned/signed, must be 1 */
 404#define LEFT	2		/* left justified */
 405#define PLUS	4		/* show plus */
 406#define SPACE	8		/* space if plus */
 407#define ZEROPAD	16		/* pad with zero, must be 16 == '0' - ' ' */
 408#define SMALL	32		/* use lowercase in hex (must be 32 == 0x20) */
 409#define SPECIAL	64		/* prefix hex with "0x", octal with "0" */
 410
 411static_assert(ZEROPAD == ('0' - ' '));
 412static_assert(SMALL == ' ');
 413
 414enum format_type {
 415	FORMAT_TYPE_NONE, /* Just a string part */
 416	FORMAT_TYPE_WIDTH,
 417	FORMAT_TYPE_PRECISION,
 418	FORMAT_TYPE_CHAR,
 419	FORMAT_TYPE_STR,
 420	FORMAT_TYPE_PTR,
 421	FORMAT_TYPE_PERCENT_CHAR,
 422	FORMAT_TYPE_INVALID,
 423	FORMAT_TYPE_LONG_LONG,
 424	FORMAT_TYPE_ULONG,
 425	FORMAT_TYPE_LONG,
 426	FORMAT_TYPE_UBYTE,
 427	FORMAT_TYPE_BYTE,
 428	FORMAT_TYPE_USHORT,
 429	FORMAT_TYPE_SHORT,
 430	FORMAT_TYPE_UINT,
 431	FORMAT_TYPE_INT,
 432	FORMAT_TYPE_SIZE_T,
 433	FORMAT_TYPE_PTRDIFF
 434};
 435
 436struct printf_spec {
 437	unsigned int	type:8;		/* format_type enum */
 438	signed int	field_width:24;	/* width of output field */
 439	unsigned int	flags:8;	/* flags to number() */
 440	unsigned int	base:8;		/* number base, 8, 10 or 16 only */
 441	signed int	precision:16;	/* # of digits/chars */
 442} __packed;
 443static_assert(sizeof(struct printf_spec) == 8);
 444
 445#define FIELD_WIDTH_MAX ((1 << 23) - 1)
 446#define PRECISION_MAX ((1 << 15) - 1)
 447
 448static noinline_for_stack
 449char *number(char *buf, char *end, unsigned long long num,
 450	     struct printf_spec spec)
 451{
 452	/* put_dec requires 2-byte alignment of the buffer. */
 453	char tmp[3 * sizeof(num)] __aligned(2);
 454	char sign;
 455	char locase;
 456	int need_pfx = ((spec.flags & SPECIAL) && spec.base != 10);
 457	int i;
 458	bool is_zero = num == 0LL;
 459	int field_width = spec.field_width;
 460	int precision = spec.precision;
 461
 462	/* locase = 0 or 0x20. ORing digits or letters with 'locase'
 463	 * produces same digits or (maybe lowercased) letters */
 464	locase = (spec.flags & SMALL);
 465	if (spec.flags & LEFT)
 466		spec.flags &= ~ZEROPAD;
 467	sign = 0;
 468	if (spec.flags & SIGN) {
 469		if ((signed long long)num < 0) {
 470			sign = '-';
 471			num = -(signed long long)num;
 472			field_width--;
 473		} else if (spec.flags & PLUS) {
 474			sign = '+';
 475			field_width--;
 476		} else if (spec.flags & SPACE) {
 477			sign = ' ';
 478			field_width--;
 479		}
 480	}
 481	if (need_pfx) {
 482		if (spec.base == 16)
 483			field_width -= 2;
 484		else if (!is_zero)
 485			field_width--;
 486	}
 487
 488	/* generate full string in tmp[], in reverse order */
 489	i = 0;
 490	if (num < spec.base)
 491		tmp[i++] = hex_asc_upper[num] | locase;
 492	else if (spec.base != 10) { /* 8 or 16 */
 493		int mask = spec.base - 1;
 494		int shift = 3;
 495
 496		if (spec.base == 16)
 497			shift = 4;
 498		do {
 499			tmp[i++] = (hex_asc_upper[((unsigned char)num) & mask] | locase);
 500			num >>= shift;
 501		} while (num);
 502	} else { /* base 10 */
 503		i = put_dec(tmp, num) - tmp;
 504	}
 505
 506	/* printing 100 using %2d gives "100", not "00" */
 507	if (i > precision)
 508		precision = i;
 509	/* leading space padding */
 510	field_width -= precision;
 511	if (!(spec.flags & (ZEROPAD | LEFT))) {
 512		while (--field_width >= 0) {
 513			if (buf < end)
 514				*buf = ' ';
 515			++buf;
 516		}
 517	}
 518	/* sign */
 519	if (sign) {
 520		if (buf < end)
 521			*buf = sign;
 522		++buf;
 523	}
 524	/* "0x" / "0" prefix */
 525	if (need_pfx) {
 526		if (spec.base == 16 || !is_zero) {
 527			if (buf < end)
 528				*buf = '0';
 529			++buf;
 530		}
 531		if (spec.base == 16) {
 532			if (buf < end)
 533				*buf = ('X' | locase);
 534			++buf;
 535		}
 536	}
 537	/* zero or space padding */
 538	if (!(spec.flags & LEFT)) {
 539		char c = ' ' + (spec.flags & ZEROPAD);
 540
 541		while (--field_width >= 0) {
 542			if (buf < end)
 543				*buf = c;
 544			++buf;
 545		}
 546	}
 547	/* hmm even more zero padding? */
 548	while (i <= --precision) {
 549		if (buf < end)
 550			*buf = '0';
 551		++buf;
 552	}
 553	/* actual digits of result */
 554	while (--i >= 0) {
 555		if (buf < end)
 556			*buf = tmp[i];
 557		++buf;
 558	}
 559	/* trailing space padding */
 560	while (--field_width >= 0) {
 561		if (buf < end)
 562			*buf = ' ';
 563		++buf;
 564	}
 565
 566	return buf;
 567}
 568
 569static noinline_for_stack
 570char *special_hex_number(char *buf, char *end, unsigned long long num, int size)
 571{
 572	struct printf_spec spec;
 573
 574	spec.type = FORMAT_TYPE_PTR;
 575	spec.field_width = 2 + 2 * size;	/* 0x + hex */
 576	spec.flags = SPECIAL | SMALL | ZEROPAD;
 577	spec.base = 16;
 578	spec.precision = -1;
 579
 580	return number(buf, end, num, spec);
 581}
 582
 583static void move_right(char *buf, char *end, unsigned len, unsigned spaces)
 584{
 585	size_t size;
 586	if (buf >= end)	/* nowhere to put anything */
 587		return;
 588	size = end - buf;
 589	if (size <= spaces) {
 590		memset(buf, ' ', size);
 591		return;
 592	}
 593	if (len) {
 594		if (len > size - spaces)
 595			len = size - spaces;
 596		memmove(buf + spaces, buf, len);
 597	}
 598	memset(buf, ' ', spaces);
 599}
 600
 601/*
 602 * Handle field width padding for a string.
 603 * @buf: current buffer position
 604 * @n: length of string
 605 * @end: end of output buffer
 606 * @spec: for field width and flags
 607 * Returns: new buffer position after padding.
 608 */
 609static noinline_for_stack
 610char *widen_string(char *buf, int n, char *end, struct printf_spec spec)
 611{
 612	unsigned spaces;
 613
 614	if (likely(n >= spec.field_width))
 615		return buf;
 616	/* we want to pad the sucker */
 617	spaces = spec.field_width - n;
 618	if (!(spec.flags & LEFT)) {
 619		move_right(buf - n, end, n, spaces);
 620		return buf + spaces;
 621	}
 622	while (spaces--) {
 623		if (buf < end)
 624			*buf = ' ';
 625		++buf;
 626	}
 627	return buf;
 628}
 629
 630/* Handle string from a well known address. */
 631static char *string_nocheck(char *buf, char *end, const char *s,
 632			    struct printf_spec spec)
 633{
 634	int len = 0;
 635	int lim = spec.precision;
 636
 637	while (lim--) {
 638		char c = *s++;
 639		if (!c)
 640			break;
 641		if (buf < end)
 642			*buf = c;
 643		++buf;
 644		++len;
 645	}
 646	return widen_string(buf, len, end, spec);
 647}
 648
 649static char *err_ptr(char *buf, char *end, void *ptr,
 650		     struct printf_spec spec)
 651{
 652	int err = PTR_ERR(ptr);
 653	const char *sym = errname(err);
 654
 655	if (sym)
 656		return string_nocheck(buf, end, sym, spec);
 657
 658	/*
 659	 * Somebody passed ERR_PTR(-1234) or some other non-existing
 660	 * Efoo - or perhaps CONFIG_SYMBOLIC_ERRNAME=n. Fall back to
 661	 * printing it as its decimal representation.
 662	 */
 663	spec.flags |= SIGN;
 664	spec.base = 10;
 665	return number(buf, end, err, spec);
 666}
 667
 668/* Be careful: error messages must fit into the given buffer. */
 669static char *error_string(char *buf, char *end, const char *s,
 670			  struct printf_spec spec)
 671{
 672	/*
 673	 * Hard limit to avoid a completely insane messages. It actually
 674	 * works pretty well because most error messages are in
 675	 * the many pointer format modifiers.
 676	 */
 677	if (spec.precision == -1)
 678		spec.precision = 2 * sizeof(void *);
 679
 680	return string_nocheck(buf, end, s, spec);
 681}
 682
 683/*
 684 * Do not call any complex external code here. Nested printk()/vsprintf()
 685 * might cause infinite loops. Failures might break printk() and would
 686 * be hard to debug.
 687 */
 688static const char *check_pointer_msg(const void *ptr)
 689{
 690	if (!ptr)
 691		return "(null)";
 692
 693	if ((unsigned long)ptr < PAGE_SIZE || IS_ERR_VALUE(ptr))
 694		return "(efault)";
 695
 696	return NULL;
 697}
 698
 699static int check_pointer(char **buf, char *end, const void *ptr,
 700			 struct printf_spec spec)
 701{
 702	const char *err_msg;
 703
 704	err_msg = check_pointer_msg(ptr);
 705	if (err_msg) {
 706		*buf = error_string(*buf, end, err_msg, spec);
 707		return -EFAULT;
 708	}
 709
 710	return 0;
 711}
 712
 713static noinline_for_stack
 714char *string(char *buf, char *end, const char *s,
 715	     struct printf_spec spec)
 716{
 717	if (check_pointer(&buf, end, s, spec))
 718		return buf;
 719
 720	return string_nocheck(buf, end, s, spec);
 721}
 722
 723static char *pointer_string(char *buf, char *end,
 724			    const void *ptr,
 725			    struct printf_spec spec)
 726{
 727	spec.base = 16;
 728	spec.flags |= SMALL;
 729	if (spec.field_width == -1) {
 730		spec.field_width = 2 * sizeof(ptr);
 731		spec.flags |= ZEROPAD;
 732	}
 733
 734	return number(buf, end, (unsigned long int)ptr, spec);
 735}
 736
 737/* Make pointers available for printing early in the boot sequence. */
 738static int debug_boot_weak_hash __ro_after_init;
 739
 740static int __init debug_boot_weak_hash_enable(char *str)
 741{
 742	debug_boot_weak_hash = 1;
 743	pr_info("debug_boot_weak_hash enabled\n");
 744	return 0;
 745}
 746early_param("debug_boot_weak_hash", debug_boot_weak_hash_enable);
 747
 748static DEFINE_STATIC_KEY_TRUE(not_filled_random_ptr_key);
 749static siphash_key_t ptr_key __read_mostly;
 750
 751static void enable_ptr_key_workfn(struct work_struct *work)
 752{
 753	get_random_bytes(&ptr_key, sizeof(ptr_key));
 754	/* Needs to run from preemptible context */
 755	static_branch_disable(&not_filled_random_ptr_key);
 756}
 757
 758static DECLARE_WORK(enable_ptr_key_work, enable_ptr_key_workfn);
 759
 760static void fill_random_ptr_key(struct random_ready_callback *unused)
 761{
 762	/* This may be in an interrupt handler. */
 763	queue_work(system_unbound_wq, &enable_ptr_key_work);
 764}
 765
 766static struct random_ready_callback random_ready = {
 767	.func = fill_random_ptr_key
 768};
 769
 770static int __init initialize_ptr_random(void)
 771{
 772	int key_size = sizeof(ptr_key);
 773	int ret;
 774
 775	/* Use hw RNG if available. */
 776	if (get_random_bytes_arch(&ptr_key, key_size) == key_size) {
 777		static_branch_disable(&not_filled_random_ptr_key);
 778		return 0;
 779	}
 780
 781	ret = add_random_ready_callback(&random_ready);
 782	if (!ret) {
 783		return 0;
 784	} else if (ret == -EALREADY) {
 785		/* This is in preemptible context */
 786		enable_ptr_key_workfn(&enable_ptr_key_work);
 787		return 0;
 788	}
 789
 790	return ret;
 791}
 792early_initcall(initialize_ptr_random);
 793
 794/* Maps a pointer to a 32 bit unique identifier. */
 795static inline int __ptr_to_hashval(const void *ptr, unsigned long *hashval_out)
 796{
 797	unsigned long hashval;
 798
 799	if (static_branch_unlikely(&not_filled_random_ptr_key))
 800		return -EAGAIN;
 801
 802#ifdef CONFIG_64BIT
 803	hashval = (unsigned long)siphash_1u64((u64)ptr, &ptr_key);
 804	/*
 805	 * Mask off the first 32 bits, this makes explicit that we have
 806	 * modified the address (and 32 bits is plenty for a unique ID).
 807	 */
 808	hashval = hashval & 0xffffffff;
 809#else
 810	hashval = (unsigned long)siphash_1u32((u32)ptr, &ptr_key);
 811#endif
 812	*hashval_out = hashval;
 813	return 0;
 814}
 815
 816int ptr_to_hashval(const void *ptr, unsigned long *hashval_out)
 817{
 818	return __ptr_to_hashval(ptr, hashval_out);
 819}
 820
 821static char *ptr_to_id(char *buf, char *end, const void *ptr,
 822		       struct printf_spec spec)
 823{
 824	const char *str = sizeof(ptr) == 8 ? "(____ptrval____)" : "(ptrval)";
 825	unsigned long hashval;
 826	int ret;
 827
 828	/*
 829	 * Print the real pointer value for NULL and error pointers,
 830	 * as they are not actual addresses.
 831	 */
 832	if (IS_ERR_OR_NULL(ptr))
 833		return pointer_string(buf, end, ptr, spec);
 834
 835	/* When debugging early boot use non-cryptographically secure hash. */
 836	if (unlikely(debug_boot_weak_hash)) {
 837		hashval = hash_long((unsigned long)ptr, 32);
 838		return pointer_string(buf, end, (const void *)hashval, spec);
 839	}
 840
 841	ret = __ptr_to_hashval(ptr, &hashval);
 842	if (ret) {
 843		spec.field_width = 2 * sizeof(ptr);
 844		/* string length must be less than default_width */
 845		return error_string(buf, end, str, spec);
 846	}
 847
 848	return pointer_string(buf, end, (const void *)hashval, spec);
 849}
 850
 851int kptr_restrict __read_mostly;
 852
 853static noinline_for_stack
 854char *restricted_pointer(char *buf, char *end, const void *ptr,
 855			 struct printf_spec spec)
 856{
 857	switch (kptr_restrict) {
 858	case 0:
 859		/* Handle as %p, hash and do _not_ leak addresses. */
 860		return ptr_to_id(buf, end, ptr, spec);
 861	case 1: {
 862		const struct cred *cred;
 863
 864		/*
 865		 * kptr_restrict==1 cannot be used in IRQ context
 866		 * because its test for CAP_SYSLOG would be meaningless.
 867		 */
 868		if (in_irq() || in_serving_softirq() || in_nmi()) {
 869			if (spec.field_width == -1)
 870				spec.field_width = 2 * sizeof(ptr);
 871			return error_string(buf, end, "pK-error", spec);
 872		}
 873
 874		/*
 875		 * Only print the real pointer value if the current
 876		 * process has CAP_SYSLOG and is running with the
 877		 * same credentials it started with. This is because
 878		 * access to files is checked at open() time, but %pK
 879		 * checks permission at read() time. We don't want to
 880		 * leak pointer values if a binary opens a file using
 881		 * %pK and then elevates privileges before reading it.
 882		 */
 883		cred = current_cred();
 884		if (!has_capability_noaudit(current, CAP_SYSLOG) ||
 885		    !uid_eq(cred->euid, cred->uid) ||
 886		    !gid_eq(cred->egid, cred->gid))
 887			ptr = NULL;
 888		break;
 889	}
 890	case 2:
 891	default:
 892		/* Always print 0's for %pK */
 893		ptr = NULL;
 894		break;
 895	}
 896
 897	return pointer_string(buf, end, ptr, spec);
 898}
 899
 900static noinline_for_stack
 901char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_spec spec,
 902		  const char *fmt)
 903{
 904	const char *array[4], *s;
 905	const struct dentry *p;
 906	int depth;
 907	int i, n;
 908
 909	switch (fmt[1]) {
 910		case '2': case '3': case '4':
 911			depth = fmt[1] - '0';
 912			break;
 913		default:
 914			depth = 1;
 915	}
 916
 917	rcu_read_lock();
 918	for (i = 0; i < depth; i++, d = p) {
 919		if (check_pointer(&buf, end, d, spec)) {
 920			rcu_read_unlock();
 921			return buf;
 922		}
 923
 924		p = READ_ONCE(d->d_parent);
 925		array[i] = READ_ONCE(d->d_name.name);
 926		if (p == d) {
 927			if (i)
 928				array[i] = "";
 929			i++;
 930			break;
 931		}
 932	}
 933	s = array[--i];
 934	for (n = 0; n != spec.precision; n++, buf++) {
 935		char c = *s++;
 936		if (!c) {
 937			if (!i)
 938				break;
 939			c = '/';
 940			s = array[--i];
 941		}
 942		if (buf < end)
 943			*buf = c;
 944	}
 945	rcu_read_unlock();
 946	return widen_string(buf, n, end, spec);
 947}
 948
 949static noinline_for_stack
 950char *file_dentry_name(char *buf, char *end, const struct file *f,
 951			struct printf_spec spec, const char *fmt)
 952{
 953	if (check_pointer(&buf, end, f, spec))
 954		return buf;
 955
 956	return dentry_name(buf, end, f->f_path.dentry, spec, fmt);
 957}
 958#ifdef CONFIG_BLOCK
 959static noinline_for_stack
 960char *bdev_name(char *buf, char *end, struct block_device *bdev,
 961		struct printf_spec spec, const char *fmt)
 962{
 963	struct gendisk *hd;
 964
 965	if (check_pointer(&buf, end, bdev, spec))
 966		return buf;
 967
 968	hd = bdev->bd_disk;
 969	buf = string(buf, end, hd->disk_name, spec);
 970	if (bdev->bd_partno) {
 971		if (isdigit(hd->disk_name[strlen(hd->disk_name)-1])) {
 972			if (buf < end)
 973				*buf = 'p';
 974			buf++;
 975		}
 976		buf = number(buf, end, bdev->bd_partno, spec);
 977	}
 978	return buf;
 979}
 980#endif
 981
 982static noinline_for_stack
 983char *symbol_string(char *buf, char *end, void *ptr,
 984		    struct printf_spec spec, const char *fmt)
 985{
 986	unsigned long value;
 987#ifdef CONFIG_KALLSYMS
 988	char sym[KSYM_SYMBOL_LEN];
 989#endif
 990
 991	if (fmt[1] == 'R')
 992		ptr = __builtin_extract_return_addr(ptr);
 993	value = (unsigned long)ptr;
 994
 995#ifdef CONFIG_KALLSYMS
 996	if (*fmt == 'B' && fmt[1] == 'b')
 997		sprint_backtrace_build_id(sym, value);
 998	else if (*fmt == 'B')
 999		sprint_backtrace(sym, value);
1000	else if (*fmt == 'S' && (fmt[1] == 'b' || (fmt[1] == 'R' && fmt[2] == 'b')))
1001		sprint_symbol_build_id(sym, value);
1002	else if (*fmt != 's')
1003		sprint_symbol(sym, value);
1004	else
1005		sprint_symbol_no_offset(sym, value);
1006
1007	return string_nocheck(buf, end, sym, spec);
1008#else
1009	return special_hex_number(buf, end, value, sizeof(void *));
1010#endif
1011}
1012
1013static const struct printf_spec default_str_spec = {
1014	.field_width = -1,
1015	.precision = -1,
1016};
1017
1018static const struct printf_spec default_flag_spec = {
1019	.base = 16,
1020	.precision = -1,
1021	.flags = SPECIAL | SMALL,
1022};
1023
1024static const struct printf_spec default_dec_spec = {
1025	.base = 10,
1026	.precision = -1,
1027};
1028
1029static const struct printf_spec default_dec02_spec = {
1030	.base = 10,
1031	.field_width = 2,
1032	.precision = -1,
1033	.flags = ZEROPAD,
1034};
1035
1036static const struct printf_spec default_dec04_spec = {
1037	.base = 10,
1038	.field_width = 4,
1039	.precision = -1,
1040	.flags = ZEROPAD,
1041};
1042
1043static noinline_for_stack
1044char *resource_string(char *buf, char *end, struct resource *res,
1045		      struct printf_spec spec, const char *fmt)
1046{
1047#ifndef IO_RSRC_PRINTK_SIZE
1048#define IO_RSRC_PRINTK_SIZE	6
1049#endif
1050
1051#ifndef MEM_RSRC_PRINTK_SIZE
1052#define MEM_RSRC_PRINTK_SIZE	10
1053#endif
1054	static const struct printf_spec io_spec = {
1055		.base = 16,
1056		.field_width = IO_RSRC_PRINTK_SIZE,
1057		.precision = -1,
1058		.flags = SPECIAL | SMALL | ZEROPAD,
1059	};
1060	static const struct printf_spec mem_spec = {
1061		.base = 16,
1062		.field_width = MEM_RSRC_PRINTK_SIZE,
1063		.precision = -1,
1064		.flags = SPECIAL | SMALL | ZEROPAD,
1065	};
1066	static const struct printf_spec bus_spec = {
1067		.base = 16,
1068		.field_width = 2,
1069		.precision = -1,
1070		.flags = SMALL | ZEROPAD,
1071	};
1072	static const struct printf_spec str_spec = {
1073		.field_width = -1,
1074		.precision = 10,
1075		.flags = LEFT,
1076	};
1077
1078	/* 32-bit res (sizeof==4): 10 chars in dec, 10 in hex ("0x" + 8)
1079	 * 64-bit res (sizeof==8): 20 chars in dec, 18 in hex ("0x" + 16) */
1080#define RSRC_BUF_SIZE		((2 * sizeof(resource_size_t)) + 4)
1081#define FLAG_BUF_SIZE		(2 * sizeof(res->flags))
1082#define DECODED_BUF_SIZE	sizeof("[mem - 64bit pref window disabled]")
1083#define RAW_BUF_SIZE		sizeof("[mem - flags 0x]")
1084	char sym[max(2*RSRC_BUF_SIZE + DECODED_BUF_SIZE,
1085		     2*RSRC_BUF_SIZE + FLAG_BUF_SIZE + RAW_BUF_SIZE)];
1086
1087	char *p = sym, *pend = sym + sizeof(sym);
1088	int decode = (fmt[0] == 'R') ? 1 : 0;
1089	const struct printf_spec *specp;
1090
1091	if (check_pointer(&buf, end, res, spec))
1092		return buf;
1093
1094	*p++ = '[';
1095	if (res->flags & IORESOURCE_IO) {
1096		p = string_nocheck(p, pend, "io  ", str_spec);
1097		specp = &io_spec;
1098	} else if (res->flags & IORESOURCE_MEM) {
1099		p = string_nocheck(p, pend, "mem ", str_spec);
1100		specp = &mem_spec;
1101	} else if (res->flags & IORESOURCE_IRQ) {
1102		p = string_nocheck(p, pend, "irq ", str_spec);
1103		specp = &default_dec_spec;
1104	} else if (res->flags & IORESOURCE_DMA) {
1105		p = string_nocheck(p, pend, "dma ", str_spec);
1106		specp = &default_dec_spec;
1107	} else if (res->flags & IORESOURCE_BUS) {
1108		p = string_nocheck(p, pend, "bus ", str_spec);
1109		specp = &bus_spec;
1110	} else {
1111		p = string_nocheck(p, pend, "??? ", str_spec);
1112		specp = &mem_spec;
1113		decode = 0;
1114	}
1115	if (decode && res->flags & IORESOURCE_UNSET) {
1116		p = string_nocheck(p, pend, "size ", str_spec);
1117		p = number(p, pend, resource_size(res), *specp);
1118	} else {
1119		p = number(p, pend, res->start, *specp);
1120		if (res->start != res->end) {
1121			*p++ = '-';
1122			p = number(p, pend, res->end, *specp);
1123		}
1124	}
1125	if (decode) {
1126		if (res->flags & IORESOURCE_MEM_64)
1127			p = string_nocheck(p, pend, " 64bit", str_spec);
1128		if (res->flags & IORESOURCE_PREFETCH)
1129			p = string_nocheck(p, pend, " pref", str_spec);
1130		if (res->flags & IORESOURCE_WINDOW)
1131			p = string_nocheck(p, pend, " window", str_spec);
1132		if (res->flags & IORESOURCE_DISABLED)
1133			p = string_nocheck(p, pend, " disabled", str_spec);
1134	} else {
1135		p = string_nocheck(p, pend, " flags ", str_spec);
1136		p = number(p, pend, res->flags, default_flag_spec);
1137	}
1138	*p++ = ']';
1139	*p = '\0';
1140
1141	return string_nocheck(buf, end, sym, spec);
1142}
1143
1144static noinline_for_stack
1145char *hex_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
1146		 const char *fmt)
1147{
1148	int i, len = 1;		/* if we pass '%ph[CDN]', field width remains
1149				   negative value, fallback to the default */
1150	char separator;
1151
1152	if (spec.field_width == 0)
1153		/* nothing to print */
1154		return buf;
1155
1156	if (check_pointer(&buf, end, addr, spec))
1157		return buf;
1158
1159	switch (fmt[1]) {
1160	case 'C':
1161		separator = ':';
1162		break;
1163	case 'D':
1164		separator = '-';
1165		break;
1166	case 'N':
1167		separator = 0;
1168		break;
1169	default:
1170		separator = ' ';
1171		break;
1172	}
1173
1174	if (spec.field_width > 0)
1175		len = min_t(int, spec.field_width, 64);
1176
1177	for (i = 0; i < len; ++i) {
1178		if (buf < end)
1179			*buf = hex_asc_hi(addr[i]);
1180		++buf;
1181		if (buf < end)
1182			*buf = hex_asc_lo(addr[i]);
1183		++buf;
1184
1185		if (separator && i != len - 1) {
1186			if (buf < end)
1187				*buf = separator;
1188			++buf;
1189		}
1190	}
1191
1192	return buf;
1193}
1194
1195static noinline_for_stack
1196char *bitmap_string(char *buf, char *end, unsigned long *bitmap,
1197		    struct printf_spec spec, const char *fmt)
1198{
1199	const int CHUNKSZ = 32;
1200	int nr_bits = max_t(int, spec.field_width, 0);
1201	int i, chunksz;
1202	bool first = true;
1203
1204	if (check_pointer(&buf, end, bitmap, spec))
1205		return buf;
1206
1207	/* reused to print numbers */
1208	spec = (struct printf_spec){ .flags = SMALL | ZEROPAD, .base = 16 };
1209
1210	chunksz = nr_bits & (CHUNKSZ - 1);
1211	if (chunksz == 0)
1212		chunksz = CHUNKSZ;
1213
1214	i = ALIGN(nr_bits, CHUNKSZ) - CHUNKSZ;
1215	for (; i >= 0; i -= CHUNKSZ) {
1216		u32 chunkmask, val;
1217		int word, bit;
1218
1219		chunkmask = ((1ULL << chunksz) - 1);
1220		word = i / BITS_PER_LONG;
1221		bit = i % BITS_PER_LONG;
1222		val = (bitmap[word] >> bit) & chunkmask;
1223
1224		if (!first) {
1225			if (buf < end)
1226				*buf = ',';
1227			buf++;
1228		}
1229		first = false;
1230
1231		spec.field_width = DIV_ROUND_UP(chunksz, 4);
1232		buf = number(buf, end, val, spec);
1233
1234		chunksz = CHUNKSZ;
1235	}
1236	return buf;
1237}
1238
1239static noinline_for_stack
1240char *bitmap_list_string(char *buf, char *end, unsigned long *bitmap,
1241			 struct printf_spec spec, const char *fmt)
1242{
1243	int nr_bits = max_t(int, spec.field_width, 0);
1244	/* current bit is 'cur', most recently seen range is [rbot, rtop] */
1245	int cur, rbot, rtop;
1246	bool first = true;
1247
1248	if (check_pointer(&buf, end, bitmap, spec))
1249		return buf;
1250
1251	rbot = cur = find_first_bit(bitmap, nr_bits);
1252	while (cur < nr_bits) {
1253		rtop = cur;
1254		cur = find_next_bit(bitmap, nr_bits, cur + 1);
1255		if (cur < nr_bits && cur <= rtop + 1)
1256			continue;
1257
1258		if (!first) {
1259			if (buf < end)
1260				*buf = ',';
1261			buf++;
1262		}
1263		first = false;
1264
1265		buf = number(buf, end, rbot, default_dec_spec);
1266		if (rbot < rtop) {
1267			if (buf < end)
1268				*buf = '-';
1269			buf++;
1270
1271			buf = number(buf, end, rtop, default_dec_spec);
1272		}
1273
1274		rbot = cur;
1275	}
1276	return buf;
1277}
1278
1279static noinline_for_stack
1280char *mac_address_string(char *buf, char *end, u8 *addr,
1281			 struct printf_spec spec, const char *fmt)
1282{
1283	char mac_addr[sizeof("xx:xx:xx:xx:xx:xx")];
1284	char *p = mac_addr;
1285	int i;
1286	char separator;
1287	bool reversed = false;
1288
1289	if (check_pointer(&buf, end, addr, spec))
1290		return buf;
1291
1292	switch (fmt[1]) {
1293	case 'F':
1294		separator = '-';
1295		break;
1296
1297	case 'R':
1298		reversed = true;
1299		fallthrough;
1300
1301	default:
1302		separator = ':';
1303		break;
1304	}
1305
1306	for (i = 0; i < 6; i++) {
1307		if (reversed)
1308			p = hex_byte_pack(p, addr[5 - i]);
1309		else
1310			p = hex_byte_pack(p, addr[i]);
1311
1312		if (fmt[0] == 'M' && i != 5)
1313			*p++ = separator;
1314	}
1315	*p = '\0';
1316
1317	return string_nocheck(buf, end, mac_addr, spec);
1318}
1319
1320static noinline_for_stack
1321char *ip4_string(char *p, const u8 *addr, const char *fmt)
1322{
1323	int i;
1324	bool leading_zeros = (fmt[0] == 'i');
1325	int index;
1326	int step;
1327
1328	switch (fmt[2]) {
1329	case 'h':
1330#ifdef __BIG_ENDIAN
1331		index = 0;
1332		step = 1;
1333#else
1334		index = 3;
1335		step = -1;
1336#endif
1337		break;
1338	case 'l':
1339		index = 3;
1340		step = -1;
1341		break;
1342	case 'n':
1343	case 'b':
1344	default:
1345		index = 0;
1346		step = 1;
1347		break;
1348	}
1349	for (i = 0; i < 4; i++) {
1350		char temp[4] __aligned(2);	/* hold each IP quad in reverse order */
1351		int digits = put_dec_trunc8(temp, addr[index]) - temp;
1352		if (leading_zeros) {
1353			if (digits < 3)
1354				*p++ = '0';
1355			if (digits < 2)
1356				*p++ = '0';
1357		}
1358		/* reverse the digits in the quad */
1359		while (digits--)
1360			*p++ = temp[digits];
1361		if (i < 3)
1362			*p++ = '.';
1363		index += step;
1364	}
1365	*p = '\0';
1366
1367	return p;
1368}
1369
1370static noinline_for_stack
1371char *ip6_compressed_string(char *p, const char *addr)
1372{
1373	int i, j, range;
1374	unsigned char zerolength[8];
1375	int longest = 1;
1376	int colonpos = -1;
1377	u16 word;
1378	u8 hi, lo;
1379	bool needcolon = false;
1380	bool useIPv4;
1381	struct in6_addr in6;
1382
1383	memcpy(&in6, addr, sizeof(struct in6_addr));
1384
1385	useIPv4 = ipv6_addr_v4mapped(&in6) || ipv6_addr_is_isatap(&in6);
1386
1387	memset(zerolength, 0, sizeof(zerolength));
1388
1389	if (useIPv4)
1390		range = 6;
1391	else
1392		range = 8;
1393
1394	/* find position of longest 0 run */
1395	for (i = 0; i < range; i++) {
1396		for (j = i; j < range; j++) {
1397			if (in6.s6_addr16[j] != 0)
1398				break;
1399			zerolength[i]++;
1400		}
1401	}
1402	for (i = 0; i < range; i++) {
1403		if (zerolength[i] > longest) {
1404			longest = zerolength[i];
1405			colonpos = i;
1406		}
1407	}
1408	if (longest == 1)		/* don't compress a single 0 */
1409		colonpos = -1;
1410
1411	/* emit address */
1412	for (i = 0; i < range; i++) {
1413		if (i == colonpos) {
1414			if (needcolon || i == 0)
1415				*p++ = ':';
1416			*p++ = ':';
1417			needcolon = false;
1418			i += longest - 1;
1419			continue;
1420		}
1421		if (needcolon) {
1422			*p++ = ':';
1423			needcolon = false;
1424		}
1425		/* hex u16 without leading 0s */
1426		word = ntohs(in6.s6_addr16[i]);
1427		hi = word >> 8;
1428		lo = word & 0xff;
1429		if (hi) {
1430			if (hi > 0x0f)
1431				p = hex_byte_pack(p, hi);
1432			else
1433				*p++ = hex_asc_lo(hi);
1434			p = hex_byte_pack(p, lo);
1435		}
1436		else if (lo > 0x0f)
1437			p = hex_byte_pack(p, lo);
1438		else
1439			*p++ = hex_asc_lo(lo);
1440		needcolon = true;
1441	}
1442
1443	if (useIPv4) {
1444		if (needcolon)
1445			*p++ = ':';
1446		p = ip4_string(p, &in6.s6_addr[12], "I4");
1447	}
1448	*p = '\0';
1449
1450	return p;
1451}
1452
1453static noinline_for_stack
1454char *ip6_string(char *p, const char *addr, const char *fmt)
1455{
1456	int i;
1457
1458	for (i = 0; i < 8; i++) {
1459		p = hex_byte_pack(p, *addr++);
1460		p = hex_byte_pack(p, *addr++);
1461		if (fmt[0] == 'I' && i != 7)
1462			*p++ = ':';
1463	}
1464	*p = '\0';
1465
1466	return p;
1467}
1468
1469static noinline_for_stack
1470char *ip6_addr_string(char *buf, char *end, const u8 *addr,
1471		      struct printf_spec spec, const char *fmt)
1472{
1473	char ip6_addr[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255")];
1474
1475	if (fmt[0] == 'I' && fmt[2] == 'c')
1476		ip6_compressed_string(ip6_addr, addr);
1477	else
1478		ip6_string(ip6_addr, addr, fmt);
1479
1480	return string_nocheck(buf, end, ip6_addr, spec);
1481}
1482
1483static noinline_for_stack
1484char *ip4_addr_string(char *buf, char *end, const u8 *addr,
1485		      struct printf_spec spec, const char *fmt)
1486{
1487	char ip4_addr[sizeof("255.255.255.255")];
1488
1489	ip4_string(ip4_addr, addr, fmt);
1490
1491	return string_nocheck(buf, end, ip4_addr, spec);
1492}
1493
1494static noinline_for_stack
1495char *ip6_addr_string_sa(char *buf, char *end, const struct sockaddr_in6 *sa,
1496			 struct printf_spec spec, const char *fmt)
1497{
1498	bool have_p = false, have_s = false, have_f = false, have_c = false;
1499	char ip6_addr[sizeof("[xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255]") +
1500		      sizeof(":12345") + sizeof("/123456789") +
1501		      sizeof("%1234567890")];
1502	char *p = ip6_addr, *pend = ip6_addr + sizeof(ip6_addr);
1503	const u8 *addr = (const u8 *) &sa->sin6_addr;
1504	char fmt6[2] = { fmt[0], '6' };
1505	u8 off = 0;
1506
1507	fmt++;
1508	while (isalpha(*++fmt)) {
1509		switch (*fmt) {
1510		case 'p':
1511			have_p = true;
1512			break;
1513		case 'f':
1514			have_f = true;
1515			break;
1516		case 's':
1517			have_s = true;
1518			break;
1519		case 'c':
1520			have_c = true;
1521			break;
1522		}
1523	}
1524
1525	if (have_p || have_s || have_f) {
1526		*p = '[';
1527		off = 1;
1528	}
1529
1530	if (fmt6[0] == 'I' && have_c)
1531		p = ip6_compressed_string(ip6_addr + off, addr);
1532	else
1533		p = ip6_string(ip6_addr + off, addr, fmt6);
1534
1535	if (have_p || have_s || have_f)
1536		*p++ = ']';
1537
1538	if (have_p) {
1539		*p++ = ':';
1540		p = number(p, pend, ntohs(sa->sin6_port), spec);
1541	}
1542	if (have_f) {
1543		*p++ = '/';
1544		p = number(p, pend, ntohl(sa->sin6_flowinfo &
1545					  IPV6_FLOWINFO_MASK), spec);
1546	}
1547	if (have_s) {
1548		*p++ = '%';
1549		p = number(p, pend, sa->sin6_scope_id, spec);
1550	}
1551	*p = '\0';
1552
1553	return string_nocheck(buf, end, ip6_addr, spec);
1554}
1555
1556static noinline_for_stack
1557char *ip4_addr_string_sa(char *buf, char *end, const struct sockaddr_in *sa,
1558			 struct printf_spec spec, const char *fmt)
1559{
1560	bool have_p = false;
1561	char *p, ip4_addr[sizeof("255.255.255.255") + sizeof(":12345")];
1562	char *pend = ip4_addr + sizeof(ip4_addr);
1563	const u8 *addr = (const u8 *) &sa->sin_addr.s_addr;
1564	char fmt4[3] = { fmt[0], '4', 0 };
1565
1566	fmt++;
1567	while (isalpha(*++fmt)) {
1568		switch (*fmt) {
1569		case 'p':
1570			have_p = true;
1571			break;
1572		case 'h':
1573		case 'l':
1574		case 'n':
1575		case 'b':
1576			fmt4[2] = *fmt;
1577			break;
1578		}
1579	}
1580
1581	p = ip4_string(ip4_addr, addr, fmt4);
1582	if (have_p) {
1583		*p++ = ':';
1584		p = number(p, pend, ntohs(sa->sin_port), spec);
1585	}
1586	*p = '\0';
1587
1588	return string_nocheck(buf, end, ip4_addr, spec);
1589}
1590
1591static noinline_for_stack
1592char *ip_addr_string(char *buf, char *end, const void *ptr,
1593		     struct printf_spec spec, const char *fmt)
1594{
1595	char *err_fmt_msg;
1596
1597	if (check_pointer(&buf, end, ptr, spec))
1598		return buf;
1599
1600	switch (fmt[1]) {
1601	case '6':
1602		return ip6_addr_string(buf, end, ptr, spec, fmt);
1603	case '4':
1604		return ip4_addr_string(buf, end, ptr, spec, fmt);
1605	case 'S': {
1606		const union {
1607			struct sockaddr		raw;
1608			struct sockaddr_in	v4;
1609			struct sockaddr_in6	v6;
1610		} *sa = ptr;
1611
1612		switch (sa->raw.sa_family) {
1613		case AF_INET:
1614			return ip4_addr_string_sa(buf, end, &sa->v4, spec, fmt);
1615		case AF_INET6:
1616			return ip6_addr_string_sa(buf, end, &sa->v6, spec, fmt);
1617		default:
1618			return error_string(buf, end, "(einval)", spec);
1619		}}
1620	}
1621
1622	err_fmt_msg = fmt[0] == 'i' ? "(%pi?)" : "(%pI?)";
1623	return error_string(buf, end, err_fmt_msg, spec);
1624}
1625
1626static noinline_for_stack
1627char *escaped_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
1628		     const char *fmt)
1629{
1630	bool found = true;
1631	int count = 1;
1632	unsigned int flags = 0;
1633	int len;
1634
1635	if (spec.field_width == 0)
1636		return buf;				/* nothing to print */
1637
1638	if (check_pointer(&buf, end, addr, spec))
1639		return buf;
1640
1641	do {
1642		switch (fmt[count++]) {
1643		case 'a':
1644			flags |= ESCAPE_ANY;
1645			break;
1646		case 'c':
1647			flags |= ESCAPE_SPECIAL;
1648			break;
1649		case 'h':
1650			flags |= ESCAPE_HEX;
1651			break;
1652		case 'n':
1653			flags |= ESCAPE_NULL;
1654			break;
1655		case 'o':
1656			flags |= ESCAPE_OCTAL;
1657			break;
1658		case 'p':
1659			flags |= ESCAPE_NP;
1660			break;
1661		case 's':
1662			flags |= ESCAPE_SPACE;
1663			break;
1664		default:
1665			found = false;
1666			break;
1667		}
1668	} while (found);
1669
1670	if (!flags)
1671		flags = ESCAPE_ANY_NP;
1672
1673	len = spec.field_width < 0 ? 1 : spec.field_width;
1674
1675	/*
1676	 * string_escape_mem() writes as many characters as it can to
1677	 * the given buffer, and returns the total size of the output
1678	 * had the buffer been big enough.
1679	 */
1680	buf += string_escape_mem(addr, len, buf, buf < end ? end - buf : 0, flags, NULL);
1681
1682	return buf;
1683}
1684
1685static char *va_format(char *buf, char *end, struct va_format *va_fmt,
1686		       struct printf_spec spec, const char *fmt)
1687{
1688	va_list va;
1689
1690	if (check_pointer(&buf, end, va_fmt, spec))
1691		return buf;
1692
1693	va_copy(va, *va_fmt->va);
1694	buf += vsnprintf(buf, end > buf ? end - buf : 0, va_fmt->fmt, va);
1695	va_end(va);
1696
1697	return buf;
1698}
1699
1700static noinline_for_stack
1701char *uuid_string(char *buf, char *end, const u8 *addr,
1702		  struct printf_spec spec, const char *fmt)
1703{
1704	char uuid[UUID_STRING_LEN + 1];
1705	char *p = uuid;
1706	int i;
1707	const u8 *index = uuid_index;
1708	bool uc = false;
1709
1710	if (check_pointer(&buf, end, addr, spec))
1711		return buf;
1712
1713	switch (*(++fmt)) {
1714	case 'L':
1715		uc = true;
1716		fallthrough;
1717	case 'l':
1718		index = guid_index;
1719		break;
1720	case 'B':
1721		uc = true;
1722		break;
1723	}
1724
1725	for (i = 0; i < 16; i++) {
1726		if (uc)
1727			p = hex_byte_pack_upper(p, addr[index[i]]);
1728		else
1729			p = hex_byte_pack(p, addr[index[i]]);
1730		switch (i) {
1731		case 3:
1732		case 5:
1733		case 7:
1734		case 9:
1735			*p++ = '-';
1736			break;
1737		}
1738	}
1739
1740	*p = 0;
1741
1742	return string_nocheck(buf, end, uuid, spec);
1743}
1744
1745static noinline_for_stack
1746char *netdev_bits(char *buf, char *end, const void *addr,
1747		  struct printf_spec spec,  const char *fmt)
1748{
1749	unsigned long long num;
1750	int size;
1751
1752	if (check_pointer(&buf, end, addr, spec))
1753		return buf;
1754
1755	switch (fmt[1]) {
1756	case 'F':
1757		num = *(const netdev_features_t *)addr;
1758		size = sizeof(netdev_features_t);
1759		break;
1760	default:
1761		return error_string(buf, end, "(%pN?)", spec);
1762	}
1763
1764	return special_hex_number(buf, end, num, size);
1765}
1766
1767static noinline_for_stack
1768char *fourcc_string(char *buf, char *end, const u32 *fourcc,
1769		    struct printf_spec spec, const char *fmt)
1770{
1771	char output[sizeof("0123 little-endian (0x01234567)")];
1772	char *p = output;
1773	unsigned int i;
1774	u32 val;
1775
1776	if (fmt[1] != 'c' || fmt[2] != 'c')
1777		return error_string(buf, end, "(%p4?)", spec);
1778
1779	if (check_pointer(&buf, end, fourcc, spec))
1780		return buf;
1781
1782	val = *fourcc & ~BIT(31);
1783
1784	for (i = 0; i < sizeof(*fourcc); i++) {
1785		unsigned char c = val >> (i * 8);
1786
1787		/* Print non-control ASCII characters as-is, dot otherwise */
1788		*p++ = isascii(c) && isprint(c) ? c : '.';
1789	}
1790
1791	strcpy(p, *fourcc & BIT(31) ? " big-endian" : " little-endian");
1792	p += strlen(p);
1793
1794	*p++ = ' ';
1795	*p++ = '(';
1796	p = special_hex_number(p, output + sizeof(output) - 2, *fourcc, sizeof(u32));
1797	*p++ = ')';
1798	*p = '\0';
1799
1800	return string(buf, end, output, spec);
1801}
1802
1803static noinline_for_stack
1804char *address_val(char *buf, char *end, const void *addr,
1805		  struct printf_spec spec, const char *fmt)
1806{
1807	unsigned long long num;
1808	int size;
1809
1810	if (check_pointer(&buf, end, addr, spec))
1811		return buf;
1812
1813	switch (fmt[1]) {
1814	case 'd':
1815		num = *(const dma_addr_t *)addr;
1816		size = sizeof(dma_addr_t);
1817		break;
1818	case 'p':
1819	default:
1820		num = *(const phys_addr_t *)addr;
1821		size = sizeof(phys_addr_t);
1822		break;
1823	}
1824
1825	return special_hex_number(buf, end, num, size);
1826}
1827
1828static noinline_for_stack
1829char *date_str(char *buf, char *end, const struct rtc_time *tm, bool r)
1830{
1831	int year = tm->tm_year + (r ? 0 : 1900);
1832	int mon = tm->tm_mon + (r ? 0 : 1);
1833
1834	buf = number(buf, end, year, default_dec04_spec);
1835	if (buf < end)
1836		*buf = '-';
1837	buf++;
1838
1839	buf = number(buf, end, mon, default_dec02_spec);
1840	if (buf < end)
1841		*buf = '-';
1842	buf++;
1843
1844	return number(buf, end, tm->tm_mday, default_dec02_spec);
1845}
1846
1847static noinline_for_stack
1848char *time_str(char *buf, char *end, const struct rtc_time *tm, bool r)
1849{
1850	buf = number(buf, end, tm->tm_hour, default_dec02_spec);
1851	if (buf < end)
1852		*buf = ':';
1853	buf++;
1854
1855	buf = number(buf, end, tm->tm_min, default_dec02_spec);
1856	if (buf < end)
1857		*buf = ':';
1858	buf++;
1859
1860	return number(buf, end, tm->tm_sec, default_dec02_spec);
1861}
1862
1863static noinline_for_stack
1864char *rtc_str(char *buf, char *end, const struct rtc_time *tm,
1865	      struct printf_spec spec, const char *fmt)
1866{
1867	bool have_t = true, have_d = true;
1868	bool raw = false, iso8601_separator = true;
1869	bool found = true;
1870	int count = 2;
1871
1872	if (check_pointer(&buf, end, tm, spec))
1873		return buf;
1874
1875	switch (fmt[count]) {
1876	case 'd':
1877		have_t = false;
1878		count++;
1879		break;
1880	case 't':
1881		have_d = false;
1882		count++;
1883		break;
1884	}
1885
1886	do {
1887		switch (fmt[count++]) {
1888		case 'r':
1889			raw = true;
1890			break;
1891		case 's':
1892			iso8601_separator = false;
1893			break;
1894		default:
1895			found = false;
1896			break;
1897		}
1898	} while (found);
1899
1900	if (have_d)
1901		buf = date_str(buf, end, tm, raw);
1902	if (have_d && have_t) {
 
1903		if (buf < end)
1904			*buf = iso8601_separator ? 'T' : ' ';
1905		buf++;
1906	}
1907	if (have_t)
1908		buf = time_str(buf, end, tm, raw);
1909
1910	return buf;
1911}
1912
1913static noinline_for_stack
1914char *time64_str(char *buf, char *end, const time64_t time,
1915		 struct printf_spec spec, const char *fmt)
1916{
1917	struct rtc_time rtc_time;
1918	struct tm tm;
1919
1920	time64_to_tm(time, 0, &tm);
1921
1922	rtc_time.tm_sec = tm.tm_sec;
1923	rtc_time.tm_min = tm.tm_min;
1924	rtc_time.tm_hour = tm.tm_hour;
1925	rtc_time.tm_mday = tm.tm_mday;
1926	rtc_time.tm_mon = tm.tm_mon;
1927	rtc_time.tm_year = tm.tm_year;
1928	rtc_time.tm_wday = tm.tm_wday;
1929	rtc_time.tm_yday = tm.tm_yday;
1930
1931	rtc_time.tm_isdst = 0;
1932
1933	return rtc_str(buf, end, &rtc_time, spec, fmt);
1934}
1935
1936static noinline_for_stack
1937char *time_and_date(char *buf, char *end, void *ptr, struct printf_spec spec,
1938		    const char *fmt)
1939{
1940	switch (fmt[1]) {
1941	case 'R':
1942		return rtc_str(buf, end, (const struct rtc_time *)ptr, spec, fmt);
1943	case 'T':
1944		return time64_str(buf, end, *(const time64_t *)ptr, spec, fmt);
1945	default:
1946		return error_string(buf, end, "(%pt?)", spec);
1947	}
1948}
1949
1950static noinline_for_stack
1951char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
1952	    const char *fmt)
1953{
1954	if (!IS_ENABLED(CONFIG_HAVE_CLK))
1955		return error_string(buf, end, "(%pC?)", spec);
1956
1957	if (check_pointer(&buf, end, clk, spec))
1958		return buf;
1959
1960	switch (fmt[1]) {
1961	case 'n':
1962	default:
1963#ifdef CONFIG_COMMON_CLK
1964		return string(buf, end, __clk_get_name(clk), spec);
1965#else
1966		return ptr_to_id(buf, end, clk, spec);
1967#endif
1968	}
1969}
1970
1971static
1972char *format_flags(char *buf, char *end, unsigned long flags,
1973					const struct trace_print_flags *names)
1974{
1975	unsigned long mask;
1976
1977	for ( ; flags && names->name; names++) {
1978		mask = names->mask;
1979		if ((flags & mask) != mask)
1980			continue;
1981
1982		buf = string(buf, end, names->name, default_str_spec);
1983
1984		flags &= ~mask;
1985		if (flags) {
1986			if (buf < end)
1987				*buf = '|';
1988			buf++;
1989		}
1990	}
1991
1992	if (flags)
1993		buf = number(buf, end, flags, default_flag_spec);
1994
1995	return buf;
1996}
1997
1998struct page_flags_fields {
1999	int width;
2000	int shift;
2001	int mask;
2002	const struct printf_spec *spec;
2003	const char *name;
2004};
2005
2006static const struct page_flags_fields pff[] = {
2007	{SECTIONS_WIDTH, SECTIONS_PGSHIFT, SECTIONS_MASK,
2008	 &default_dec_spec, "section"},
2009	{NODES_WIDTH, NODES_PGSHIFT, NODES_MASK,
2010	 &default_dec_spec, "node"},
2011	{ZONES_WIDTH, ZONES_PGSHIFT, ZONES_MASK,
2012	 &default_dec_spec, "zone"},
2013	{LAST_CPUPID_WIDTH, LAST_CPUPID_PGSHIFT, LAST_CPUPID_MASK,
2014	 &default_flag_spec, "lastcpupid"},
2015	{KASAN_TAG_WIDTH, KASAN_TAG_PGSHIFT, KASAN_TAG_MASK,
2016	 &default_flag_spec, "kasantag"},
2017};
2018
2019static
2020char *format_page_flags(char *buf, char *end, unsigned long flags)
2021{
2022	unsigned long main_flags = flags & (BIT(NR_PAGEFLAGS) - 1);
2023	bool append = false;
2024	int i;
2025
2026	/* Page flags from the main area. */
2027	if (main_flags) {
2028		buf = format_flags(buf, end, main_flags, pageflag_names);
2029		append = true;
2030	}
2031
2032	/* Page flags from the fields area */
2033	for (i = 0; i < ARRAY_SIZE(pff); i++) {
2034		/* Skip undefined fields. */
2035		if (!pff[i].width)
2036			continue;
2037
2038		/* Format: Flag Name + '=' (equals sign) + Number + '|' (separator) */
2039		if (append) {
2040			if (buf < end)
2041				*buf = '|';
2042			buf++;
2043		}
2044
2045		buf = string(buf, end, pff[i].name, default_str_spec);
2046		if (buf < end)
2047			*buf = '=';
2048		buf++;
2049		buf = number(buf, end, (flags >> pff[i].shift) & pff[i].mask,
2050			     *pff[i].spec);
2051
2052		append = true;
2053	}
2054
2055	return buf;
2056}
2057
2058static noinline_for_stack
2059char *flags_string(char *buf, char *end, void *flags_ptr,
2060		   struct printf_spec spec, const char *fmt)
2061{
2062	unsigned long flags;
2063	const struct trace_print_flags *names;
2064
2065	if (check_pointer(&buf, end, flags_ptr, spec))
2066		return buf;
2067
2068	switch (fmt[1]) {
2069	case 'p':
2070		return format_page_flags(buf, end, *(unsigned long *)flags_ptr);
 
 
 
 
2071	case 'v':
2072		flags = *(unsigned long *)flags_ptr;
2073		names = vmaflag_names;
2074		break;
2075	case 'g':
2076		flags = (__force unsigned long)(*(gfp_t *)flags_ptr);
2077		names = gfpflag_names;
2078		break;
2079	default:
2080		return error_string(buf, end, "(%pG?)", spec);
2081	}
2082
2083	return format_flags(buf, end, flags, names);
2084}
2085
2086static noinline_for_stack
2087char *fwnode_full_name_string(struct fwnode_handle *fwnode, char *buf,
2088			      char *end)
2089{
2090	int depth;
2091
2092	/* Loop starting from the root node to the current node. */
2093	for (depth = fwnode_count_parents(fwnode); depth >= 0; depth--) {
2094		struct fwnode_handle *__fwnode =
2095			fwnode_get_nth_parent(fwnode, depth);
2096
2097		buf = string(buf, end, fwnode_get_name_prefix(__fwnode),
2098			     default_str_spec);
2099		buf = string(buf, end, fwnode_get_name(__fwnode),
2100			     default_str_spec);
2101
2102		fwnode_handle_put(__fwnode);
2103	}
2104
2105	return buf;
2106}
2107
2108static noinline_for_stack
2109char *device_node_string(char *buf, char *end, struct device_node *dn,
2110			 struct printf_spec spec, const char *fmt)
2111{
2112	char tbuf[sizeof("xxxx") + 1];
2113	const char *p;
2114	int ret;
2115	char *buf_start = buf;
2116	struct property *prop;
2117	bool has_mult, pass;
2118
2119	struct printf_spec str_spec = spec;
2120	str_spec.field_width = -1;
2121
2122	if (fmt[0] != 'F')
2123		return error_string(buf, end, "(%pO?)", spec);
2124
2125	if (!IS_ENABLED(CONFIG_OF))
2126		return error_string(buf, end, "(%pOF?)", spec);
2127
2128	if (check_pointer(&buf, end, dn, spec))
2129		return buf;
2130
2131	/* simple case without anything any more format specifiers */
2132	fmt++;
2133	if (fmt[0] == '\0' || strcspn(fmt,"fnpPFcC") > 0)
2134		fmt = "f";
2135
2136	for (pass = false; strspn(fmt,"fnpPFcC"); fmt++, pass = true) {
2137		int precision;
2138		if (pass) {
2139			if (buf < end)
2140				*buf = ':';
2141			buf++;
2142		}
2143
2144		switch (*fmt) {
2145		case 'f':	/* full_name */
2146			buf = fwnode_full_name_string(of_fwnode_handle(dn), buf,
2147						      end);
2148			break;
2149		case 'n':	/* name */
2150			p = fwnode_get_name(of_fwnode_handle(dn));
2151			precision = str_spec.precision;
2152			str_spec.precision = strchrnul(p, '@') - p;
2153			buf = string(buf, end, p, str_spec);
2154			str_spec.precision = precision;
2155			break;
2156		case 'p':	/* phandle */
2157			buf = number(buf, end, (unsigned int)dn->phandle, default_dec_spec);
2158			break;
2159		case 'P':	/* path-spec */
2160			p = fwnode_get_name(of_fwnode_handle(dn));
2161			if (!p[1])
2162				p = "/";
2163			buf = string(buf, end, p, str_spec);
2164			break;
2165		case 'F':	/* flags */
2166			tbuf[0] = of_node_check_flag(dn, OF_DYNAMIC) ? 'D' : '-';
2167			tbuf[1] = of_node_check_flag(dn, OF_DETACHED) ? 'd' : '-';
2168			tbuf[2] = of_node_check_flag(dn, OF_POPULATED) ? 'P' : '-';
2169			tbuf[3] = of_node_check_flag(dn, OF_POPULATED_BUS) ? 'B' : '-';
2170			tbuf[4] = 0;
2171			buf = string_nocheck(buf, end, tbuf, str_spec);
2172			break;
2173		case 'c':	/* major compatible string */
2174			ret = of_property_read_string(dn, "compatible", &p);
2175			if (!ret)
2176				buf = string(buf, end, p, str_spec);
2177			break;
2178		case 'C':	/* full compatible string */
2179			has_mult = false;
2180			of_property_for_each_string(dn, "compatible", prop, p) {
2181				if (has_mult)
2182					buf = string_nocheck(buf, end, ",", str_spec);
2183				buf = string_nocheck(buf, end, "\"", str_spec);
2184				buf = string(buf, end, p, str_spec);
2185				buf = string_nocheck(buf, end, "\"", str_spec);
2186
2187				has_mult = true;
2188			}
2189			break;
2190		default:
2191			break;
2192		}
2193	}
2194
2195	return widen_string(buf, buf - buf_start, end, spec);
2196}
2197
2198static noinline_for_stack
2199char *fwnode_string(char *buf, char *end, struct fwnode_handle *fwnode,
2200		    struct printf_spec spec, const char *fmt)
2201{
2202	struct printf_spec str_spec = spec;
2203	char *buf_start = buf;
2204
2205	str_spec.field_width = -1;
2206
2207	if (*fmt != 'w')
2208		return error_string(buf, end, "(%pf?)", spec);
2209
2210	if (check_pointer(&buf, end, fwnode, spec))
2211		return buf;
2212
2213	fmt++;
2214
2215	switch (*fmt) {
2216	case 'P':	/* name */
2217		buf = string(buf, end, fwnode_get_name(fwnode), str_spec);
2218		break;
2219	case 'f':	/* full_name */
2220	default:
2221		buf = fwnode_full_name_string(fwnode, buf, end);
2222		break;
2223	}
2224
2225	return widen_string(buf, buf - buf_start, end, spec);
2226}
2227
2228/* Disable pointer hashing if requested */
2229bool no_hash_pointers __ro_after_init;
2230EXPORT_SYMBOL_GPL(no_hash_pointers);
2231
2232int __init no_hash_pointers_enable(char *str)
2233{
2234	if (no_hash_pointers)
2235		return 0;
2236
2237	no_hash_pointers = true;
2238
2239	pr_warn("**********************************************************\n");
2240	pr_warn("**   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **\n");
2241	pr_warn("**                                                      **\n");
2242	pr_warn("** This system shows unhashed kernel memory addresses   **\n");
2243	pr_warn("** via the console, logs, and other interfaces. This    **\n");
2244	pr_warn("** might reduce the security of your system.            **\n");
2245	pr_warn("**                                                      **\n");
2246	pr_warn("** If you see this message and you are not debugging    **\n");
2247	pr_warn("** the kernel, report this immediately to your system   **\n");
2248	pr_warn("** administrator!                                       **\n");
2249	pr_warn("**                                                      **\n");
2250	pr_warn("**   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **\n");
2251	pr_warn("**********************************************************\n");
2252
2253	return 0;
2254}
2255early_param("no_hash_pointers", no_hash_pointers_enable);
2256
2257/*
2258 * Show a '%p' thing.  A kernel extension is that the '%p' is followed
2259 * by an extra set of alphanumeric characters that are extended format
2260 * specifiers.
2261 *
2262 * Please update scripts/checkpatch.pl when adding/removing conversion
2263 * characters.  (Search for "check for vsprintf extension").
2264 *
2265 * Right now we handle:
2266 *
2267 * - 'S' For symbolic direct pointers (or function descriptors) with offset
2268 * - 's' For symbolic direct pointers (or function descriptors) without offset
2269 * - '[Ss]R' as above with __builtin_extract_return_addr() translation
2270 * - 'S[R]b' as above with module build ID (for use in backtraces)
2271 * - '[Ff]' %pf and %pF were obsoleted and later removed in favor of
2272 *	    %ps and %pS. Be careful when re-using these specifiers.
2273 * - 'B' For backtraced symbolic direct pointers with offset
2274 * - 'Bb' as above with module build ID (for use in backtraces)
2275 * - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref]
2276 * - 'r' For raw struct resource, e.g., [mem 0x0-0x1f flags 0x201]
2277 * - 'b[l]' For a bitmap, the number of bits is determined by the field
2278 *       width which must be explicitly specified either as part of the
2279 *       format string '%32b[l]' or through '%*b[l]', [l] selects
2280 *       range-list format instead of hex format
2281 * - 'M' For a 6-byte MAC address, it prints the address in the
2282 *       usual colon-separated hex notation
2283 * - 'm' For a 6-byte MAC address, it prints the hex address without colons
2284 * - 'MF' For a 6-byte MAC FDDI address, it prints the address
2285 *       with a dash-separated hex notation
2286 * - '[mM]R' For a 6-byte MAC address, Reverse order (Bluetooth)
2287 * - 'I' [46] for IPv4/IPv6 addresses printed in the usual way
2288 *       IPv4 uses dot-separated decimal without leading 0's (1.2.3.4)
2289 *       IPv6 uses colon separated network-order 16 bit hex with leading 0's
2290 *       [S][pfs]
2291 *       Generic IPv4/IPv6 address (struct sockaddr *) that falls back to
2292 *       [4] or [6] and is able to print port [p], flowinfo [f], scope [s]
2293 * - 'i' [46] for 'raw' IPv4/IPv6 addresses
2294 *       IPv6 omits the colons (01020304...0f)
2295 *       IPv4 uses dot-separated decimal with leading 0's (010.123.045.006)
2296 *       [S][pfs]
2297 *       Generic IPv4/IPv6 address (struct sockaddr *) that falls back to
2298 *       [4] or [6] and is able to print port [p], flowinfo [f], scope [s]
2299 * - '[Ii][4S][hnbl]' IPv4 addresses in host, network, big or little endian order
2300 * - 'I[6S]c' for IPv6 addresses printed as specified by
2301 *       https://tools.ietf.org/html/rfc5952
2302 * - 'E[achnops]' For an escaped buffer, where rules are defined by combination
2303 *                of the following flags (see string_escape_mem() for the
2304 *                details):
2305 *                  a - ESCAPE_ANY
2306 *                  c - ESCAPE_SPECIAL
2307 *                  h - ESCAPE_HEX
2308 *                  n - ESCAPE_NULL
2309 *                  o - ESCAPE_OCTAL
2310 *                  p - ESCAPE_NP
2311 *                  s - ESCAPE_SPACE
2312 *                By default ESCAPE_ANY_NP is used.
2313 * - 'U' For a 16 byte UUID/GUID, it prints the UUID/GUID in the form
2314 *       "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
2315 *       Options for %pU are:
2316 *         b big endian lower case hex (default)
2317 *         B big endian UPPER case hex
2318 *         l little endian lower case hex
2319 *         L little endian UPPER case hex
2320 *           big endian output byte order is:
2321 *             [0][1][2][3]-[4][5]-[6][7]-[8][9]-[10][11][12][13][14][15]
2322 *           little endian output byte order is:
2323 *             [3][2][1][0]-[5][4]-[7][6]-[8][9]-[10][11][12][13][14][15]
2324 * - 'V' For a struct va_format which contains a format string * and va_list *,
2325 *       call vsnprintf(->format, *->va_list).
2326 *       Implements a "recursive vsnprintf".
2327 *       Do not use this feature without some mechanism to verify the
2328 *       correctness of the format string and va_list arguments.
2329 * - 'K' For a kernel pointer that should be hidden from unprivileged users.
2330 *       Use only for procfs, sysfs and similar files, not printk(); please
2331 *       read the documentation (path below) first.
2332 * - 'NF' For a netdev_features_t
2333 * - '4cc' V4L2 or DRM FourCC code, with endianness and raw numerical value.
2334 * - 'h[CDN]' For a variable-length buffer, it prints it as a hex string with
2335 *            a certain separator (' ' by default):
2336 *              C colon
2337 *              D dash
2338 *              N no separator
2339 *            The maximum supported length is 64 bytes of the input. Consider
2340 *            to use print_hex_dump() for the larger input.
2341 * - 'a[pd]' For address types [p] phys_addr_t, [d] dma_addr_t and derivatives
2342 *           (default assumed to be phys_addr_t, passed by reference)
2343 * - 'd[234]' For a dentry name (optionally 2-4 last components)
2344 * - 'D[234]' Same as 'd' but for a struct file
2345 * - 'g' For block_device name (gendisk + partition number)
2346 * - 't[RT][dt][r][s]' For time and date as represented by:
2347 *      R    struct rtc_time
2348 *      T    time64_t
2349 * - 'C' For a clock, it prints the name (Common Clock Framework) or address
2350 *       (legacy clock framework) of the clock
2351 * - 'Cn' For a clock, it prints the name (Common Clock Framework) or address
2352 *        (legacy clock framework) of the clock
2353 * - 'G' For flags to be printed as a collection of symbolic strings that would
2354 *       construct the specific value. Supported flags given by option:
2355 *       p page flags (see struct page) given as pointer to unsigned long
2356 *       g gfp flags (GFP_* and __GFP_*) given as pointer to gfp_t
2357 *       v vma flags (VM_*) given as pointer to unsigned long
2358 * - 'OF[fnpPcCF]'  For a device tree object
2359 *                  Without any optional arguments prints the full_name
2360 *                  f device node full_name
2361 *                  n device node name
2362 *                  p device node phandle
2363 *                  P device node path spec (name + @unit)
2364 *                  F device node flags
2365 *                  c major compatible string
2366 *                  C full compatible string
2367 * - 'fw[fP]'	For a firmware node (struct fwnode_handle) pointer
2368 *		Without an option prints the full name of the node
2369 *		f full name
2370 *		P node name, including a possible unit address
2371 * - 'x' For printing the address unmodified. Equivalent to "%lx".
2372 *       Please read the documentation (path below) before using!
2373 * - '[ku]s' For a BPF/tracing related format specifier, e.g. used out of
2374 *           bpf_trace_printk() where [ku] prefix specifies either kernel (k)
2375 *           or user (u) memory to probe, and:
2376 *              s a string, equivalent to "%s" on direct vsnprintf() use
2377 *
2378 * ** When making changes please also update:
2379 *	Documentation/core-api/printk-formats.rst
2380 *
2381 * Note: The default behaviour (unadorned %p) is to hash the address,
2382 * rendering it useful as a unique identifier.
2383 */
2384static noinline_for_stack
2385char *pointer(const char *fmt, char *buf, char *end, void *ptr,
2386	      struct printf_spec spec)
2387{
2388	switch (*fmt) {
2389	case 'S':
2390	case 's':
2391		ptr = dereference_symbol_descriptor(ptr);
2392		fallthrough;
2393	case 'B':
2394		return symbol_string(buf, end, ptr, spec, fmt);
2395	case 'R':
2396	case 'r':
2397		return resource_string(buf, end, ptr, spec, fmt);
2398	case 'h':
2399		return hex_string(buf, end, ptr, spec, fmt);
2400	case 'b':
2401		switch (fmt[1]) {
2402		case 'l':
2403			return bitmap_list_string(buf, end, ptr, spec, fmt);
2404		default:
2405			return bitmap_string(buf, end, ptr, spec, fmt);
2406		}
2407	case 'M':			/* Colon separated: 00:01:02:03:04:05 */
2408	case 'm':			/* Contiguous: 000102030405 */
2409					/* [mM]F (FDDI) */
2410					/* [mM]R (Reverse order; Bluetooth) */
2411		return mac_address_string(buf, end, ptr, spec, fmt);
2412	case 'I':			/* Formatted IP supported
2413					 * 4:	1.2.3.4
2414					 * 6:	0001:0203:...:0708
2415					 * 6c:	1::708 or 1::1.2.3.4
2416					 */
2417	case 'i':			/* Contiguous:
2418					 * 4:	001.002.003.004
2419					 * 6:   000102...0f
2420					 */
2421		return ip_addr_string(buf, end, ptr, spec, fmt);
2422	case 'E':
2423		return escaped_string(buf, end, ptr, spec, fmt);
2424	case 'U':
2425		return uuid_string(buf, end, ptr, spec, fmt);
2426	case 'V':
2427		return va_format(buf, end, ptr, spec, fmt);
2428	case 'K':
2429		return restricted_pointer(buf, end, ptr, spec);
2430	case 'N':
2431		return netdev_bits(buf, end, ptr, spec, fmt);
2432	case '4':
2433		return fourcc_string(buf, end, ptr, spec, fmt);
2434	case 'a':
2435		return address_val(buf, end, ptr, spec, fmt);
2436	case 'd':
2437		return dentry_name(buf, end, ptr, spec, fmt);
2438	case 't':
2439		return time_and_date(buf, end, ptr, spec, fmt);
2440	case 'C':
2441		return clock(buf, end, ptr, spec, fmt);
2442	case 'D':
2443		return file_dentry_name(buf, end, ptr, spec, fmt);
2444#ifdef CONFIG_BLOCK
2445	case 'g':
2446		return bdev_name(buf, end, ptr, spec, fmt);
2447#endif
2448
2449	case 'G':
2450		return flags_string(buf, end, ptr, spec, fmt);
2451	case 'O':
2452		return device_node_string(buf, end, ptr, spec, fmt + 1);
2453	case 'f':
2454		return fwnode_string(buf, end, ptr, spec, fmt + 1);
2455	case 'x':
2456		return pointer_string(buf, end, ptr, spec);
2457	case 'e':
2458		/* %pe with a non-ERR_PTR gets treated as plain %p */
2459		if (!IS_ERR(ptr))
2460			break;
2461		return err_ptr(buf, end, ptr, spec);
2462	case 'u':
2463	case 'k':
2464		switch (fmt[1]) {
2465		case 's':
2466			return string(buf, end, ptr, spec);
2467		default:
2468			return error_string(buf, end, "(einval)", spec);
2469		}
2470	}
2471
2472	/*
2473	 * default is to _not_ leak addresses, so hash before printing,
2474	 * unless no_hash_pointers is specified on the command line.
2475	 */
2476	if (unlikely(no_hash_pointers))
2477		return pointer_string(buf, end, ptr, spec);
2478	else
2479		return ptr_to_id(buf, end, ptr, spec);
2480}
2481
2482/*
2483 * Helper function to decode printf style format.
2484 * Each call decode a token from the format and return the
2485 * number of characters read (or likely the delta where it wants
2486 * to go on the next call).
2487 * The decoded token is returned through the parameters
2488 *
2489 * 'h', 'l', or 'L' for integer fields
2490 * 'z' support added 23/7/1999 S.H.
2491 * 'z' changed to 'Z' --davidm 1/25/99
2492 * 'Z' changed to 'z' --adobriyan 2017-01-25
2493 * 't' added for ptrdiff_t
2494 *
2495 * @fmt: the format string
2496 * @type of the token returned
2497 * @flags: various flags such as +, -, # tokens..
2498 * @field_width: overwritten width
2499 * @base: base of the number (octal, hex, ...)
2500 * @precision: precision of a number
2501 * @qualifier: qualifier of a number (long, size_t, ...)
2502 */
2503static noinline_for_stack
2504int format_decode(const char *fmt, struct printf_spec *spec)
2505{
2506	const char *start = fmt;
2507	char qualifier;
2508
2509	/* we finished early by reading the field width */
2510	if (spec->type == FORMAT_TYPE_WIDTH) {
2511		if (spec->field_width < 0) {
2512			spec->field_width = -spec->field_width;
2513			spec->flags |= LEFT;
2514		}
2515		spec->type = FORMAT_TYPE_NONE;
2516		goto precision;
2517	}
2518
2519	/* we finished early by reading the precision */
2520	if (spec->type == FORMAT_TYPE_PRECISION) {
2521		if (spec->precision < 0)
2522			spec->precision = 0;
2523
2524		spec->type = FORMAT_TYPE_NONE;
2525		goto qualifier;
2526	}
2527
2528	/* By default */
2529	spec->type = FORMAT_TYPE_NONE;
2530
2531	for (; *fmt ; ++fmt) {
2532		if (*fmt == '%')
2533			break;
2534	}
2535
2536	/* Return the current non-format string */
2537	if (fmt != start || !*fmt)
2538		return fmt - start;
2539
2540	/* Process flags */
2541	spec->flags = 0;
2542
2543	while (1) { /* this also skips first '%' */
2544		bool found = true;
2545
2546		++fmt;
2547
2548		switch (*fmt) {
2549		case '-': spec->flags |= LEFT;    break;
2550		case '+': spec->flags |= PLUS;    break;
2551		case ' ': spec->flags |= SPACE;   break;
2552		case '#': spec->flags |= SPECIAL; break;
2553		case '0': spec->flags |= ZEROPAD; break;
2554		default:  found = false;
2555		}
2556
2557		if (!found)
2558			break;
2559	}
2560
2561	/* get field width */
2562	spec->field_width = -1;
2563
2564	if (isdigit(*fmt))
2565		spec->field_width = skip_atoi(&fmt);
2566	else if (*fmt == '*') {
2567		/* it's the next argument */
2568		spec->type = FORMAT_TYPE_WIDTH;
2569		return ++fmt - start;
2570	}
2571
2572precision:
2573	/* get the precision */
2574	spec->precision = -1;
2575	if (*fmt == '.') {
2576		++fmt;
2577		if (isdigit(*fmt)) {
2578			spec->precision = skip_atoi(&fmt);
2579			if (spec->precision < 0)
2580				spec->precision = 0;
2581		} else if (*fmt == '*') {
2582			/* it's the next argument */
2583			spec->type = FORMAT_TYPE_PRECISION;
2584			return ++fmt - start;
2585		}
2586	}
2587
2588qualifier:
2589	/* get the conversion qualifier */
2590	qualifier = 0;
2591	if (*fmt == 'h' || _tolower(*fmt) == 'l' ||
2592	    *fmt == 'z' || *fmt == 't') {
2593		qualifier = *fmt++;
2594		if (unlikely(qualifier == *fmt)) {
2595			if (qualifier == 'l') {
2596				qualifier = 'L';
2597				++fmt;
2598			} else if (qualifier == 'h') {
2599				qualifier = 'H';
2600				++fmt;
2601			}
2602		}
2603	}
2604
2605	/* default base */
2606	spec->base = 10;
2607	switch (*fmt) {
2608	case 'c':
2609		spec->type = FORMAT_TYPE_CHAR;
2610		return ++fmt - start;
2611
2612	case 's':
2613		spec->type = FORMAT_TYPE_STR;
2614		return ++fmt - start;
2615
2616	case 'p':
2617		spec->type = FORMAT_TYPE_PTR;
2618		return ++fmt - start;
2619
2620	case '%':
2621		spec->type = FORMAT_TYPE_PERCENT_CHAR;
2622		return ++fmt - start;
2623
2624	/* integer number formats - set up the flags and "break" */
2625	case 'o':
2626		spec->base = 8;
2627		break;
2628
2629	case 'x':
2630		spec->flags |= SMALL;
2631		fallthrough;
2632
2633	case 'X':
2634		spec->base = 16;
2635		break;
2636
2637	case 'd':
2638	case 'i':
2639		spec->flags |= SIGN;
2640		break;
2641	case 'u':
2642		break;
2643
2644	case 'n':
2645		/*
2646		 * Since %n poses a greater security risk than
2647		 * utility, treat it as any other invalid or
2648		 * unsupported format specifier.
2649		 */
2650		fallthrough;
2651
2652	default:
2653		WARN_ONCE(1, "Please remove unsupported %%%c in format string\n", *fmt);
2654		spec->type = FORMAT_TYPE_INVALID;
2655		return fmt - start;
2656	}
2657
2658	if (qualifier == 'L')
2659		spec->type = FORMAT_TYPE_LONG_LONG;
2660	else if (qualifier == 'l') {
2661		BUILD_BUG_ON(FORMAT_TYPE_ULONG + SIGN != FORMAT_TYPE_LONG);
2662		spec->type = FORMAT_TYPE_ULONG + (spec->flags & SIGN);
2663	} else if (qualifier == 'z') {
2664		spec->type = FORMAT_TYPE_SIZE_T;
2665	} else if (qualifier == 't') {
2666		spec->type = FORMAT_TYPE_PTRDIFF;
2667	} else if (qualifier == 'H') {
2668		BUILD_BUG_ON(FORMAT_TYPE_UBYTE + SIGN != FORMAT_TYPE_BYTE);
2669		spec->type = FORMAT_TYPE_UBYTE + (spec->flags & SIGN);
2670	} else if (qualifier == 'h') {
2671		BUILD_BUG_ON(FORMAT_TYPE_USHORT + SIGN != FORMAT_TYPE_SHORT);
2672		spec->type = FORMAT_TYPE_USHORT + (spec->flags & SIGN);
2673	} else {
2674		BUILD_BUG_ON(FORMAT_TYPE_UINT + SIGN != FORMAT_TYPE_INT);
2675		spec->type = FORMAT_TYPE_UINT + (spec->flags & SIGN);
2676	}
2677
2678	return ++fmt - start;
2679}
2680
2681static void
2682set_field_width(struct printf_spec *spec, int width)
2683{
2684	spec->field_width = width;
2685	if (WARN_ONCE(spec->field_width != width, "field width %d too large", width)) {
2686		spec->field_width = clamp(width, -FIELD_WIDTH_MAX, FIELD_WIDTH_MAX);
2687	}
2688}
2689
2690static void
2691set_precision(struct printf_spec *spec, int prec)
2692{
2693	spec->precision = prec;
2694	if (WARN_ONCE(spec->precision != prec, "precision %d too large", prec)) {
2695		spec->precision = clamp(prec, 0, PRECISION_MAX);
2696	}
2697}
2698
2699/**
2700 * vsnprintf - Format a string and place it in a buffer
2701 * @buf: The buffer to place the result into
2702 * @size: The size of the buffer, including the trailing null space
2703 * @fmt: The format string to use
2704 * @args: Arguments for the format string
2705 *
2706 * This function generally follows C99 vsnprintf, but has some
2707 * extensions and a few limitations:
2708 *
2709 *  - ``%n`` is unsupported
2710 *  - ``%p*`` is handled by pointer()
2711 *
2712 * See pointer() or Documentation/core-api/printk-formats.rst for more
2713 * extensive description.
2714 *
2715 * **Please update the documentation in both places when making changes**
2716 *
2717 * The return value is the number of characters which would
2718 * be generated for the given input, excluding the trailing
2719 * '\0', as per ISO C99. If you want to have the exact
2720 * number of characters written into @buf as return value
2721 * (not including the trailing '\0'), use vscnprintf(). If the
2722 * return is greater than or equal to @size, the resulting
2723 * string is truncated.
2724 *
2725 * If you're not already dealing with a va_list consider using snprintf().
2726 */
2727int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
2728{
2729	unsigned long long num;
2730	char *str, *end;
2731	struct printf_spec spec = {0};
2732
2733	/* Reject out-of-range values early.  Large positive sizes are
2734	   used for unknown buffer sizes. */
2735	if (WARN_ON_ONCE(size > INT_MAX))
2736		return 0;
2737
2738	str = buf;
2739	end = buf + size;
2740
2741	/* Make sure end is always >= buf */
2742	if (end < buf) {
2743		end = ((void *)-1);
2744		size = end - buf;
2745	}
2746
2747	while (*fmt) {
2748		const char *old_fmt = fmt;
2749		int read = format_decode(fmt, &spec);
2750
2751		fmt += read;
2752
2753		switch (spec.type) {
2754		case FORMAT_TYPE_NONE: {
2755			int copy = read;
2756			if (str < end) {
2757				if (copy > end - str)
2758					copy = end - str;
2759				memcpy(str, old_fmt, copy);
2760			}
2761			str += read;
2762			break;
2763		}
2764
2765		case FORMAT_TYPE_WIDTH:
2766			set_field_width(&spec, va_arg(args, int));
2767			break;
2768
2769		case FORMAT_TYPE_PRECISION:
2770			set_precision(&spec, va_arg(args, int));
2771			break;
2772
2773		case FORMAT_TYPE_CHAR: {
2774			char c;
2775
2776			if (!(spec.flags & LEFT)) {
2777				while (--spec.field_width > 0) {
2778					if (str < end)
2779						*str = ' ';
2780					++str;
2781
2782				}
2783			}
2784			c = (unsigned char) va_arg(args, int);
2785			if (str < end)
2786				*str = c;
2787			++str;
2788			while (--spec.field_width > 0) {
2789				if (str < end)
2790					*str = ' ';
2791				++str;
2792			}
2793			break;
2794		}
2795
2796		case FORMAT_TYPE_STR:
2797			str = string(str, end, va_arg(args, char *), spec);
2798			break;
2799
2800		case FORMAT_TYPE_PTR:
2801			str = pointer(fmt, str, end, va_arg(args, void *),
2802				      spec);
2803			while (isalnum(*fmt))
2804				fmt++;
2805			break;
2806
2807		case FORMAT_TYPE_PERCENT_CHAR:
2808			if (str < end)
2809				*str = '%';
2810			++str;
2811			break;
2812
2813		case FORMAT_TYPE_INVALID:
2814			/*
2815			 * Presumably the arguments passed gcc's type
2816			 * checking, but there is no safe or sane way
2817			 * for us to continue parsing the format and
2818			 * fetching from the va_list; the remaining
2819			 * specifiers and arguments would be out of
2820			 * sync.
2821			 */
2822			goto out;
2823
2824		default:
2825			switch (spec.type) {
2826			case FORMAT_TYPE_LONG_LONG:
2827				num = va_arg(args, long long);
2828				break;
2829			case FORMAT_TYPE_ULONG:
2830				num = va_arg(args, unsigned long);
2831				break;
2832			case FORMAT_TYPE_LONG:
2833				num = va_arg(args, long);
2834				break;
2835			case FORMAT_TYPE_SIZE_T:
2836				if (spec.flags & SIGN)
2837					num = va_arg(args, ssize_t);
2838				else
2839					num = va_arg(args, size_t);
2840				break;
2841			case FORMAT_TYPE_PTRDIFF:
2842				num = va_arg(args, ptrdiff_t);
2843				break;
2844			case FORMAT_TYPE_UBYTE:
2845				num = (unsigned char) va_arg(args, int);
2846				break;
2847			case FORMAT_TYPE_BYTE:
2848				num = (signed char) va_arg(args, int);
2849				break;
2850			case FORMAT_TYPE_USHORT:
2851				num = (unsigned short) va_arg(args, int);
2852				break;
2853			case FORMAT_TYPE_SHORT:
2854				num = (short) va_arg(args, int);
2855				break;
2856			case FORMAT_TYPE_INT:
2857				num = (int) va_arg(args, int);
2858				break;
2859			default:
2860				num = va_arg(args, unsigned int);
2861			}
2862
2863			str = number(str, end, num, spec);
2864		}
2865	}
2866
2867out:
2868	if (size > 0) {
2869		if (str < end)
2870			*str = '\0';
2871		else
2872			end[-1] = '\0';
2873	}
2874
2875	/* the trailing null byte doesn't count towards the total */
2876	return str-buf;
2877
2878}
2879EXPORT_SYMBOL(vsnprintf);
2880
2881/**
2882 * vscnprintf - Format a string and place it in a buffer
2883 * @buf: The buffer to place the result into
2884 * @size: The size of the buffer, including the trailing null space
2885 * @fmt: The format string to use
2886 * @args: Arguments for the format string
2887 *
2888 * The return value is the number of characters which have been written into
2889 * the @buf not including the trailing '\0'. If @size is == 0 the function
2890 * returns 0.
2891 *
2892 * If you're not already dealing with a va_list consider using scnprintf().
2893 *
2894 * See the vsnprintf() documentation for format string extensions over C99.
2895 */
2896int vscnprintf(char *buf, size_t size, const char *fmt, va_list args)
2897{
2898	int i;
2899
2900	i = vsnprintf(buf, size, fmt, args);
2901
2902	if (likely(i < size))
2903		return i;
2904	if (size != 0)
2905		return size - 1;
2906	return 0;
2907}
2908EXPORT_SYMBOL(vscnprintf);
2909
2910/**
2911 * snprintf - Format a string and place it in a buffer
2912 * @buf: The buffer to place the result into
2913 * @size: The size of the buffer, including the trailing null space
2914 * @fmt: The format string to use
2915 * @...: Arguments for the format string
2916 *
2917 * The return value is the number of characters which would be
2918 * generated for the given input, excluding the trailing null,
2919 * as per ISO C99.  If the return is greater than or equal to
2920 * @size, the resulting string is truncated.
2921 *
2922 * See the vsnprintf() documentation for format string extensions over C99.
2923 */
2924int snprintf(char *buf, size_t size, const char *fmt, ...)
2925{
2926	va_list args;
2927	int i;
2928
2929	va_start(args, fmt);
2930	i = vsnprintf(buf, size, fmt, args);
2931	va_end(args);
2932
2933	return i;
2934}
2935EXPORT_SYMBOL(snprintf);
2936
2937/**
2938 * scnprintf - Format a string and place it in a buffer
2939 * @buf: The buffer to place the result into
2940 * @size: The size of the buffer, including the trailing null space
2941 * @fmt: The format string to use
2942 * @...: Arguments for the format string
2943 *
2944 * The return value is the number of characters written into @buf not including
2945 * the trailing '\0'. If @size is == 0 the function returns 0.
2946 */
2947
2948int scnprintf(char *buf, size_t size, const char *fmt, ...)
2949{
2950	va_list args;
2951	int i;
2952
2953	va_start(args, fmt);
2954	i = vscnprintf(buf, size, fmt, args);
2955	va_end(args);
2956
2957	return i;
2958}
2959EXPORT_SYMBOL(scnprintf);
2960
2961/**
2962 * vsprintf - Format a string and place it in a buffer
2963 * @buf: The buffer to place the result into
2964 * @fmt: The format string to use
2965 * @args: Arguments for the format string
2966 *
2967 * The function returns the number of characters written
2968 * into @buf. Use vsnprintf() or vscnprintf() in order to avoid
2969 * buffer overflows.
2970 *
2971 * If you're not already dealing with a va_list consider using sprintf().
2972 *
2973 * See the vsnprintf() documentation for format string extensions over C99.
2974 */
2975int vsprintf(char *buf, const char *fmt, va_list args)
2976{
2977	return vsnprintf(buf, INT_MAX, fmt, args);
2978}
2979EXPORT_SYMBOL(vsprintf);
2980
2981/**
2982 * sprintf - Format a string and place it in a buffer
2983 * @buf: The buffer to place the result into
2984 * @fmt: The format string to use
2985 * @...: Arguments for the format string
2986 *
2987 * The function returns the number of characters written
2988 * into @buf. Use snprintf() or scnprintf() in order to avoid
2989 * buffer overflows.
2990 *
2991 * See the vsnprintf() documentation for format string extensions over C99.
2992 */
2993int sprintf(char *buf, const char *fmt, ...)
2994{
2995	va_list args;
2996	int i;
2997
2998	va_start(args, fmt);
2999	i = vsnprintf(buf, INT_MAX, fmt, args);
3000	va_end(args);
3001
3002	return i;
3003}
3004EXPORT_SYMBOL(sprintf);
3005
3006#ifdef CONFIG_BINARY_PRINTF
3007/*
3008 * bprintf service:
3009 * vbin_printf() - VA arguments to binary data
3010 * bstr_printf() - Binary data to text string
3011 */
3012
3013/**
3014 * vbin_printf - Parse a format string and place args' binary value in a buffer
3015 * @bin_buf: The buffer to place args' binary value
3016 * @size: The size of the buffer(by words(32bits), not characters)
3017 * @fmt: The format string to use
3018 * @args: Arguments for the format string
3019 *
3020 * The format follows C99 vsnprintf, except %n is ignored, and its argument
3021 * is skipped.
3022 *
3023 * The return value is the number of words(32bits) which would be generated for
3024 * the given input.
3025 *
3026 * NOTE:
3027 * If the return value is greater than @size, the resulting bin_buf is NOT
3028 * valid for bstr_printf().
3029 */
3030int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args)
3031{
3032	struct printf_spec spec = {0};
3033	char *str, *end;
3034	int width;
3035
3036	str = (char *)bin_buf;
3037	end = (char *)(bin_buf + size);
3038
3039#define save_arg(type)							\
3040({									\
3041	unsigned long long value;					\
3042	if (sizeof(type) == 8) {					\
3043		unsigned long long val8;				\
3044		str = PTR_ALIGN(str, sizeof(u32));			\
3045		val8 = va_arg(args, unsigned long long);		\
3046		if (str + sizeof(type) <= end) {			\
3047			*(u32 *)str = *(u32 *)&val8;			\
3048			*(u32 *)(str + 4) = *((u32 *)&val8 + 1);	\
3049		}							\
3050		value = val8;						\
3051	} else {							\
3052		unsigned int val4;					\
3053		str = PTR_ALIGN(str, sizeof(type));			\
3054		val4 = va_arg(args, int);				\
3055		if (str + sizeof(type) <= end)				\
3056			*(typeof(type) *)str = (type)(long)val4;	\
3057		value = (unsigned long long)val4;			\
3058	}								\
3059	str += sizeof(type);						\
3060	value;								\
3061})
3062
3063	while (*fmt) {
3064		int read = format_decode(fmt, &spec);
3065
3066		fmt += read;
3067
3068		switch (spec.type) {
3069		case FORMAT_TYPE_NONE:
3070		case FORMAT_TYPE_PERCENT_CHAR:
3071			break;
3072		case FORMAT_TYPE_INVALID:
3073			goto out;
3074
3075		case FORMAT_TYPE_WIDTH:
3076		case FORMAT_TYPE_PRECISION:
3077			width = (int)save_arg(int);
3078			/* Pointers may require the width */
3079			if (*fmt == 'p')
3080				set_field_width(&spec, width);
3081			break;
3082
3083		case FORMAT_TYPE_CHAR:
3084			save_arg(char);
3085			break;
3086
3087		case FORMAT_TYPE_STR: {
3088			const char *save_str = va_arg(args, char *);
3089			const char *err_msg;
3090			size_t len;
3091
3092			err_msg = check_pointer_msg(save_str);
3093			if (err_msg)
3094				save_str = err_msg;
3095
3096			len = strlen(save_str) + 1;
3097			if (str + len < end)
3098				memcpy(str, save_str, len);
3099			str += len;
3100			break;
3101		}
3102
3103		case FORMAT_TYPE_PTR:
3104			/* Dereferenced pointers must be done now */
3105			switch (*fmt) {
3106			/* Dereference of functions is still OK */
3107			case 'S':
3108			case 's':
3109			case 'x':
3110			case 'K':
3111			case 'e':
3112				save_arg(void *);
3113				break;
3114			default:
3115				if (!isalnum(*fmt)) {
3116					save_arg(void *);
3117					break;
3118				}
3119				str = pointer(fmt, str, end, va_arg(args, void *),
3120					      spec);
3121				if (str + 1 < end)
3122					*str++ = '\0';
3123				else
3124					end[-1] = '\0'; /* Must be nul terminated */
3125			}
3126			/* skip all alphanumeric pointer suffixes */
3127			while (isalnum(*fmt))
3128				fmt++;
3129			break;
3130
3131		default:
3132			switch (spec.type) {
3133
3134			case FORMAT_TYPE_LONG_LONG:
3135				save_arg(long long);
3136				break;
3137			case FORMAT_TYPE_ULONG:
3138			case FORMAT_TYPE_LONG:
3139				save_arg(unsigned long);
3140				break;
3141			case FORMAT_TYPE_SIZE_T:
3142				save_arg(size_t);
3143				break;
3144			case FORMAT_TYPE_PTRDIFF:
3145				save_arg(ptrdiff_t);
3146				break;
3147			case FORMAT_TYPE_UBYTE:
3148			case FORMAT_TYPE_BYTE:
3149				save_arg(char);
3150				break;
3151			case FORMAT_TYPE_USHORT:
3152			case FORMAT_TYPE_SHORT:
3153				save_arg(short);
3154				break;
3155			default:
3156				save_arg(int);
3157			}
3158		}
3159	}
3160
3161out:
3162	return (u32 *)(PTR_ALIGN(str, sizeof(u32))) - bin_buf;
3163#undef save_arg
3164}
3165EXPORT_SYMBOL_GPL(vbin_printf);
3166
3167/**
3168 * bstr_printf - Format a string from binary arguments and place it in a buffer
3169 * @buf: The buffer to place the result into
3170 * @size: The size of the buffer, including the trailing null space
3171 * @fmt: The format string to use
3172 * @bin_buf: Binary arguments for the format string
3173 *
3174 * This function like C99 vsnprintf, but the difference is that vsnprintf gets
3175 * arguments from stack, and bstr_printf gets arguments from @bin_buf which is
3176 * a binary buffer that generated by vbin_printf.
3177 *
3178 * The format follows C99 vsnprintf, but has some extensions:
3179 *  see vsnprintf comment for details.
3180 *
3181 * The return value is the number of characters which would
3182 * be generated for the given input, excluding the trailing
3183 * '\0', as per ISO C99. If you want to have the exact
3184 * number of characters written into @buf as return value
3185 * (not including the trailing '\0'), use vscnprintf(). If the
3186 * return is greater than or equal to @size, the resulting
3187 * string is truncated.
3188 */
3189int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
3190{
3191	struct printf_spec spec = {0};
3192	char *str, *end;
3193	const char *args = (const char *)bin_buf;
3194
3195	if (WARN_ON_ONCE(size > INT_MAX))
3196		return 0;
3197
3198	str = buf;
3199	end = buf + size;
3200
3201#define get_arg(type)							\
3202({									\
3203	typeof(type) value;						\
3204	if (sizeof(type) == 8) {					\
3205		args = PTR_ALIGN(args, sizeof(u32));			\
3206		*(u32 *)&value = *(u32 *)args;				\
3207		*((u32 *)&value + 1) = *(u32 *)(args + 4);		\
3208	} else {							\
3209		args = PTR_ALIGN(args, sizeof(type));			\
3210		value = *(typeof(type) *)args;				\
3211	}								\
3212	args += sizeof(type);						\
3213	value;								\
3214})
3215
3216	/* Make sure end is always >= buf */
3217	if (end < buf) {
3218		end = ((void *)-1);
3219		size = end - buf;
3220	}
3221
3222	while (*fmt) {
3223		const char *old_fmt = fmt;
3224		int read = format_decode(fmt, &spec);
3225
3226		fmt += read;
3227
3228		switch (spec.type) {
3229		case FORMAT_TYPE_NONE: {
3230			int copy = read;
3231			if (str < end) {
3232				if (copy > end - str)
3233					copy = end - str;
3234				memcpy(str, old_fmt, copy);
3235			}
3236			str += read;
3237			break;
3238		}
3239
3240		case FORMAT_TYPE_WIDTH:
3241			set_field_width(&spec, get_arg(int));
3242			break;
3243
3244		case FORMAT_TYPE_PRECISION:
3245			set_precision(&spec, get_arg(int));
3246			break;
3247
3248		case FORMAT_TYPE_CHAR: {
3249			char c;
3250
3251			if (!(spec.flags & LEFT)) {
3252				while (--spec.field_width > 0) {
3253					if (str < end)
3254						*str = ' ';
3255					++str;
3256				}
3257			}
3258			c = (unsigned char) get_arg(char);
3259			if (str < end)
3260				*str = c;
3261			++str;
3262			while (--spec.field_width > 0) {
3263				if (str < end)
3264					*str = ' ';
3265				++str;
3266			}
3267			break;
3268		}
3269
3270		case FORMAT_TYPE_STR: {
3271			const char *str_arg = args;
3272			args += strlen(str_arg) + 1;
3273			str = string(str, end, (char *)str_arg, spec);
3274			break;
3275		}
3276
3277		case FORMAT_TYPE_PTR: {
3278			bool process = false;
3279			int copy, len;
3280			/* Non function dereferences were already done */
3281			switch (*fmt) {
3282			case 'S':
3283			case 's':
 
 
3284			case 'x':
3285			case 'K':
3286			case 'e':
3287				process = true;
3288				break;
3289			default:
3290				if (!isalnum(*fmt)) {
3291					process = true;
3292					break;
3293				}
3294				/* Pointer dereference was already processed */
3295				if (str < end) {
3296					len = copy = strlen(args);
3297					if (copy > end - str)
3298						copy = end - str;
3299					memcpy(str, args, copy);
3300					str += len;
3301					args += len + 1;
3302				}
3303			}
3304			if (process)
3305				str = pointer(fmt, str, end, get_arg(void *), spec);
3306
3307			while (isalnum(*fmt))
3308				fmt++;
3309			break;
3310		}
3311
3312		case FORMAT_TYPE_PERCENT_CHAR:
3313			if (str < end)
3314				*str = '%';
3315			++str;
3316			break;
3317
3318		case FORMAT_TYPE_INVALID:
3319			goto out;
3320
3321		default: {
3322			unsigned long long num;
3323
3324			switch (spec.type) {
3325
3326			case FORMAT_TYPE_LONG_LONG:
3327				num = get_arg(long long);
3328				break;
3329			case FORMAT_TYPE_ULONG:
3330			case FORMAT_TYPE_LONG:
3331				num = get_arg(unsigned long);
3332				break;
3333			case FORMAT_TYPE_SIZE_T:
3334				num = get_arg(size_t);
3335				break;
3336			case FORMAT_TYPE_PTRDIFF:
3337				num = get_arg(ptrdiff_t);
3338				break;
3339			case FORMAT_TYPE_UBYTE:
3340				num = get_arg(unsigned char);
3341				break;
3342			case FORMAT_TYPE_BYTE:
3343				num = get_arg(signed char);
3344				break;
3345			case FORMAT_TYPE_USHORT:
3346				num = get_arg(unsigned short);
3347				break;
3348			case FORMAT_TYPE_SHORT:
3349				num = get_arg(short);
3350				break;
3351			case FORMAT_TYPE_UINT:
3352				num = get_arg(unsigned int);
3353				break;
3354			default:
3355				num = get_arg(int);
3356			}
3357
3358			str = number(str, end, num, spec);
3359		} /* default: */
3360		} /* switch(spec.type) */
3361	} /* while(*fmt) */
3362
3363out:
3364	if (size > 0) {
3365		if (str < end)
3366			*str = '\0';
3367		else
3368			end[-1] = '\0';
3369	}
3370
3371#undef get_arg
3372
3373	/* the trailing null byte doesn't count towards the total */
3374	return str - buf;
3375}
3376EXPORT_SYMBOL_GPL(bstr_printf);
3377
3378/**
3379 * bprintf - Parse a format string and place args' binary value in a buffer
3380 * @bin_buf: The buffer to place args' binary value
3381 * @size: The size of the buffer(by words(32bits), not characters)
3382 * @fmt: The format string to use
3383 * @...: Arguments for the format string
3384 *
3385 * The function returns the number of words(u32) written
3386 * into @bin_buf.
3387 */
3388int bprintf(u32 *bin_buf, size_t size, const char *fmt, ...)
3389{
3390	va_list args;
3391	int ret;
3392
3393	va_start(args, fmt);
3394	ret = vbin_printf(bin_buf, size, fmt, args);
3395	va_end(args);
3396
3397	return ret;
3398}
3399EXPORT_SYMBOL_GPL(bprintf);
3400
3401#endif /* CONFIG_BINARY_PRINTF */
3402
3403/**
3404 * vsscanf - Unformat a buffer into a list of arguments
3405 * @buf:	input buffer
3406 * @fmt:	format of buffer
3407 * @args:	arguments
3408 */
3409int vsscanf(const char *buf, const char *fmt, va_list args)
3410{
3411	const char *str = buf;
3412	char *next;
3413	char digit;
3414	int num = 0;
3415	u8 qualifier;
3416	unsigned int base;
3417	union {
3418		long long s;
3419		unsigned long long u;
3420	} val;
3421	s16 field_width;
3422	bool is_sign;
3423
3424	while (*fmt) {
3425		/* skip any white space in format */
3426		/* white space in format matches any amount of
3427		 * white space, including none, in the input.
3428		 */
3429		if (isspace(*fmt)) {
3430			fmt = skip_spaces(++fmt);
3431			str = skip_spaces(str);
3432		}
3433
3434		/* anything that is not a conversion must match exactly */
3435		if (*fmt != '%' && *fmt) {
3436			if (*fmt++ != *str++)
3437				break;
3438			continue;
3439		}
3440
3441		if (!*fmt)
3442			break;
3443		++fmt;
3444
3445		/* skip this conversion.
3446		 * advance both strings to next white space
3447		 */
3448		if (*fmt == '*') {
3449			if (!*str)
3450				break;
3451			while (!isspace(*fmt) && *fmt != '%' && *fmt) {
3452				/* '%*[' not yet supported, invalid format */
3453				if (*fmt == '[')
3454					return num;
3455				fmt++;
3456			}
3457			while (!isspace(*str) && *str)
3458				str++;
3459			continue;
3460		}
3461
3462		/* get field width */
3463		field_width = -1;
3464		if (isdigit(*fmt)) {
3465			field_width = skip_atoi(&fmt);
3466			if (field_width <= 0)
3467				break;
3468		}
3469
3470		/* get conversion qualifier */
3471		qualifier = -1;
3472		if (*fmt == 'h' || _tolower(*fmt) == 'l' ||
3473		    *fmt == 'z') {
3474			qualifier = *fmt++;
3475			if (unlikely(qualifier == *fmt)) {
3476				if (qualifier == 'h') {
3477					qualifier = 'H';
3478					fmt++;
3479				} else if (qualifier == 'l') {
3480					qualifier = 'L';
3481					fmt++;
3482				}
3483			}
3484		}
3485
3486		if (!*fmt)
3487			break;
3488
3489		if (*fmt == 'n') {
3490			/* return number of characters read so far */
3491			*va_arg(args, int *) = str - buf;
3492			++fmt;
3493			continue;
3494		}
3495
3496		if (!*str)
3497			break;
3498
3499		base = 10;
3500		is_sign = false;
3501
3502		switch (*fmt++) {
3503		case 'c':
3504		{
3505			char *s = (char *)va_arg(args, char*);
3506			if (field_width == -1)
3507				field_width = 1;
3508			do {
3509				*s++ = *str++;
3510			} while (--field_width > 0 && *str);
3511			num++;
3512		}
3513		continue;
3514		case 's':
3515		{
3516			char *s = (char *)va_arg(args, char *);
3517			if (field_width == -1)
3518				field_width = SHRT_MAX;
3519			/* first, skip leading white space in buffer */
3520			str = skip_spaces(str);
3521
3522			/* now copy until next white space */
3523			while (*str && !isspace(*str) && field_width--)
3524				*s++ = *str++;
3525			*s = '\0';
3526			num++;
3527		}
3528		continue;
3529		/*
3530		 * Warning: This implementation of the '[' conversion specifier
3531		 * deviates from its glibc counterpart in the following ways:
3532		 * (1) It does NOT support ranges i.e. '-' is NOT a special
3533		 *     character
3534		 * (2) It cannot match the closing bracket ']' itself
3535		 * (3) A field width is required
3536		 * (4) '%*[' (discard matching input) is currently not supported
3537		 *
3538		 * Example usage:
3539		 * ret = sscanf("00:0a:95","%2[^:]:%2[^:]:%2[^:]",
3540		 *		buf1, buf2, buf3);
3541		 * if (ret < 3)
3542		 *    // etc..
3543		 */
3544		case '[':
3545		{
3546			char *s = (char *)va_arg(args, char *);
3547			DECLARE_BITMAP(set, 256) = {0};
3548			unsigned int len = 0;
3549			bool negate = (*fmt == '^');
3550
3551			/* field width is required */
3552			if (field_width == -1)
3553				return num;
3554
3555			if (negate)
3556				++fmt;
3557
3558			for ( ; *fmt && *fmt != ']'; ++fmt, ++len)
3559				set_bit((u8)*fmt, set);
3560
3561			/* no ']' or no character set found */
3562			if (!*fmt || !len)
3563				return num;
3564			++fmt;
3565
3566			if (negate) {
3567				bitmap_complement(set, set, 256);
3568				/* exclude null '\0' byte */
3569				clear_bit(0, set);
3570			}
3571
3572			/* match must be non-empty */
3573			if (!test_bit((u8)*str, set))
3574				return num;
3575
3576			while (test_bit((u8)*str, set) && field_width--)
3577				*s++ = *str++;
3578			*s = '\0';
3579			++num;
3580		}
3581		continue;
3582		case 'o':
3583			base = 8;
3584			break;
3585		case 'x':
3586		case 'X':
3587			base = 16;
3588			break;
3589		case 'i':
3590			base = 0;
3591			fallthrough;
3592		case 'd':
3593			is_sign = true;
3594			fallthrough;
3595		case 'u':
3596			break;
3597		case '%':
3598			/* looking for '%' in str */
3599			if (*str++ != '%')
3600				return num;
3601			continue;
3602		default:
3603			/* invalid format; stop here */
3604			return num;
3605		}
3606
3607		/* have some sort of integer conversion.
3608		 * first, skip white space in buffer.
3609		 */
3610		str = skip_spaces(str);
3611
3612		digit = *str;
3613		if (is_sign && digit == '-') {
3614			if (field_width == 1)
3615				break;
3616
3617			digit = *(str + 1);
3618		}
3619
3620		if (!digit
3621		    || (base == 16 && !isxdigit(digit))
3622		    || (base == 10 && !isdigit(digit))
3623		    || (base == 8 && (!isdigit(digit) || digit > '7'))
3624		    || (base == 0 && !isdigit(digit)))
3625			break;
3626
3627		if (is_sign)
3628			val.s = simple_strntoll(str,
3629						field_width >= 0 ? field_width : INT_MAX,
3630						&next, base);
3631		else
3632			val.u = simple_strntoull(str,
3633						 field_width >= 0 ? field_width : INT_MAX,
3634						 &next, base);
 
 
 
 
 
 
 
 
 
 
 
 
3635
3636		switch (qualifier) {
3637		case 'H':	/* that's 'hh' in format */
3638			if (is_sign)
3639				*va_arg(args, signed char *) = val.s;
3640			else
3641				*va_arg(args, unsigned char *) = val.u;
3642			break;
3643		case 'h':
3644			if (is_sign)
3645				*va_arg(args, short *) = val.s;
3646			else
3647				*va_arg(args, unsigned short *) = val.u;
3648			break;
3649		case 'l':
3650			if (is_sign)
3651				*va_arg(args, long *) = val.s;
3652			else
3653				*va_arg(args, unsigned long *) = val.u;
3654			break;
3655		case 'L':
3656			if (is_sign)
3657				*va_arg(args, long long *) = val.s;
3658			else
3659				*va_arg(args, unsigned long long *) = val.u;
3660			break;
3661		case 'z':
3662			*va_arg(args, size_t *) = val.u;
3663			break;
3664		default:
3665			if (is_sign)
3666				*va_arg(args, int *) = val.s;
3667			else
3668				*va_arg(args, unsigned int *) = val.u;
3669			break;
3670		}
3671		num++;
3672
3673		if (!next)
3674			break;
3675		str = next;
3676	}
3677
3678	return num;
3679}
3680EXPORT_SYMBOL(vsscanf);
3681
3682/**
3683 * sscanf - Unformat a buffer into a list of arguments
3684 * @buf:	input buffer
3685 * @fmt:	formatting of buffer
3686 * @...:	resulting arguments
3687 */
3688int sscanf(const char *buf, const char *fmt, ...)
3689{
3690	va_list args;
3691	int i;
3692
3693	va_start(args, fmt);
3694	i = vsscanf(buf, fmt, args);
3695	va_end(args);
3696
3697	return i;
3698}
3699EXPORT_SYMBOL(sscanf);
v5.9
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 *  linux/lib/vsprintf.c
   4 *
   5 *  Copyright (C) 1991, 1992  Linus Torvalds
   6 */
   7
   8/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */
   9/*
  10 * Wirzenius wrote this portably, Torvalds fucked it up :-)
  11 */
  12
  13/*
  14 * Fri Jul 13 2001 Crutcher Dunnavant <crutcher+kernel@datastacks.com>
  15 * - changed to provide snprintf and vsnprintf functions
  16 * So Feb  1 16:51:32 CET 2004 Juergen Quade <quade@hsnr.de>
  17 * - scnprintf and vscnprintf
  18 */
  19
  20#include <stdarg.h>
  21#include <linux/build_bug.h>
  22#include <linux/clk.h>
  23#include <linux/clk-provider.h>
  24#include <linux/errname.h>
  25#include <linux/module.h>	/* for KSYM_SYMBOL_LEN */
  26#include <linux/types.h>
  27#include <linux/string.h>
  28#include <linux/ctype.h>
  29#include <linux/kernel.h>
  30#include <linux/kallsyms.h>
  31#include <linux/math64.h>
  32#include <linux/uaccess.h>
  33#include <linux/ioport.h>
  34#include <linux/dcache.h>
  35#include <linux/cred.h>
  36#include <linux/rtc.h>
  37#include <linux/time.h>
  38#include <linux/uuid.h>
  39#include <linux/of.h>
  40#include <net/addrconf.h>
  41#include <linux/siphash.h>
  42#include <linux/compiler.h>
  43#include <linux/property.h>
  44#ifdef CONFIG_BLOCK
  45#include <linux/blkdev.h>
  46#endif
  47
  48#include "../mm/internal.h"	/* For the trace_print_flags arrays */
  49
  50#include <asm/page.h>		/* for PAGE_SIZE */
  51#include <asm/byteorder.h>	/* cpu_to_le16 */
  52
  53#include <linux/string_helpers.h>
  54#include "kstrtox.h"
  55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  56/**
  57 * simple_strtoull - convert a string to an unsigned long long
  58 * @cp: The start of the string
  59 * @endp: A pointer to the end of the parsed string will be placed here
  60 * @base: The number base to use
  61 *
  62 * This function has caveats. Please use kstrtoull instead.
  63 */
 
  64unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base)
  65{
  66	unsigned long long result;
  67	unsigned int rv;
  68
  69	cp = _parse_integer_fixup_radix(cp, &base);
  70	rv = _parse_integer(cp, base, &result);
  71	/* FIXME */
  72	cp += (rv & ~KSTRTOX_OVERFLOW);
  73
  74	if (endp)
  75		*endp = (char *)cp;
  76
  77	return result;
  78}
  79EXPORT_SYMBOL(simple_strtoull);
  80
  81/**
  82 * simple_strtoul - convert a string to an unsigned long
  83 * @cp: The start of the string
  84 * @endp: A pointer to the end of the parsed string will be placed here
  85 * @base: The number base to use
  86 *
  87 * This function has caveats. Please use kstrtoul instead.
  88 */
  89unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)
  90{
  91	return simple_strtoull(cp, endp, base);
  92}
  93EXPORT_SYMBOL(simple_strtoul);
  94
  95/**
  96 * simple_strtol - convert a string to a signed long
  97 * @cp: The start of the string
  98 * @endp: A pointer to the end of the parsed string will be placed here
  99 * @base: The number base to use
 100 *
 101 * This function has caveats. Please use kstrtol instead.
 102 */
 103long simple_strtol(const char *cp, char **endp, unsigned int base)
 104{
 105	if (*cp == '-')
 106		return -simple_strtoul(cp + 1, endp, base);
 107
 108	return simple_strtoul(cp, endp, base);
 109}
 110EXPORT_SYMBOL(simple_strtol);
 111
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 112/**
 113 * simple_strtoll - convert a string to a signed long long
 114 * @cp: The start of the string
 115 * @endp: A pointer to the end of the parsed string will be placed here
 116 * @base: The number base to use
 117 *
 118 * This function has caveats. Please use kstrtoll instead.
 119 */
 120long long simple_strtoll(const char *cp, char **endp, unsigned int base)
 121{
 122	if (*cp == '-')
 123		return -simple_strtoull(cp + 1, endp, base);
 124
 125	return simple_strtoull(cp, endp, base);
 126}
 127EXPORT_SYMBOL(simple_strtoll);
 128
 129static noinline_for_stack
 130int skip_atoi(const char **s)
 131{
 132	int i = 0;
 133
 134	do {
 135		i = i*10 + *((*s)++) - '0';
 136	} while (isdigit(**s));
 137
 138	return i;
 139}
 140
 141/*
 142 * Decimal conversion is by far the most typical, and is used for
 143 * /proc and /sys data. This directly impacts e.g. top performance
 144 * with many processes running. We optimize it for speed by emitting
 145 * two characters at a time, using a 200 byte lookup table. This
 146 * roughly halves the number of multiplications compared to computing
 147 * the digits one at a time. Implementation strongly inspired by the
 148 * previous version, which in turn used ideas described at
 149 * <http://www.cs.uiowa.edu/~jones/bcd/divide.html> (with permission
 150 * from the author, Douglas W. Jones).
 151 *
 152 * It turns out there is precisely one 26 bit fixed-point
 153 * approximation a of 64/100 for which x/100 == (x * (u64)a) >> 32
 154 * holds for all x in [0, 10^8-1], namely a = 0x28f5c29. The actual
 155 * range happens to be somewhat larger (x <= 1073741898), but that's
 156 * irrelevant for our purpose.
 157 *
 158 * For dividing a number in the range [10^4, 10^6-1] by 100, we still
 159 * need a 32x32->64 bit multiply, so we simply use the same constant.
 160 *
 161 * For dividing a number in the range [100, 10^4-1] by 100, there are
 162 * several options. The simplest is (x * 0x147b) >> 19, which is valid
 163 * for all x <= 43698.
 164 */
 165
 166static const u16 decpair[100] = {
 167#define _(x) (__force u16) cpu_to_le16(((x % 10) | ((x / 10) << 8)) + 0x3030)
 168	_( 0), _( 1), _( 2), _( 3), _( 4), _( 5), _( 6), _( 7), _( 8), _( 9),
 169	_(10), _(11), _(12), _(13), _(14), _(15), _(16), _(17), _(18), _(19),
 170	_(20), _(21), _(22), _(23), _(24), _(25), _(26), _(27), _(28), _(29),
 171	_(30), _(31), _(32), _(33), _(34), _(35), _(36), _(37), _(38), _(39),
 172	_(40), _(41), _(42), _(43), _(44), _(45), _(46), _(47), _(48), _(49),
 173	_(50), _(51), _(52), _(53), _(54), _(55), _(56), _(57), _(58), _(59),
 174	_(60), _(61), _(62), _(63), _(64), _(65), _(66), _(67), _(68), _(69),
 175	_(70), _(71), _(72), _(73), _(74), _(75), _(76), _(77), _(78), _(79),
 176	_(80), _(81), _(82), _(83), _(84), _(85), _(86), _(87), _(88), _(89),
 177	_(90), _(91), _(92), _(93), _(94), _(95), _(96), _(97), _(98), _(99),
 178#undef _
 179};
 180
 181/*
 182 * This will print a single '0' even if r == 0, since we would
 183 * immediately jump to out_r where two 0s would be written but only
 184 * one of them accounted for in buf. This is needed by ip4_string
 185 * below. All other callers pass a non-zero value of r.
 186*/
 187static noinline_for_stack
 188char *put_dec_trunc8(char *buf, unsigned r)
 189{
 190	unsigned q;
 191
 192	/* 1 <= r < 10^8 */
 193	if (r < 100)
 194		goto out_r;
 195
 196	/* 100 <= r < 10^8 */
 197	q = (r * (u64)0x28f5c29) >> 32;
 198	*((u16 *)buf) = decpair[r - 100*q];
 199	buf += 2;
 200
 201	/* 1 <= q < 10^6 */
 202	if (q < 100)
 203		goto out_q;
 204
 205	/*  100 <= q < 10^6 */
 206	r = (q * (u64)0x28f5c29) >> 32;
 207	*((u16 *)buf) = decpair[q - 100*r];
 208	buf += 2;
 209
 210	/* 1 <= r < 10^4 */
 211	if (r < 100)
 212		goto out_r;
 213
 214	/* 100 <= r < 10^4 */
 215	q = (r * 0x147b) >> 19;
 216	*((u16 *)buf) = decpair[r - 100*q];
 217	buf += 2;
 218out_q:
 219	/* 1 <= q < 100 */
 220	r = q;
 221out_r:
 222	/* 1 <= r < 100 */
 223	*((u16 *)buf) = decpair[r];
 224	buf += r < 10 ? 1 : 2;
 225	return buf;
 226}
 227
 228#if BITS_PER_LONG == 64 && BITS_PER_LONG_LONG == 64
 229static noinline_for_stack
 230char *put_dec_full8(char *buf, unsigned r)
 231{
 232	unsigned q;
 233
 234	/* 0 <= r < 10^8 */
 235	q = (r * (u64)0x28f5c29) >> 32;
 236	*((u16 *)buf) = decpair[r - 100*q];
 237	buf += 2;
 238
 239	/* 0 <= q < 10^6 */
 240	r = (q * (u64)0x28f5c29) >> 32;
 241	*((u16 *)buf) = decpair[q - 100*r];
 242	buf += 2;
 243
 244	/* 0 <= r < 10^4 */
 245	q = (r * 0x147b) >> 19;
 246	*((u16 *)buf) = decpair[r - 100*q];
 247	buf += 2;
 248
 249	/* 0 <= q < 100 */
 250	*((u16 *)buf) = decpair[q];
 251	buf += 2;
 252	return buf;
 253}
 254
 255static noinline_for_stack
 256char *put_dec(char *buf, unsigned long long n)
 257{
 258	if (n >= 100*1000*1000)
 259		buf = put_dec_full8(buf, do_div(n, 100*1000*1000));
 260	/* 1 <= n <= 1.6e11 */
 261	if (n >= 100*1000*1000)
 262		buf = put_dec_full8(buf, do_div(n, 100*1000*1000));
 263	/* 1 <= n < 1e8 */
 264	return put_dec_trunc8(buf, n);
 265}
 266
 267#elif BITS_PER_LONG == 32 && BITS_PER_LONG_LONG == 64
 268
 269static void
 270put_dec_full4(char *buf, unsigned r)
 271{
 272	unsigned q;
 273
 274	/* 0 <= r < 10^4 */
 275	q = (r * 0x147b) >> 19;
 276	*((u16 *)buf) = decpair[r - 100*q];
 277	buf += 2;
 278	/* 0 <= q < 100 */
 279	*((u16 *)buf) = decpair[q];
 280}
 281
 282/*
 283 * Call put_dec_full4 on x % 10000, return x / 10000.
 284 * The approximation x/10000 == (x * 0x346DC5D7) >> 43
 285 * holds for all x < 1,128,869,999.  The largest value this
 286 * helper will ever be asked to convert is 1,125,520,955.
 287 * (second call in the put_dec code, assuming n is all-ones).
 288 */
 289static noinline_for_stack
 290unsigned put_dec_helper4(char *buf, unsigned x)
 291{
 292        uint32_t q = (x * (uint64_t)0x346DC5D7) >> 43;
 293
 294        put_dec_full4(buf, x - q * 10000);
 295        return q;
 296}
 297
 298/* Based on code by Douglas W. Jones found at
 299 * <http://www.cs.uiowa.edu/~jones/bcd/decimal.html#sixtyfour>
 300 * (with permission from the author).
 301 * Performs no 64-bit division and hence should be fast on 32-bit machines.
 302 */
 303static
 304char *put_dec(char *buf, unsigned long long n)
 305{
 306	uint32_t d3, d2, d1, q, h;
 307
 308	if (n < 100*1000*1000)
 309		return put_dec_trunc8(buf, n);
 310
 311	d1  = ((uint32_t)n >> 16); /* implicit "& 0xffff" */
 312	h   = (n >> 32);
 313	d2  = (h      ) & 0xffff;
 314	d3  = (h >> 16); /* implicit "& 0xffff" */
 315
 316	/* n = 2^48 d3 + 2^32 d2 + 2^16 d1 + d0
 317	     = 281_4749_7671_0656 d3 + 42_9496_7296 d2 + 6_5536 d1 + d0 */
 318	q   = 656 * d3 + 7296 * d2 + 5536 * d1 + ((uint32_t)n & 0xffff);
 319	q = put_dec_helper4(buf, q);
 320
 321	q += 7671 * d3 + 9496 * d2 + 6 * d1;
 322	q = put_dec_helper4(buf+4, q);
 323
 324	q += 4749 * d3 + 42 * d2;
 325	q = put_dec_helper4(buf+8, q);
 326
 327	q += 281 * d3;
 328	buf += 12;
 329	if (q)
 330		buf = put_dec_trunc8(buf, q);
 331	else while (buf[-1] == '0')
 332		--buf;
 333
 334	return buf;
 335}
 336
 337#endif
 338
 339/*
 340 * Convert passed number to decimal string.
 341 * Returns the length of string.  On buffer overflow, returns 0.
 342 *
 343 * If speed is not important, use snprintf(). It's easy to read the code.
 344 */
 345int num_to_str(char *buf, int size, unsigned long long num, unsigned int width)
 346{
 347	/* put_dec requires 2-byte alignment of the buffer. */
 348	char tmp[sizeof(num) * 3] __aligned(2);
 349	int idx, len;
 350
 351	/* put_dec() may work incorrectly for num = 0 (generate "", not "0") */
 352	if (num <= 9) {
 353		tmp[0] = '0' + num;
 354		len = 1;
 355	} else {
 356		len = put_dec(tmp, num) - tmp;
 357	}
 358
 359	if (len > size || width > size)
 360		return 0;
 361
 362	if (width > len) {
 363		width = width - len;
 364		for (idx = 0; idx < width; idx++)
 365			buf[idx] = ' ';
 366	} else {
 367		width = 0;
 368	}
 369
 370	for (idx = 0; idx < len; ++idx)
 371		buf[idx + width] = tmp[len - idx - 1];
 372
 373	return len + width;
 374}
 375
 376#define SIGN	1		/* unsigned/signed, must be 1 */
 377#define LEFT	2		/* left justified */
 378#define PLUS	4		/* show plus */
 379#define SPACE	8		/* space if plus */
 380#define ZEROPAD	16		/* pad with zero, must be 16 == '0' - ' ' */
 381#define SMALL	32		/* use lowercase in hex (must be 32 == 0x20) */
 382#define SPECIAL	64		/* prefix hex with "0x", octal with "0" */
 383
 384static_assert(ZEROPAD == ('0' - ' '));
 385static_assert(SMALL == ' ');
 386
 387enum format_type {
 388	FORMAT_TYPE_NONE, /* Just a string part */
 389	FORMAT_TYPE_WIDTH,
 390	FORMAT_TYPE_PRECISION,
 391	FORMAT_TYPE_CHAR,
 392	FORMAT_TYPE_STR,
 393	FORMAT_TYPE_PTR,
 394	FORMAT_TYPE_PERCENT_CHAR,
 395	FORMAT_TYPE_INVALID,
 396	FORMAT_TYPE_LONG_LONG,
 397	FORMAT_TYPE_ULONG,
 398	FORMAT_TYPE_LONG,
 399	FORMAT_TYPE_UBYTE,
 400	FORMAT_TYPE_BYTE,
 401	FORMAT_TYPE_USHORT,
 402	FORMAT_TYPE_SHORT,
 403	FORMAT_TYPE_UINT,
 404	FORMAT_TYPE_INT,
 405	FORMAT_TYPE_SIZE_T,
 406	FORMAT_TYPE_PTRDIFF
 407};
 408
 409struct printf_spec {
 410	unsigned int	type:8;		/* format_type enum */
 411	signed int	field_width:24;	/* width of output field */
 412	unsigned int	flags:8;	/* flags to number() */
 413	unsigned int	base:8;		/* number base, 8, 10 or 16 only */
 414	signed int	precision:16;	/* # of digits/chars */
 415} __packed;
 416static_assert(sizeof(struct printf_spec) == 8);
 417
 418#define FIELD_WIDTH_MAX ((1 << 23) - 1)
 419#define PRECISION_MAX ((1 << 15) - 1)
 420
 421static noinline_for_stack
 422char *number(char *buf, char *end, unsigned long long num,
 423	     struct printf_spec spec)
 424{
 425	/* put_dec requires 2-byte alignment of the buffer. */
 426	char tmp[3 * sizeof(num)] __aligned(2);
 427	char sign;
 428	char locase;
 429	int need_pfx = ((spec.flags & SPECIAL) && spec.base != 10);
 430	int i;
 431	bool is_zero = num == 0LL;
 432	int field_width = spec.field_width;
 433	int precision = spec.precision;
 434
 435	/* locase = 0 or 0x20. ORing digits or letters with 'locase'
 436	 * produces same digits or (maybe lowercased) letters */
 437	locase = (spec.flags & SMALL);
 438	if (spec.flags & LEFT)
 439		spec.flags &= ~ZEROPAD;
 440	sign = 0;
 441	if (spec.flags & SIGN) {
 442		if ((signed long long)num < 0) {
 443			sign = '-';
 444			num = -(signed long long)num;
 445			field_width--;
 446		} else if (spec.flags & PLUS) {
 447			sign = '+';
 448			field_width--;
 449		} else if (spec.flags & SPACE) {
 450			sign = ' ';
 451			field_width--;
 452		}
 453	}
 454	if (need_pfx) {
 455		if (spec.base == 16)
 456			field_width -= 2;
 457		else if (!is_zero)
 458			field_width--;
 459	}
 460
 461	/* generate full string in tmp[], in reverse order */
 462	i = 0;
 463	if (num < spec.base)
 464		tmp[i++] = hex_asc_upper[num] | locase;
 465	else if (spec.base != 10) { /* 8 or 16 */
 466		int mask = spec.base - 1;
 467		int shift = 3;
 468
 469		if (spec.base == 16)
 470			shift = 4;
 471		do {
 472			tmp[i++] = (hex_asc_upper[((unsigned char)num) & mask] | locase);
 473			num >>= shift;
 474		} while (num);
 475	} else { /* base 10 */
 476		i = put_dec(tmp, num) - tmp;
 477	}
 478
 479	/* printing 100 using %2d gives "100", not "00" */
 480	if (i > precision)
 481		precision = i;
 482	/* leading space padding */
 483	field_width -= precision;
 484	if (!(spec.flags & (ZEROPAD | LEFT))) {
 485		while (--field_width >= 0) {
 486			if (buf < end)
 487				*buf = ' ';
 488			++buf;
 489		}
 490	}
 491	/* sign */
 492	if (sign) {
 493		if (buf < end)
 494			*buf = sign;
 495		++buf;
 496	}
 497	/* "0x" / "0" prefix */
 498	if (need_pfx) {
 499		if (spec.base == 16 || !is_zero) {
 500			if (buf < end)
 501				*buf = '0';
 502			++buf;
 503		}
 504		if (spec.base == 16) {
 505			if (buf < end)
 506				*buf = ('X' | locase);
 507			++buf;
 508		}
 509	}
 510	/* zero or space padding */
 511	if (!(spec.flags & LEFT)) {
 512		char c = ' ' + (spec.flags & ZEROPAD);
 513
 514		while (--field_width >= 0) {
 515			if (buf < end)
 516				*buf = c;
 517			++buf;
 518		}
 519	}
 520	/* hmm even more zero padding? */
 521	while (i <= --precision) {
 522		if (buf < end)
 523			*buf = '0';
 524		++buf;
 525	}
 526	/* actual digits of result */
 527	while (--i >= 0) {
 528		if (buf < end)
 529			*buf = tmp[i];
 530		++buf;
 531	}
 532	/* trailing space padding */
 533	while (--field_width >= 0) {
 534		if (buf < end)
 535			*buf = ' ';
 536		++buf;
 537	}
 538
 539	return buf;
 540}
 541
 542static noinline_for_stack
 543char *special_hex_number(char *buf, char *end, unsigned long long num, int size)
 544{
 545	struct printf_spec spec;
 546
 547	spec.type = FORMAT_TYPE_PTR;
 548	spec.field_width = 2 + 2 * size;	/* 0x + hex */
 549	spec.flags = SPECIAL | SMALL | ZEROPAD;
 550	spec.base = 16;
 551	spec.precision = -1;
 552
 553	return number(buf, end, num, spec);
 554}
 555
 556static void move_right(char *buf, char *end, unsigned len, unsigned spaces)
 557{
 558	size_t size;
 559	if (buf >= end)	/* nowhere to put anything */
 560		return;
 561	size = end - buf;
 562	if (size <= spaces) {
 563		memset(buf, ' ', size);
 564		return;
 565	}
 566	if (len) {
 567		if (len > size - spaces)
 568			len = size - spaces;
 569		memmove(buf + spaces, buf, len);
 570	}
 571	memset(buf, ' ', spaces);
 572}
 573
 574/*
 575 * Handle field width padding for a string.
 576 * @buf: current buffer position
 577 * @n: length of string
 578 * @end: end of output buffer
 579 * @spec: for field width and flags
 580 * Returns: new buffer position after padding.
 581 */
 582static noinline_for_stack
 583char *widen_string(char *buf, int n, char *end, struct printf_spec spec)
 584{
 585	unsigned spaces;
 586
 587	if (likely(n >= spec.field_width))
 588		return buf;
 589	/* we want to pad the sucker */
 590	spaces = spec.field_width - n;
 591	if (!(spec.flags & LEFT)) {
 592		move_right(buf - n, end, n, spaces);
 593		return buf + spaces;
 594	}
 595	while (spaces--) {
 596		if (buf < end)
 597			*buf = ' ';
 598		++buf;
 599	}
 600	return buf;
 601}
 602
 603/* Handle string from a well known address. */
 604static char *string_nocheck(char *buf, char *end, const char *s,
 605			    struct printf_spec spec)
 606{
 607	int len = 0;
 608	int lim = spec.precision;
 609
 610	while (lim--) {
 611		char c = *s++;
 612		if (!c)
 613			break;
 614		if (buf < end)
 615			*buf = c;
 616		++buf;
 617		++len;
 618	}
 619	return widen_string(buf, len, end, spec);
 620}
 621
 622static char *err_ptr(char *buf, char *end, void *ptr,
 623		     struct printf_spec spec)
 624{
 625	int err = PTR_ERR(ptr);
 626	const char *sym = errname(err);
 627
 628	if (sym)
 629		return string_nocheck(buf, end, sym, spec);
 630
 631	/*
 632	 * Somebody passed ERR_PTR(-1234) or some other non-existing
 633	 * Efoo - or perhaps CONFIG_SYMBOLIC_ERRNAME=n. Fall back to
 634	 * printing it as its decimal representation.
 635	 */
 636	spec.flags |= SIGN;
 637	spec.base = 10;
 638	return number(buf, end, err, spec);
 639}
 640
 641/* Be careful: error messages must fit into the given buffer. */
 642static char *error_string(char *buf, char *end, const char *s,
 643			  struct printf_spec spec)
 644{
 645	/*
 646	 * Hard limit to avoid a completely insane messages. It actually
 647	 * works pretty well because most error messages are in
 648	 * the many pointer format modifiers.
 649	 */
 650	if (spec.precision == -1)
 651		spec.precision = 2 * sizeof(void *);
 652
 653	return string_nocheck(buf, end, s, spec);
 654}
 655
 656/*
 657 * Do not call any complex external code here. Nested printk()/vsprintf()
 658 * might cause infinite loops. Failures might break printk() and would
 659 * be hard to debug.
 660 */
 661static const char *check_pointer_msg(const void *ptr)
 662{
 663	if (!ptr)
 664		return "(null)";
 665
 666	if ((unsigned long)ptr < PAGE_SIZE || IS_ERR_VALUE(ptr))
 667		return "(efault)";
 668
 669	return NULL;
 670}
 671
 672static int check_pointer(char **buf, char *end, const void *ptr,
 673			 struct printf_spec spec)
 674{
 675	const char *err_msg;
 676
 677	err_msg = check_pointer_msg(ptr);
 678	if (err_msg) {
 679		*buf = error_string(*buf, end, err_msg, spec);
 680		return -EFAULT;
 681	}
 682
 683	return 0;
 684}
 685
 686static noinline_for_stack
 687char *string(char *buf, char *end, const char *s,
 688	     struct printf_spec spec)
 689{
 690	if (check_pointer(&buf, end, s, spec))
 691		return buf;
 692
 693	return string_nocheck(buf, end, s, spec);
 694}
 695
 696static char *pointer_string(char *buf, char *end,
 697			    const void *ptr,
 698			    struct printf_spec spec)
 699{
 700	spec.base = 16;
 701	spec.flags |= SMALL;
 702	if (spec.field_width == -1) {
 703		spec.field_width = 2 * sizeof(ptr);
 704		spec.flags |= ZEROPAD;
 705	}
 706
 707	return number(buf, end, (unsigned long int)ptr, spec);
 708}
 709
 710/* Make pointers available for printing early in the boot sequence. */
 711static int debug_boot_weak_hash __ro_after_init;
 712
 713static int __init debug_boot_weak_hash_enable(char *str)
 714{
 715	debug_boot_weak_hash = 1;
 716	pr_info("debug_boot_weak_hash enabled\n");
 717	return 0;
 718}
 719early_param("debug_boot_weak_hash", debug_boot_weak_hash_enable);
 720
 721static DEFINE_STATIC_KEY_TRUE(not_filled_random_ptr_key);
 722static siphash_key_t ptr_key __read_mostly;
 723
 724static void enable_ptr_key_workfn(struct work_struct *work)
 725{
 726	get_random_bytes(&ptr_key, sizeof(ptr_key));
 727	/* Needs to run from preemptible context */
 728	static_branch_disable(&not_filled_random_ptr_key);
 729}
 730
 731static DECLARE_WORK(enable_ptr_key_work, enable_ptr_key_workfn);
 732
 733static void fill_random_ptr_key(struct random_ready_callback *unused)
 734{
 735	/* This may be in an interrupt handler. */
 736	queue_work(system_unbound_wq, &enable_ptr_key_work);
 737}
 738
 739static struct random_ready_callback random_ready = {
 740	.func = fill_random_ptr_key
 741};
 742
 743static int __init initialize_ptr_random(void)
 744{
 745	int key_size = sizeof(ptr_key);
 746	int ret;
 747
 748	/* Use hw RNG if available. */
 749	if (get_random_bytes_arch(&ptr_key, key_size) == key_size) {
 750		static_branch_disable(&not_filled_random_ptr_key);
 751		return 0;
 752	}
 753
 754	ret = add_random_ready_callback(&random_ready);
 755	if (!ret) {
 756		return 0;
 757	} else if (ret == -EALREADY) {
 758		/* This is in preemptible context */
 759		enable_ptr_key_workfn(&enable_ptr_key_work);
 760		return 0;
 761	}
 762
 763	return ret;
 764}
 765early_initcall(initialize_ptr_random);
 766
 767/* Maps a pointer to a 32 bit unique identifier. */
 768static inline int __ptr_to_hashval(const void *ptr, unsigned long *hashval_out)
 769{
 770	unsigned long hashval;
 771
 772	if (static_branch_unlikely(&not_filled_random_ptr_key))
 773		return -EAGAIN;
 774
 775#ifdef CONFIG_64BIT
 776	hashval = (unsigned long)siphash_1u64((u64)ptr, &ptr_key);
 777	/*
 778	 * Mask off the first 32 bits, this makes explicit that we have
 779	 * modified the address (and 32 bits is plenty for a unique ID).
 780	 */
 781	hashval = hashval & 0xffffffff;
 782#else
 783	hashval = (unsigned long)siphash_1u32((u32)ptr, &ptr_key);
 784#endif
 785	*hashval_out = hashval;
 786	return 0;
 787}
 788
 789int ptr_to_hashval(const void *ptr, unsigned long *hashval_out)
 790{
 791	return __ptr_to_hashval(ptr, hashval_out);
 792}
 793
 794static char *ptr_to_id(char *buf, char *end, const void *ptr,
 795		       struct printf_spec spec)
 796{
 797	const char *str = sizeof(ptr) == 8 ? "(____ptrval____)" : "(ptrval)";
 798	unsigned long hashval;
 799	int ret;
 800
 801	/*
 802	 * Print the real pointer value for NULL and error pointers,
 803	 * as they are not actual addresses.
 804	 */
 805	if (IS_ERR_OR_NULL(ptr))
 806		return pointer_string(buf, end, ptr, spec);
 807
 808	/* When debugging early boot use non-cryptographically secure hash. */
 809	if (unlikely(debug_boot_weak_hash)) {
 810		hashval = hash_long((unsigned long)ptr, 32);
 811		return pointer_string(buf, end, (const void *)hashval, spec);
 812	}
 813
 814	ret = __ptr_to_hashval(ptr, &hashval);
 815	if (ret) {
 816		spec.field_width = 2 * sizeof(ptr);
 817		/* string length must be less than default_width */
 818		return error_string(buf, end, str, spec);
 819	}
 820
 821	return pointer_string(buf, end, (const void *)hashval, spec);
 822}
 823
 824int kptr_restrict __read_mostly;
 825
 826static noinline_for_stack
 827char *restricted_pointer(char *buf, char *end, const void *ptr,
 828			 struct printf_spec spec)
 829{
 830	switch (kptr_restrict) {
 831	case 0:
 832		/* Handle as %p, hash and do _not_ leak addresses. */
 833		return ptr_to_id(buf, end, ptr, spec);
 834	case 1: {
 835		const struct cred *cred;
 836
 837		/*
 838		 * kptr_restrict==1 cannot be used in IRQ context
 839		 * because its test for CAP_SYSLOG would be meaningless.
 840		 */
 841		if (in_irq() || in_serving_softirq() || in_nmi()) {
 842			if (spec.field_width == -1)
 843				spec.field_width = 2 * sizeof(ptr);
 844			return error_string(buf, end, "pK-error", spec);
 845		}
 846
 847		/*
 848		 * Only print the real pointer value if the current
 849		 * process has CAP_SYSLOG and is running with the
 850		 * same credentials it started with. This is because
 851		 * access to files is checked at open() time, but %pK
 852		 * checks permission at read() time. We don't want to
 853		 * leak pointer values if a binary opens a file using
 854		 * %pK and then elevates privileges before reading it.
 855		 */
 856		cred = current_cred();
 857		if (!has_capability_noaudit(current, CAP_SYSLOG) ||
 858		    !uid_eq(cred->euid, cred->uid) ||
 859		    !gid_eq(cred->egid, cred->gid))
 860			ptr = NULL;
 861		break;
 862	}
 863	case 2:
 864	default:
 865		/* Always print 0's for %pK */
 866		ptr = NULL;
 867		break;
 868	}
 869
 870	return pointer_string(buf, end, ptr, spec);
 871}
 872
 873static noinline_for_stack
 874char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_spec spec,
 875		  const char *fmt)
 876{
 877	const char *array[4], *s;
 878	const struct dentry *p;
 879	int depth;
 880	int i, n;
 881
 882	switch (fmt[1]) {
 883		case '2': case '3': case '4':
 884			depth = fmt[1] - '0';
 885			break;
 886		default:
 887			depth = 1;
 888	}
 889
 890	rcu_read_lock();
 891	for (i = 0; i < depth; i++, d = p) {
 892		if (check_pointer(&buf, end, d, spec)) {
 893			rcu_read_unlock();
 894			return buf;
 895		}
 896
 897		p = READ_ONCE(d->d_parent);
 898		array[i] = READ_ONCE(d->d_name.name);
 899		if (p == d) {
 900			if (i)
 901				array[i] = "";
 902			i++;
 903			break;
 904		}
 905	}
 906	s = array[--i];
 907	for (n = 0; n != spec.precision; n++, buf++) {
 908		char c = *s++;
 909		if (!c) {
 910			if (!i)
 911				break;
 912			c = '/';
 913			s = array[--i];
 914		}
 915		if (buf < end)
 916			*buf = c;
 917	}
 918	rcu_read_unlock();
 919	return widen_string(buf, n, end, spec);
 920}
 921
 922static noinline_for_stack
 923char *file_dentry_name(char *buf, char *end, const struct file *f,
 924			struct printf_spec spec, const char *fmt)
 925{
 926	if (check_pointer(&buf, end, f, spec))
 927		return buf;
 928
 929	return dentry_name(buf, end, f->f_path.dentry, spec, fmt);
 930}
 931#ifdef CONFIG_BLOCK
 932static noinline_for_stack
 933char *bdev_name(char *buf, char *end, struct block_device *bdev,
 934		struct printf_spec spec, const char *fmt)
 935{
 936	struct gendisk *hd;
 937
 938	if (check_pointer(&buf, end, bdev, spec))
 939		return buf;
 940
 941	hd = bdev->bd_disk;
 942	buf = string(buf, end, hd->disk_name, spec);
 943	if (bdev->bd_part->partno) {
 944		if (isdigit(hd->disk_name[strlen(hd->disk_name)-1])) {
 945			if (buf < end)
 946				*buf = 'p';
 947			buf++;
 948		}
 949		buf = number(buf, end, bdev->bd_part->partno, spec);
 950	}
 951	return buf;
 952}
 953#endif
 954
 955static noinline_for_stack
 956char *symbol_string(char *buf, char *end, void *ptr,
 957		    struct printf_spec spec, const char *fmt)
 958{
 959	unsigned long value;
 960#ifdef CONFIG_KALLSYMS
 961	char sym[KSYM_SYMBOL_LEN];
 962#endif
 963
 964	if (fmt[1] == 'R')
 965		ptr = __builtin_extract_return_addr(ptr);
 966	value = (unsigned long)ptr;
 967
 968#ifdef CONFIG_KALLSYMS
 969	if (*fmt == 'B')
 
 
 970		sprint_backtrace(sym, value);
 
 
 971	else if (*fmt != 's')
 972		sprint_symbol(sym, value);
 973	else
 974		sprint_symbol_no_offset(sym, value);
 975
 976	return string_nocheck(buf, end, sym, spec);
 977#else
 978	return special_hex_number(buf, end, value, sizeof(void *));
 979#endif
 980}
 981
 982static const struct printf_spec default_str_spec = {
 983	.field_width = -1,
 984	.precision = -1,
 985};
 986
 987static const struct printf_spec default_flag_spec = {
 988	.base = 16,
 989	.precision = -1,
 990	.flags = SPECIAL | SMALL,
 991};
 992
 993static const struct printf_spec default_dec_spec = {
 994	.base = 10,
 995	.precision = -1,
 996};
 997
 998static const struct printf_spec default_dec02_spec = {
 999	.base = 10,
1000	.field_width = 2,
1001	.precision = -1,
1002	.flags = ZEROPAD,
1003};
1004
1005static const struct printf_spec default_dec04_spec = {
1006	.base = 10,
1007	.field_width = 4,
1008	.precision = -1,
1009	.flags = ZEROPAD,
1010};
1011
1012static noinline_for_stack
1013char *resource_string(char *buf, char *end, struct resource *res,
1014		      struct printf_spec spec, const char *fmt)
1015{
1016#ifndef IO_RSRC_PRINTK_SIZE
1017#define IO_RSRC_PRINTK_SIZE	6
1018#endif
1019
1020#ifndef MEM_RSRC_PRINTK_SIZE
1021#define MEM_RSRC_PRINTK_SIZE	10
1022#endif
1023	static const struct printf_spec io_spec = {
1024		.base = 16,
1025		.field_width = IO_RSRC_PRINTK_SIZE,
1026		.precision = -1,
1027		.flags = SPECIAL | SMALL | ZEROPAD,
1028	};
1029	static const struct printf_spec mem_spec = {
1030		.base = 16,
1031		.field_width = MEM_RSRC_PRINTK_SIZE,
1032		.precision = -1,
1033		.flags = SPECIAL | SMALL | ZEROPAD,
1034	};
1035	static const struct printf_spec bus_spec = {
1036		.base = 16,
1037		.field_width = 2,
1038		.precision = -1,
1039		.flags = SMALL | ZEROPAD,
1040	};
1041	static const struct printf_spec str_spec = {
1042		.field_width = -1,
1043		.precision = 10,
1044		.flags = LEFT,
1045	};
1046
1047	/* 32-bit res (sizeof==4): 10 chars in dec, 10 in hex ("0x" + 8)
1048	 * 64-bit res (sizeof==8): 20 chars in dec, 18 in hex ("0x" + 16) */
1049#define RSRC_BUF_SIZE		((2 * sizeof(resource_size_t)) + 4)
1050#define FLAG_BUF_SIZE		(2 * sizeof(res->flags))
1051#define DECODED_BUF_SIZE	sizeof("[mem - 64bit pref window disabled]")
1052#define RAW_BUF_SIZE		sizeof("[mem - flags 0x]")
1053	char sym[max(2*RSRC_BUF_SIZE + DECODED_BUF_SIZE,
1054		     2*RSRC_BUF_SIZE + FLAG_BUF_SIZE + RAW_BUF_SIZE)];
1055
1056	char *p = sym, *pend = sym + sizeof(sym);
1057	int decode = (fmt[0] == 'R') ? 1 : 0;
1058	const struct printf_spec *specp;
1059
1060	if (check_pointer(&buf, end, res, spec))
1061		return buf;
1062
1063	*p++ = '[';
1064	if (res->flags & IORESOURCE_IO) {
1065		p = string_nocheck(p, pend, "io  ", str_spec);
1066		specp = &io_spec;
1067	} else if (res->flags & IORESOURCE_MEM) {
1068		p = string_nocheck(p, pend, "mem ", str_spec);
1069		specp = &mem_spec;
1070	} else if (res->flags & IORESOURCE_IRQ) {
1071		p = string_nocheck(p, pend, "irq ", str_spec);
1072		specp = &default_dec_spec;
1073	} else if (res->flags & IORESOURCE_DMA) {
1074		p = string_nocheck(p, pend, "dma ", str_spec);
1075		specp = &default_dec_spec;
1076	} else if (res->flags & IORESOURCE_BUS) {
1077		p = string_nocheck(p, pend, "bus ", str_spec);
1078		specp = &bus_spec;
1079	} else {
1080		p = string_nocheck(p, pend, "??? ", str_spec);
1081		specp = &mem_spec;
1082		decode = 0;
1083	}
1084	if (decode && res->flags & IORESOURCE_UNSET) {
1085		p = string_nocheck(p, pend, "size ", str_spec);
1086		p = number(p, pend, resource_size(res), *specp);
1087	} else {
1088		p = number(p, pend, res->start, *specp);
1089		if (res->start != res->end) {
1090			*p++ = '-';
1091			p = number(p, pend, res->end, *specp);
1092		}
1093	}
1094	if (decode) {
1095		if (res->flags & IORESOURCE_MEM_64)
1096			p = string_nocheck(p, pend, " 64bit", str_spec);
1097		if (res->flags & IORESOURCE_PREFETCH)
1098			p = string_nocheck(p, pend, " pref", str_spec);
1099		if (res->flags & IORESOURCE_WINDOW)
1100			p = string_nocheck(p, pend, " window", str_spec);
1101		if (res->flags & IORESOURCE_DISABLED)
1102			p = string_nocheck(p, pend, " disabled", str_spec);
1103	} else {
1104		p = string_nocheck(p, pend, " flags ", str_spec);
1105		p = number(p, pend, res->flags, default_flag_spec);
1106	}
1107	*p++ = ']';
1108	*p = '\0';
1109
1110	return string_nocheck(buf, end, sym, spec);
1111}
1112
1113static noinline_for_stack
1114char *hex_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
1115		 const char *fmt)
1116{
1117	int i, len = 1;		/* if we pass '%ph[CDN]', field width remains
1118				   negative value, fallback to the default */
1119	char separator;
1120
1121	if (spec.field_width == 0)
1122		/* nothing to print */
1123		return buf;
1124
1125	if (check_pointer(&buf, end, addr, spec))
1126		return buf;
1127
1128	switch (fmt[1]) {
1129	case 'C':
1130		separator = ':';
1131		break;
1132	case 'D':
1133		separator = '-';
1134		break;
1135	case 'N':
1136		separator = 0;
1137		break;
1138	default:
1139		separator = ' ';
1140		break;
1141	}
1142
1143	if (spec.field_width > 0)
1144		len = min_t(int, spec.field_width, 64);
1145
1146	for (i = 0; i < len; ++i) {
1147		if (buf < end)
1148			*buf = hex_asc_hi(addr[i]);
1149		++buf;
1150		if (buf < end)
1151			*buf = hex_asc_lo(addr[i]);
1152		++buf;
1153
1154		if (separator && i != len - 1) {
1155			if (buf < end)
1156				*buf = separator;
1157			++buf;
1158		}
1159	}
1160
1161	return buf;
1162}
1163
1164static noinline_for_stack
1165char *bitmap_string(char *buf, char *end, unsigned long *bitmap,
1166		    struct printf_spec spec, const char *fmt)
1167{
1168	const int CHUNKSZ = 32;
1169	int nr_bits = max_t(int, spec.field_width, 0);
1170	int i, chunksz;
1171	bool first = true;
1172
1173	if (check_pointer(&buf, end, bitmap, spec))
1174		return buf;
1175
1176	/* reused to print numbers */
1177	spec = (struct printf_spec){ .flags = SMALL | ZEROPAD, .base = 16 };
1178
1179	chunksz = nr_bits & (CHUNKSZ - 1);
1180	if (chunksz == 0)
1181		chunksz = CHUNKSZ;
1182
1183	i = ALIGN(nr_bits, CHUNKSZ) - CHUNKSZ;
1184	for (; i >= 0; i -= CHUNKSZ) {
1185		u32 chunkmask, val;
1186		int word, bit;
1187
1188		chunkmask = ((1ULL << chunksz) - 1);
1189		word = i / BITS_PER_LONG;
1190		bit = i % BITS_PER_LONG;
1191		val = (bitmap[word] >> bit) & chunkmask;
1192
1193		if (!first) {
1194			if (buf < end)
1195				*buf = ',';
1196			buf++;
1197		}
1198		first = false;
1199
1200		spec.field_width = DIV_ROUND_UP(chunksz, 4);
1201		buf = number(buf, end, val, spec);
1202
1203		chunksz = CHUNKSZ;
1204	}
1205	return buf;
1206}
1207
1208static noinline_for_stack
1209char *bitmap_list_string(char *buf, char *end, unsigned long *bitmap,
1210			 struct printf_spec spec, const char *fmt)
1211{
1212	int nr_bits = max_t(int, spec.field_width, 0);
1213	/* current bit is 'cur', most recently seen range is [rbot, rtop] */
1214	int cur, rbot, rtop;
1215	bool first = true;
1216
1217	if (check_pointer(&buf, end, bitmap, spec))
1218		return buf;
1219
1220	rbot = cur = find_first_bit(bitmap, nr_bits);
1221	while (cur < nr_bits) {
1222		rtop = cur;
1223		cur = find_next_bit(bitmap, nr_bits, cur + 1);
1224		if (cur < nr_bits && cur <= rtop + 1)
1225			continue;
1226
1227		if (!first) {
1228			if (buf < end)
1229				*buf = ',';
1230			buf++;
1231		}
1232		first = false;
1233
1234		buf = number(buf, end, rbot, default_dec_spec);
1235		if (rbot < rtop) {
1236			if (buf < end)
1237				*buf = '-';
1238			buf++;
1239
1240			buf = number(buf, end, rtop, default_dec_spec);
1241		}
1242
1243		rbot = cur;
1244	}
1245	return buf;
1246}
1247
1248static noinline_for_stack
1249char *mac_address_string(char *buf, char *end, u8 *addr,
1250			 struct printf_spec spec, const char *fmt)
1251{
1252	char mac_addr[sizeof("xx:xx:xx:xx:xx:xx")];
1253	char *p = mac_addr;
1254	int i;
1255	char separator;
1256	bool reversed = false;
1257
1258	if (check_pointer(&buf, end, addr, spec))
1259		return buf;
1260
1261	switch (fmt[1]) {
1262	case 'F':
1263		separator = '-';
1264		break;
1265
1266	case 'R':
1267		reversed = true;
1268		/* fall through */
1269
1270	default:
1271		separator = ':';
1272		break;
1273	}
1274
1275	for (i = 0; i < 6; i++) {
1276		if (reversed)
1277			p = hex_byte_pack(p, addr[5 - i]);
1278		else
1279			p = hex_byte_pack(p, addr[i]);
1280
1281		if (fmt[0] == 'M' && i != 5)
1282			*p++ = separator;
1283	}
1284	*p = '\0';
1285
1286	return string_nocheck(buf, end, mac_addr, spec);
1287}
1288
1289static noinline_for_stack
1290char *ip4_string(char *p, const u8 *addr, const char *fmt)
1291{
1292	int i;
1293	bool leading_zeros = (fmt[0] == 'i');
1294	int index;
1295	int step;
1296
1297	switch (fmt[2]) {
1298	case 'h':
1299#ifdef __BIG_ENDIAN
1300		index = 0;
1301		step = 1;
1302#else
1303		index = 3;
1304		step = -1;
1305#endif
1306		break;
1307	case 'l':
1308		index = 3;
1309		step = -1;
1310		break;
1311	case 'n':
1312	case 'b':
1313	default:
1314		index = 0;
1315		step = 1;
1316		break;
1317	}
1318	for (i = 0; i < 4; i++) {
1319		char temp[4] __aligned(2);	/* hold each IP quad in reverse order */
1320		int digits = put_dec_trunc8(temp, addr[index]) - temp;
1321		if (leading_zeros) {
1322			if (digits < 3)
1323				*p++ = '0';
1324			if (digits < 2)
1325				*p++ = '0';
1326		}
1327		/* reverse the digits in the quad */
1328		while (digits--)
1329			*p++ = temp[digits];
1330		if (i < 3)
1331			*p++ = '.';
1332		index += step;
1333	}
1334	*p = '\0';
1335
1336	return p;
1337}
1338
1339static noinline_for_stack
1340char *ip6_compressed_string(char *p, const char *addr)
1341{
1342	int i, j, range;
1343	unsigned char zerolength[8];
1344	int longest = 1;
1345	int colonpos = -1;
1346	u16 word;
1347	u8 hi, lo;
1348	bool needcolon = false;
1349	bool useIPv4;
1350	struct in6_addr in6;
1351
1352	memcpy(&in6, addr, sizeof(struct in6_addr));
1353
1354	useIPv4 = ipv6_addr_v4mapped(&in6) || ipv6_addr_is_isatap(&in6);
1355
1356	memset(zerolength, 0, sizeof(zerolength));
1357
1358	if (useIPv4)
1359		range = 6;
1360	else
1361		range = 8;
1362
1363	/* find position of longest 0 run */
1364	for (i = 0; i < range; i++) {
1365		for (j = i; j < range; j++) {
1366			if (in6.s6_addr16[j] != 0)
1367				break;
1368			zerolength[i]++;
1369		}
1370	}
1371	for (i = 0; i < range; i++) {
1372		if (zerolength[i] > longest) {
1373			longest = zerolength[i];
1374			colonpos = i;
1375		}
1376	}
1377	if (longest == 1)		/* don't compress a single 0 */
1378		colonpos = -1;
1379
1380	/* emit address */
1381	for (i = 0; i < range; i++) {
1382		if (i == colonpos) {
1383			if (needcolon || i == 0)
1384				*p++ = ':';
1385			*p++ = ':';
1386			needcolon = false;
1387			i += longest - 1;
1388			continue;
1389		}
1390		if (needcolon) {
1391			*p++ = ':';
1392			needcolon = false;
1393		}
1394		/* hex u16 without leading 0s */
1395		word = ntohs(in6.s6_addr16[i]);
1396		hi = word >> 8;
1397		lo = word & 0xff;
1398		if (hi) {
1399			if (hi > 0x0f)
1400				p = hex_byte_pack(p, hi);
1401			else
1402				*p++ = hex_asc_lo(hi);
1403			p = hex_byte_pack(p, lo);
1404		}
1405		else if (lo > 0x0f)
1406			p = hex_byte_pack(p, lo);
1407		else
1408			*p++ = hex_asc_lo(lo);
1409		needcolon = true;
1410	}
1411
1412	if (useIPv4) {
1413		if (needcolon)
1414			*p++ = ':';
1415		p = ip4_string(p, &in6.s6_addr[12], "I4");
1416	}
1417	*p = '\0';
1418
1419	return p;
1420}
1421
1422static noinline_for_stack
1423char *ip6_string(char *p, const char *addr, const char *fmt)
1424{
1425	int i;
1426
1427	for (i = 0; i < 8; i++) {
1428		p = hex_byte_pack(p, *addr++);
1429		p = hex_byte_pack(p, *addr++);
1430		if (fmt[0] == 'I' && i != 7)
1431			*p++ = ':';
1432	}
1433	*p = '\0';
1434
1435	return p;
1436}
1437
1438static noinline_for_stack
1439char *ip6_addr_string(char *buf, char *end, const u8 *addr,
1440		      struct printf_spec spec, const char *fmt)
1441{
1442	char ip6_addr[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255")];
1443
1444	if (fmt[0] == 'I' && fmt[2] == 'c')
1445		ip6_compressed_string(ip6_addr, addr);
1446	else
1447		ip6_string(ip6_addr, addr, fmt);
1448
1449	return string_nocheck(buf, end, ip6_addr, spec);
1450}
1451
1452static noinline_for_stack
1453char *ip4_addr_string(char *buf, char *end, const u8 *addr,
1454		      struct printf_spec spec, const char *fmt)
1455{
1456	char ip4_addr[sizeof("255.255.255.255")];
1457
1458	ip4_string(ip4_addr, addr, fmt);
1459
1460	return string_nocheck(buf, end, ip4_addr, spec);
1461}
1462
1463static noinline_for_stack
1464char *ip6_addr_string_sa(char *buf, char *end, const struct sockaddr_in6 *sa,
1465			 struct printf_spec spec, const char *fmt)
1466{
1467	bool have_p = false, have_s = false, have_f = false, have_c = false;
1468	char ip6_addr[sizeof("[xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255]") +
1469		      sizeof(":12345") + sizeof("/123456789") +
1470		      sizeof("%1234567890")];
1471	char *p = ip6_addr, *pend = ip6_addr + sizeof(ip6_addr);
1472	const u8 *addr = (const u8 *) &sa->sin6_addr;
1473	char fmt6[2] = { fmt[0], '6' };
1474	u8 off = 0;
1475
1476	fmt++;
1477	while (isalpha(*++fmt)) {
1478		switch (*fmt) {
1479		case 'p':
1480			have_p = true;
1481			break;
1482		case 'f':
1483			have_f = true;
1484			break;
1485		case 's':
1486			have_s = true;
1487			break;
1488		case 'c':
1489			have_c = true;
1490			break;
1491		}
1492	}
1493
1494	if (have_p || have_s || have_f) {
1495		*p = '[';
1496		off = 1;
1497	}
1498
1499	if (fmt6[0] == 'I' && have_c)
1500		p = ip6_compressed_string(ip6_addr + off, addr);
1501	else
1502		p = ip6_string(ip6_addr + off, addr, fmt6);
1503
1504	if (have_p || have_s || have_f)
1505		*p++ = ']';
1506
1507	if (have_p) {
1508		*p++ = ':';
1509		p = number(p, pend, ntohs(sa->sin6_port), spec);
1510	}
1511	if (have_f) {
1512		*p++ = '/';
1513		p = number(p, pend, ntohl(sa->sin6_flowinfo &
1514					  IPV6_FLOWINFO_MASK), spec);
1515	}
1516	if (have_s) {
1517		*p++ = '%';
1518		p = number(p, pend, sa->sin6_scope_id, spec);
1519	}
1520	*p = '\0';
1521
1522	return string_nocheck(buf, end, ip6_addr, spec);
1523}
1524
1525static noinline_for_stack
1526char *ip4_addr_string_sa(char *buf, char *end, const struct sockaddr_in *sa,
1527			 struct printf_spec spec, const char *fmt)
1528{
1529	bool have_p = false;
1530	char *p, ip4_addr[sizeof("255.255.255.255") + sizeof(":12345")];
1531	char *pend = ip4_addr + sizeof(ip4_addr);
1532	const u8 *addr = (const u8 *) &sa->sin_addr.s_addr;
1533	char fmt4[3] = { fmt[0], '4', 0 };
1534
1535	fmt++;
1536	while (isalpha(*++fmt)) {
1537		switch (*fmt) {
1538		case 'p':
1539			have_p = true;
1540			break;
1541		case 'h':
1542		case 'l':
1543		case 'n':
1544		case 'b':
1545			fmt4[2] = *fmt;
1546			break;
1547		}
1548	}
1549
1550	p = ip4_string(ip4_addr, addr, fmt4);
1551	if (have_p) {
1552		*p++ = ':';
1553		p = number(p, pend, ntohs(sa->sin_port), spec);
1554	}
1555	*p = '\0';
1556
1557	return string_nocheck(buf, end, ip4_addr, spec);
1558}
1559
1560static noinline_for_stack
1561char *ip_addr_string(char *buf, char *end, const void *ptr,
1562		     struct printf_spec spec, const char *fmt)
1563{
1564	char *err_fmt_msg;
1565
1566	if (check_pointer(&buf, end, ptr, spec))
1567		return buf;
1568
1569	switch (fmt[1]) {
1570	case '6':
1571		return ip6_addr_string(buf, end, ptr, spec, fmt);
1572	case '4':
1573		return ip4_addr_string(buf, end, ptr, spec, fmt);
1574	case 'S': {
1575		const union {
1576			struct sockaddr		raw;
1577			struct sockaddr_in	v4;
1578			struct sockaddr_in6	v6;
1579		} *sa = ptr;
1580
1581		switch (sa->raw.sa_family) {
1582		case AF_INET:
1583			return ip4_addr_string_sa(buf, end, &sa->v4, spec, fmt);
1584		case AF_INET6:
1585			return ip6_addr_string_sa(buf, end, &sa->v6, spec, fmt);
1586		default:
1587			return error_string(buf, end, "(einval)", spec);
1588		}}
1589	}
1590
1591	err_fmt_msg = fmt[0] == 'i' ? "(%pi?)" : "(%pI?)";
1592	return error_string(buf, end, err_fmt_msg, spec);
1593}
1594
1595static noinline_for_stack
1596char *escaped_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
1597		     const char *fmt)
1598{
1599	bool found = true;
1600	int count = 1;
1601	unsigned int flags = 0;
1602	int len;
1603
1604	if (spec.field_width == 0)
1605		return buf;				/* nothing to print */
1606
1607	if (check_pointer(&buf, end, addr, spec))
1608		return buf;
1609
1610	do {
1611		switch (fmt[count++]) {
1612		case 'a':
1613			flags |= ESCAPE_ANY;
1614			break;
1615		case 'c':
1616			flags |= ESCAPE_SPECIAL;
1617			break;
1618		case 'h':
1619			flags |= ESCAPE_HEX;
1620			break;
1621		case 'n':
1622			flags |= ESCAPE_NULL;
1623			break;
1624		case 'o':
1625			flags |= ESCAPE_OCTAL;
1626			break;
1627		case 'p':
1628			flags |= ESCAPE_NP;
1629			break;
1630		case 's':
1631			flags |= ESCAPE_SPACE;
1632			break;
1633		default:
1634			found = false;
1635			break;
1636		}
1637	} while (found);
1638
1639	if (!flags)
1640		flags = ESCAPE_ANY_NP;
1641
1642	len = spec.field_width < 0 ? 1 : spec.field_width;
1643
1644	/*
1645	 * string_escape_mem() writes as many characters as it can to
1646	 * the given buffer, and returns the total size of the output
1647	 * had the buffer been big enough.
1648	 */
1649	buf += string_escape_mem(addr, len, buf, buf < end ? end - buf : 0, flags, NULL);
1650
1651	return buf;
1652}
1653
1654static char *va_format(char *buf, char *end, struct va_format *va_fmt,
1655		       struct printf_spec spec, const char *fmt)
1656{
1657	va_list va;
1658
1659	if (check_pointer(&buf, end, va_fmt, spec))
1660		return buf;
1661
1662	va_copy(va, *va_fmt->va);
1663	buf += vsnprintf(buf, end > buf ? end - buf : 0, va_fmt->fmt, va);
1664	va_end(va);
1665
1666	return buf;
1667}
1668
1669static noinline_for_stack
1670char *uuid_string(char *buf, char *end, const u8 *addr,
1671		  struct printf_spec spec, const char *fmt)
1672{
1673	char uuid[UUID_STRING_LEN + 1];
1674	char *p = uuid;
1675	int i;
1676	const u8 *index = uuid_index;
1677	bool uc = false;
1678
1679	if (check_pointer(&buf, end, addr, spec))
1680		return buf;
1681
1682	switch (*(++fmt)) {
1683	case 'L':
1684		uc = true;
1685		/* fall through */
1686	case 'l':
1687		index = guid_index;
1688		break;
1689	case 'B':
1690		uc = true;
1691		break;
1692	}
1693
1694	for (i = 0; i < 16; i++) {
1695		if (uc)
1696			p = hex_byte_pack_upper(p, addr[index[i]]);
1697		else
1698			p = hex_byte_pack(p, addr[index[i]]);
1699		switch (i) {
1700		case 3:
1701		case 5:
1702		case 7:
1703		case 9:
1704			*p++ = '-';
1705			break;
1706		}
1707	}
1708
1709	*p = 0;
1710
1711	return string_nocheck(buf, end, uuid, spec);
1712}
1713
1714static noinline_for_stack
1715char *netdev_bits(char *buf, char *end, const void *addr,
1716		  struct printf_spec spec,  const char *fmt)
1717{
1718	unsigned long long num;
1719	int size;
1720
1721	if (check_pointer(&buf, end, addr, spec))
1722		return buf;
1723
1724	switch (fmt[1]) {
1725	case 'F':
1726		num = *(const netdev_features_t *)addr;
1727		size = sizeof(netdev_features_t);
1728		break;
1729	default:
1730		return error_string(buf, end, "(%pN?)", spec);
1731	}
1732
1733	return special_hex_number(buf, end, num, size);
1734}
1735
1736static noinline_for_stack
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1737char *address_val(char *buf, char *end, const void *addr,
1738		  struct printf_spec spec, const char *fmt)
1739{
1740	unsigned long long num;
1741	int size;
1742
1743	if (check_pointer(&buf, end, addr, spec))
1744		return buf;
1745
1746	switch (fmt[1]) {
1747	case 'd':
1748		num = *(const dma_addr_t *)addr;
1749		size = sizeof(dma_addr_t);
1750		break;
1751	case 'p':
1752	default:
1753		num = *(const phys_addr_t *)addr;
1754		size = sizeof(phys_addr_t);
1755		break;
1756	}
1757
1758	return special_hex_number(buf, end, num, size);
1759}
1760
1761static noinline_for_stack
1762char *date_str(char *buf, char *end, const struct rtc_time *tm, bool r)
1763{
1764	int year = tm->tm_year + (r ? 0 : 1900);
1765	int mon = tm->tm_mon + (r ? 0 : 1);
1766
1767	buf = number(buf, end, year, default_dec04_spec);
1768	if (buf < end)
1769		*buf = '-';
1770	buf++;
1771
1772	buf = number(buf, end, mon, default_dec02_spec);
1773	if (buf < end)
1774		*buf = '-';
1775	buf++;
1776
1777	return number(buf, end, tm->tm_mday, default_dec02_spec);
1778}
1779
1780static noinline_for_stack
1781char *time_str(char *buf, char *end, const struct rtc_time *tm, bool r)
1782{
1783	buf = number(buf, end, tm->tm_hour, default_dec02_spec);
1784	if (buf < end)
1785		*buf = ':';
1786	buf++;
1787
1788	buf = number(buf, end, tm->tm_min, default_dec02_spec);
1789	if (buf < end)
1790		*buf = ':';
1791	buf++;
1792
1793	return number(buf, end, tm->tm_sec, default_dec02_spec);
1794}
1795
1796static noinline_for_stack
1797char *rtc_str(char *buf, char *end, const struct rtc_time *tm,
1798	      struct printf_spec spec, const char *fmt)
1799{
1800	bool have_t = true, have_d = true;
1801	bool raw = false;
 
1802	int count = 2;
1803
1804	if (check_pointer(&buf, end, tm, spec))
1805		return buf;
1806
1807	switch (fmt[count]) {
1808	case 'd':
1809		have_t = false;
1810		count++;
1811		break;
1812	case 't':
1813		have_d = false;
1814		count++;
1815		break;
1816	}
1817
1818	raw = fmt[count] == 'r';
 
 
 
 
 
 
 
 
 
 
 
 
1819
1820	if (have_d)
1821		buf = date_str(buf, end, tm, raw);
1822	if (have_d && have_t) {
1823		/* Respect ISO 8601 */
1824		if (buf < end)
1825			*buf = 'T';
1826		buf++;
1827	}
1828	if (have_t)
1829		buf = time_str(buf, end, tm, raw);
1830
1831	return buf;
1832}
1833
1834static noinline_for_stack
1835char *time64_str(char *buf, char *end, const time64_t time,
1836		 struct printf_spec spec, const char *fmt)
1837{
1838	struct rtc_time rtc_time;
1839	struct tm tm;
1840
1841	time64_to_tm(time, 0, &tm);
1842
1843	rtc_time.tm_sec = tm.tm_sec;
1844	rtc_time.tm_min = tm.tm_min;
1845	rtc_time.tm_hour = tm.tm_hour;
1846	rtc_time.tm_mday = tm.tm_mday;
1847	rtc_time.tm_mon = tm.tm_mon;
1848	rtc_time.tm_year = tm.tm_year;
1849	rtc_time.tm_wday = tm.tm_wday;
1850	rtc_time.tm_yday = tm.tm_yday;
1851
1852	rtc_time.tm_isdst = 0;
1853
1854	return rtc_str(buf, end, &rtc_time, spec, fmt);
1855}
1856
1857static noinline_for_stack
1858char *time_and_date(char *buf, char *end, void *ptr, struct printf_spec spec,
1859		    const char *fmt)
1860{
1861	switch (fmt[1]) {
1862	case 'R':
1863		return rtc_str(buf, end, (const struct rtc_time *)ptr, spec, fmt);
1864	case 'T':
1865		return time64_str(buf, end, *(const time64_t *)ptr, spec, fmt);
1866	default:
1867		return error_string(buf, end, "(%pt?)", spec);
1868	}
1869}
1870
1871static noinline_for_stack
1872char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
1873	    const char *fmt)
1874{
1875	if (!IS_ENABLED(CONFIG_HAVE_CLK))
1876		return error_string(buf, end, "(%pC?)", spec);
1877
1878	if (check_pointer(&buf, end, clk, spec))
1879		return buf;
1880
1881	switch (fmt[1]) {
1882	case 'n':
1883	default:
1884#ifdef CONFIG_COMMON_CLK
1885		return string(buf, end, __clk_get_name(clk), spec);
1886#else
1887		return ptr_to_id(buf, end, clk, spec);
1888#endif
1889	}
1890}
1891
1892static
1893char *format_flags(char *buf, char *end, unsigned long flags,
1894					const struct trace_print_flags *names)
1895{
1896	unsigned long mask;
1897
1898	for ( ; flags && names->name; names++) {
1899		mask = names->mask;
1900		if ((flags & mask) != mask)
1901			continue;
1902
1903		buf = string(buf, end, names->name, default_str_spec);
1904
1905		flags &= ~mask;
1906		if (flags) {
1907			if (buf < end)
1908				*buf = '|';
1909			buf++;
1910		}
1911	}
1912
1913	if (flags)
1914		buf = number(buf, end, flags, default_flag_spec);
1915
1916	return buf;
1917}
1918
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1919static noinline_for_stack
1920char *flags_string(char *buf, char *end, void *flags_ptr,
1921		   struct printf_spec spec, const char *fmt)
1922{
1923	unsigned long flags;
1924	const struct trace_print_flags *names;
1925
1926	if (check_pointer(&buf, end, flags_ptr, spec))
1927		return buf;
1928
1929	switch (fmt[1]) {
1930	case 'p':
1931		flags = *(unsigned long *)flags_ptr;
1932		/* Remove zone id */
1933		flags &= (1UL << NR_PAGEFLAGS) - 1;
1934		names = pageflag_names;
1935		break;
1936	case 'v':
1937		flags = *(unsigned long *)flags_ptr;
1938		names = vmaflag_names;
1939		break;
1940	case 'g':
1941		flags = (__force unsigned long)(*(gfp_t *)flags_ptr);
1942		names = gfpflag_names;
1943		break;
1944	default:
1945		return error_string(buf, end, "(%pG?)", spec);
1946	}
1947
1948	return format_flags(buf, end, flags, names);
1949}
1950
1951static noinline_for_stack
1952char *fwnode_full_name_string(struct fwnode_handle *fwnode, char *buf,
1953			      char *end)
1954{
1955	int depth;
1956
1957	/* Loop starting from the root node to the current node. */
1958	for (depth = fwnode_count_parents(fwnode); depth >= 0; depth--) {
1959		struct fwnode_handle *__fwnode =
1960			fwnode_get_nth_parent(fwnode, depth);
1961
1962		buf = string(buf, end, fwnode_get_name_prefix(__fwnode),
1963			     default_str_spec);
1964		buf = string(buf, end, fwnode_get_name(__fwnode),
1965			     default_str_spec);
1966
1967		fwnode_handle_put(__fwnode);
1968	}
1969
1970	return buf;
1971}
1972
1973static noinline_for_stack
1974char *device_node_string(char *buf, char *end, struct device_node *dn,
1975			 struct printf_spec spec, const char *fmt)
1976{
1977	char tbuf[sizeof("xxxx") + 1];
1978	const char *p;
1979	int ret;
1980	char *buf_start = buf;
1981	struct property *prop;
1982	bool has_mult, pass;
1983
1984	struct printf_spec str_spec = spec;
1985	str_spec.field_width = -1;
1986
1987	if (fmt[0] != 'F')
1988		return error_string(buf, end, "(%pO?)", spec);
1989
1990	if (!IS_ENABLED(CONFIG_OF))
1991		return error_string(buf, end, "(%pOF?)", spec);
1992
1993	if (check_pointer(&buf, end, dn, spec))
1994		return buf;
1995
1996	/* simple case without anything any more format specifiers */
1997	fmt++;
1998	if (fmt[0] == '\0' || strcspn(fmt,"fnpPFcC") > 0)
1999		fmt = "f";
2000
2001	for (pass = false; strspn(fmt,"fnpPFcC"); fmt++, pass = true) {
2002		int precision;
2003		if (pass) {
2004			if (buf < end)
2005				*buf = ':';
2006			buf++;
2007		}
2008
2009		switch (*fmt) {
2010		case 'f':	/* full_name */
2011			buf = fwnode_full_name_string(of_fwnode_handle(dn), buf,
2012						      end);
2013			break;
2014		case 'n':	/* name */
2015			p = fwnode_get_name(of_fwnode_handle(dn));
2016			precision = str_spec.precision;
2017			str_spec.precision = strchrnul(p, '@') - p;
2018			buf = string(buf, end, p, str_spec);
2019			str_spec.precision = precision;
2020			break;
2021		case 'p':	/* phandle */
2022			buf = number(buf, end, (unsigned int)dn->phandle, default_dec_spec);
2023			break;
2024		case 'P':	/* path-spec */
2025			p = fwnode_get_name(of_fwnode_handle(dn));
2026			if (!p[1])
2027				p = "/";
2028			buf = string(buf, end, p, str_spec);
2029			break;
2030		case 'F':	/* flags */
2031			tbuf[0] = of_node_check_flag(dn, OF_DYNAMIC) ? 'D' : '-';
2032			tbuf[1] = of_node_check_flag(dn, OF_DETACHED) ? 'd' : '-';
2033			tbuf[2] = of_node_check_flag(dn, OF_POPULATED) ? 'P' : '-';
2034			tbuf[3] = of_node_check_flag(dn, OF_POPULATED_BUS) ? 'B' : '-';
2035			tbuf[4] = 0;
2036			buf = string_nocheck(buf, end, tbuf, str_spec);
2037			break;
2038		case 'c':	/* major compatible string */
2039			ret = of_property_read_string(dn, "compatible", &p);
2040			if (!ret)
2041				buf = string(buf, end, p, str_spec);
2042			break;
2043		case 'C':	/* full compatible string */
2044			has_mult = false;
2045			of_property_for_each_string(dn, "compatible", prop, p) {
2046				if (has_mult)
2047					buf = string_nocheck(buf, end, ",", str_spec);
2048				buf = string_nocheck(buf, end, "\"", str_spec);
2049				buf = string(buf, end, p, str_spec);
2050				buf = string_nocheck(buf, end, "\"", str_spec);
2051
2052				has_mult = true;
2053			}
2054			break;
2055		default:
2056			break;
2057		}
2058	}
2059
2060	return widen_string(buf, buf - buf_start, end, spec);
2061}
2062
2063static noinline_for_stack
2064char *fwnode_string(char *buf, char *end, struct fwnode_handle *fwnode,
2065		    struct printf_spec spec, const char *fmt)
2066{
2067	struct printf_spec str_spec = spec;
2068	char *buf_start = buf;
2069
2070	str_spec.field_width = -1;
2071
2072	if (*fmt != 'w')
2073		return error_string(buf, end, "(%pf?)", spec);
2074
2075	if (check_pointer(&buf, end, fwnode, spec))
2076		return buf;
2077
2078	fmt++;
2079
2080	switch (*fmt) {
2081	case 'P':	/* name */
2082		buf = string(buf, end, fwnode_get_name(fwnode), str_spec);
2083		break;
2084	case 'f':	/* full_name */
2085	default:
2086		buf = fwnode_full_name_string(fwnode, buf, end);
2087		break;
2088	}
2089
2090	return widen_string(buf, buf - buf_start, end, spec);
2091}
2092
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2093/*
2094 * Show a '%p' thing.  A kernel extension is that the '%p' is followed
2095 * by an extra set of alphanumeric characters that are extended format
2096 * specifiers.
2097 *
2098 * Please update scripts/checkpatch.pl when adding/removing conversion
2099 * characters.  (Search for "check for vsprintf extension").
2100 *
2101 * Right now we handle:
2102 *
2103 * - 'S' For symbolic direct pointers (or function descriptors) with offset
2104 * - 's' For symbolic direct pointers (or function descriptors) without offset
2105 * - '[Ss]R' as above with __builtin_extract_return_addr() translation
 
2106 * - '[Ff]' %pf and %pF were obsoleted and later removed in favor of
2107 *	    %ps and %pS. Be careful when re-using these specifiers.
2108 * - 'B' For backtraced symbolic direct pointers with offset
 
2109 * - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref]
2110 * - 'r' For raw struct resource, e.g., [mem 0x0-0x1f flags 0x201]
2111 * - 'b[l]' For a bitmap, the number of bits is determined by the field
2112 *       width which must be explicitly specified either as part of the
2113 *       format string '%32b[l]' or through '%*b[l]', [l] selects
2114 *       range-list format instead of hex format
2115 * - 'M' For a 6-byte MAC address, it prints the address in the
2116 *       usual colon-separated hex notation
2117 * - 'm' For a 6-byte MAC address, it prints the hex address without colons
2118 * - 'MF' For a 6-byte MAC FDDI address, it prints the address
2119 *       with a dash-separated hex notation
2120 * - '[mM]R' For a 6-byte MAC address, Reverse order (Bluetooth)
2121 * - 'I' [46] for IPv4/IPv6 addresses printed in the usual way
2122 *       IPv4 uses dot-separated decimal without leading 0's (1.2.3.4)
2123 *       IPv6 uses colon separated network-order 16 bit hex with leading 0's
2124 *       [S][pfs]
2125 *       Generic IPv4/IPv6 address (struct sockaddr *) that falls back to
2126 *       [4] or [6] and is able to print port [p], flowinfo [f], scope [s]
2127 * - 'i' [46] for 'raw' IPv4/IPv6 addresses
2128 *       IPv6 omits the colons (01020304...0f)
2129 *       IPv4 uses dot-separated decimal with leading 0's (010.123.045.006)
2130 *       [S][pfs]
2131 *       Generic IPv4/IPv6 address (struct sockaddr *) that falls back to
2132 *       [4] or [6] and is able to print port [p], flowinfo [f], scope [s]
2133 * - '[Ii][4S][hnbl]' IPv4 addresses in host, network, big or little endian order
2134 * - 'I[6S]c' for IPv6 addresses printed as specified by
2135 *       https://tools.ietf.org/html/rfc5952
2136 * - 'E[achnops]' For an escaped buffer, where rules are defined by combination
2137 *                of the following flags (see string_escape_mem() for the
2138 *                details):
2139 *                  a - ESCAPE_ANY
2140 *                  c - ESCAPE_SPECIAL
2141 *                  h - ESCAPE_HEX
2142 *                  n - ESCAPE_NULL
2143 *                  o - ESCAPE_OCTAL
2144 *                  p - ESCAPE_NP
2145 *                  s - ESCAPE_SPACE
2146 *                By default ESCAPE_ANY_NP is used.
2147 * - 'U' For a 16 byte UUID/GUID, it prints the UUID/GUID in the form
2148 *       "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
2149 *       Options for %pU are:
2150 *         b big endian lower case hex (default)
2151 *         B big endian UPPER case hex
2152 *         l little endian lower case hex
2153 *         L little endian UPPER case hex
2154 *           big endian output byte order is:
2155 *             [0][1][2][3]-[4][5]-[6][7]-[8][9]-[10][11][12][13][14][15]
2156 *           little endian output byte order is:
2157 *             [3][2][1][0]-[5][4]-[7][6]-[8][9]-[10][11][12][13][14][15]
2158 * - 'V' For a struct va_format which contains a format string * and va_list *,
2159 *       call vsnprintf(->format, *->va_list).
2160 *       Implements a "recursive vsnprintf".
2161 *       Do not use this feature without some mechanism to verify the
2162 *       correctness of the format string and va_list arguments.
2163 * - 'K' For a kernel pointer that should be hidden from unprivileged users
 
 
2164 * - 'NF' For a netdev_features_t
 
2165 * - 'h[CDN]' For a variable-length buffer, it prints it as a hex string with
2166 *            a certain separator (' ' by default):
2167 *              C colon
2168 *              D dash
2169 *              N no separator
2170 *            The maximum supported length is 64 bytes of the input. Consider
2171 *            to use print_hex_dump() for the larger input.
2172 * - 'a[pd]' For address types [p] phys_addr_t, [d] dma_addr_t and derivatives
2173 *           (default assumed to be phys_addr_t, passed by reference)
2174 * - 'd[234]' For a dentry name (optionally 2-4 last components)
2175 * - 'D[234]' Same as 'd' but for a struct file
2176 * - 'g' For block_device name (gendisk + partition number)
2177 * - 't[RT][dt][r]' For time and date as represented by:
2178 *      R    struct rtc_time
2179 *      T    time64_t
2180 * - 'C' For a clock, it prints the name (Common Clock Framework) or address
2181 *       (legacy clock framework) of the clock
2182 * - 'Cn' For a clock, it prints the name (Common Clock Framework) or address
2183 *        (legacy clock framework) of the clock
2184 * - 'G' For flags to be printed as a collection of symbolic strings that would
2185 *       construct the specific value. Supported flags given by option:
2186 *       p page flags (see struct page) given as pointer to unsigned long
2187 *       g gfp flags (GFP_* and __GFP_*) given as pointer to gfp_t
2188 *       v vma flags (VM_*) given as pointer to unsigned long
2189 * - 'OF[fnpPcCF]'  For a device tree object
2190 *                  Without any optional arguments prints the full_name
2191 *                  f device node full_name
2192 *                  n device node name
2193 *                  p device node phandle
2194 *                  P device node path spec (name + @unit)
2195 *                  F device node flags
2196 *                  c major compatible string
2197 *                  C full compatible string
2198 * - 'fw[fP]'	For a firmware node (struct fwnode_handle) pointer
2199 *		Without an option prints the full name of the node
2200 *		f full name
2201 *		P node name, including a possible unit address
2202 * - 'x' For printing the address. Equivalent to "%lx".
 
2203 * - '[ku]s' For a BPF/tracing related format specifier, e.g. used out of
2204 *           bpf_trace_printk() where [ku] prefix specifies either kernel (k)
2205 *           or user (u) memory to probe, and:
2206 *              s a string, equivalent to "%s" on direct vsnprintf() use
2207 *
2208 * ** When making changes please also update:
2209 *	Documentation/core-api/printk-formats.rst
2210 *
2211 * Note: The default behaviour (unadorned %p) is to hash the address,
2212 * rendering it useful as a unique identifier.
2213 */
2214static noinline_for_stack
2215char *pointer(const char *fmt, char *buf, char *end, void *ptr,
2216	      struct printf_spec spec)
2217{
2218	switch (*fmt) {
2219	case 'S':
2220	case 's':
2221		ptr = dereference_symbol_descriptor(ptr);
2222		/* fall through */
2223	case 'B':
2224		return symbol_string(buf, end, ptr, spec, fmt);
2225	case 'R':
2226	case 'r':
2227		return resource_string(buf, end, ptr, spec, fmt);
2228	case 'h':
2229		return hex_string(buf, end, ptr, spec, fmt);
2230	case 'b':
2231		switch (fmt[1]) {
2232		case 'l':
2233			return bitmap_list_string(buf, end, ptr, spec, fmt);
2234		default:
2235			return bitmap_string(buf, end, ptr, spec, fmt);
2236		}
2237	case 'M':			/* Colon separated: 00:01:02:03:04:05 */
2238	case 'm':			/* Contiguous: 000102030405 */
2239					/* [mM]F (FDDI) */
2240					/* [mM]R (Reverse order; Bluetooth) */
2241		return mac_address_string(buf, end, ptr, spec, fmt);
2242	case 'I':			/* Formatted IP supported
2243					 * 4:	1.2.3.4
2244					 * 6:	0001:0203:...:0708
2245					 * 6c:	1::708 or 1::1.2.3.4
2246					 */
2247	case 'i':			/* Contiguous:
2248					 * 4:	001.002.003.004
2249					 * 6:   000102...0f
2250					 */
2251		return ip_addr_string(buf, end, ptr, spec, fmt);
2252	case 'E':
2253		return escaped_string(buf, end, ptr, spec, fmt);
2254	case 'U':
2255		return uuid_string(buf, end, ptr, spec, fmt);
2256	case 'V':
2257		return va_format(buf, end, ptr, spec, fmt);
2258	case 'K':
2259		return restricted_pointer(buf, end, ptr, spec);
2260	case 'N':
2261		return netdev_bits(buf, end, ptr, spec, fmt);
 
 
2262	case 'a':
2263		return address_val(buf, end, ptr, spec, fmt);
2264	case 'd':
2265		return dentry_name(buf, end, ptr, spec, fmt);
2266	case 't':
2267		return time_and_date(buf, end, ptr, spec, fmt);
2268	case 'C':
2269		return clock(buf, end, ptr, spec, fmt);
2270	case 'D':
2271		return file_dentry_name(buf, end, ptr, spec, fmt);
2272#ifdef CONFIG_BLOCK
2273	case 'g':
2274		return bdev_name(buf, end, ptr, spec, fmt);
2275#endif
2276
2277	case 'G':
2278		return flags_string(buf, end, ptr, spec, fmt);
2279	case 'O':
2280		return device_node_string(buf, end, ptr, spec, fmt + 1);
2281	case 'f':
2282		return fwnode_string(buf, end, ptr, spec, fmt + 1);
2283	case 'x':
2284		return pointer_string(buf, end, ptr, spec);
2285	case 'e':
2286		/* %pe with a non-ERR_PTR gets treated as plain %p */
2287		if (!IS_ERR(ptr))
2288			break;
2289		return err_ptr(buf, end, ptr, spec);
2290	case 'u':
2291	case 'k':
2292		switch (fmt[1]) {
2293		case 's':
2294			return string(buf, end, ptr, spec);
2295		default:
2296			return error_string(buf, end, "(einval)", spec);
2297		}
2298	}
2299
2300	/* default is to _not_ leak addresses, hash before printing */
2301	return ptr_to_id(buf, end, ptr, spec);
 
 
 
 
 
 
2302}
2303
2304/*
2305 * Helper function to decode printf style format.
2306 * Each call decode a token from the format and return the
2307 * number of characters read (or likely the delta where it wants
2308 * to go on the next call).
2309 * The decoded token is returned through the parameters
2310 *
2311 * 'h', 'l', or 'L' for integer fields
2312 * 'z' support added 23/7/1999 S.H.
2313 * 'z' changed to 'Z' --davidm 1/25/99
2314 * 'Z' changed to 'z' --adobriyan 2017-01-25
2315 * 't' added for ptrdiff_t
2316 *
2317 * @fmt: the format string
2318 * @type of the token returned
2319 * @flags: various flags such as +, -, # tokens..
2320 * @field_width: overwritten width
2321 * @base: base of the number (octal, hex, ...)
2322 * @precision: precision of a number
2323 * @qualifier: qualifier of a number (long, size_t, ...)
2324 */
2325static noinline_for_stack
2326int format_decode(const char *fmt, struct printf_spec *spec)
2327{
2328	const char *start = fmt;
2329	char qualifier;
2330
2331	/* we finished early by reading the field width */
2332	if (spec->type == FORMAT_TYPE_WIDTH) {
2333		if (spec->field_width < 0) {
2334			spec->field_width = -spec->field_width;
2335			spec->flags |= LEFT;
2336		}
2337		spec->type = FORMAT_TYPE_NONE;
2338		goto precision;
2339	}
2340
2341	/* we finished early by reading the precision */
2342	if (spec->type == FORMAT_TYPE_PRECISION) {
2343		if (spec->precision < 0)
2344			spec->precision = 0;
2345
2346		spec->type = FORMAT_TYPE_NONE;
2347		goto qualifier;
2348	}
2349
2350	/* By default */
2351	spec->type = FORMAT_TYPE_NONE;
2352
2353	for (; *fmt ; ++fmt) {
2354		if (*fmt == '%')
2355			break;
2356	}
2357
2358	/* Return the current non-format string */
2359	if (fmt != start || !*fmt)
2360		return fmt - start;
2361
2362	/* Process flags */
2363	spec->flags = 0;
2364
2365	while (1) { /* this also skips first '%' */
2366		bool found = true;
2367
2368		++fmt;
2369
2370		switch (*fmt) {
2371		case '-': spec->flags |= LEFT;    break;
2372		case '+': spec->flags |= PLUS;    break;
2373		case ' ': spec->flags |= SPACE;   break;
2374		case '#': spec->flags |= SPECIAL; break;
2375		case '0': spec->flags |= ZEROPAD; break;
2376		default:  found = false;
2377		}
2378
2379		if (!found)
2380			break;
2381	}
2382
2383	/* get field width */
2384	spec->field_width = -1;
2385
2386	if (isdigit(*fmt))
2387		spec->field_width = skip_atoi(&fmt);
2388	else if (*fmt == '*') {
2389		/* it's the next argument */
2390		spec->type = FORMAT_TYPE_WIDTH;
2391		return ++fmt - start;
2392	}
2393
2394precision:
2395	/* get the precision */
2396	spec->precision = -1;
2397	if (*fmt == '.') {
2398		++fmt;
2399		if (isdigit(*fmt)) {
2400			spec->precision = skip_atoi(&fmt);
2401			if (spec->precision < 0)
2402				spec->precision = 0;
2403		} else if (*fmt == '*') {
2404			/* it's the next argument */
2405			spec->type = FORMAT_TYPE_PRECISION;
2406			return ++fmt - start;
2407		}
2408	}
2409
2410qualifier:
2411	/* get the conversion qualifier */
2412	qualifier = 0;
2413	if (*fmt == 'h' || _tolower(*fmt) == 'l' ||
2414	    *fmt == 'z' || *fmt == 't') {
2415		qualifier = *fmt++;
2416		if (unlikely(qualifier == *fmt)) {
2417			if (qualifier == 'l') {
2418				qualifier = 'L';
2419				++fmt;
2420			} else if (qualifier == 'h') {
2421				qualifier = 'H';
2422				++fmt;
2423			}
2424		}
2425	}
2426
2427	/* default base */
2428	spec->base = 10;
2429	switch (*fmt) {
2430	case 'c':
2431		spec->type = FORMAT_TYPE_CHAR;
2432		return ++fmt - start;
2433
2434	case 's':
2435		spec->type = FORMAT_TYPE_STR;
2436		return ++fmt - start;
2437
2438	case 'p':
2439		spec->type = FORMAT_TYPE_PTR;
2440		return ++fmt - start;
2441
2442	case '%':
2443		spec->type = FORMAT_TYPE_PERCENT_CHAR;
2444		return ++fmt - start;
2445
2446	/* integer number formats - set up the flags and "break" */
2447	case 'o':
2448		spec->base = 8;
2449		break;
2450
2451	case 'x':
2452		spec->flags |= SMALL;
2453		/* fall through */
2454
2455	case 'X':
2456		spec->base = 16;
2457		break;
2458
2459	case 'd':
2460	case 'i':
2461		spec->flags |= SIGN;
 
2462	case 'u':
2463		break;
2464
2465	case 'n':
2466		/*
2467		 * Since %n poses a greater security risk than
2468		 * utility, treat it as any other invalid or
2469		 * unsupported format specifier.
2470		 */
2471		/* fall through */
2472
2473	default:
2474		WARN_ONCE(1, "Please remove unsupported %%%c in format string\n", *fmt);
2475		spec->type = FORMAT_TYPE_INVALID;
2476		return fmt - start;
2477	}
2478
2479	if (qualifier == 'L')
2480		spec->type = FORMAT_TYPE_LONG_LONG;
2481	else if (qualifier == 'l') {
2482		BUILD_BUG_ON(FORMAT_TYPE_ULONG + SIGN != FORMAT_TYPE_LONG);
2483		spec->type = FORMAT_TYPE_ULONG + (spec->flags & SIGN);
2484	} else if (qualifier == 'z') {
2485		spec->type = FORMAT_TYPE_SIZE_T;
2486	} else if (qualifier == 't') {
2487		spec->type = FORMAT_TYPE_PTRDIFF;
2488	} else if (qualifier == 'H') {
2489		BUILD_BUG_ON(FORMAT_TYPE_UBYTE + SIGN != FORMAT_TYPE_BYTE);
2490		spec->type = FORMAT_TYPE_UBYTE + (spec->flags & SIGN);
2491	} else if (qualifier == 'h') {
2492		BUILD_BUG_ON(FORMAT_TYPE_USHORT + SIGN != FORMAT_TYPE_SHORT);
2493		spec->type = FORMAT_TYPE_USHORT + (spec->flags & SIGN);
2494	} else {
2495		BUILD_BUG_ON(FORMAT_TYPE_UINT + SIGN != FORMAT_TYPE_INT);
2496		spec->type = FORMAT_TYPE_UINT + (spec->flags & SIGN);
2497	}
2498
2499	return ++fmt - start;
2500}
2501
2502static void
2503set_field_width(struct printf_spec *spec, int width)
2504{
2505	spec->field_width = width;
2506	if (WARN_ONCE(spec->field_width != width, "field width %d too large", width)) {
2507		spec->field_width = clamp(width, -FIELD_WIDTH_MAX, FIELD_WIDTH_MAX);
2508	}
2509}
2510
2511static void
2512set_precision(struct printf_spec *spec, int prec)
2513{
2514	spec->precision = prec;
2515	if (WARN_ONCE(spec->precision != prec, "precision %d too large", prec)) {
2516		spec->precision = clamp(prec, 0, PRECISION_MAX);
2517	}
2518}
2519
2520/**
2521 * vsnprintf - Format a string and place it in a buffer
2522 * @buf: The buffer to place the result into
2523 * @size: The size of the buffer, including the trailing null space
2524 * @fmt: The format string to use
2525 * @args: Arguments for the format string
2526 *
2527 * This function generally follows C99 vsnprintf, but has some
2528 * extensions and a few limitations:
2529 *
2530 *  - ``%n`` is unsupported
2531 *  - ``%p*`` is handled by pointer()
2532 *
2533 * See pointer() or Documentation/core-api/printk-formats.rst for more
2534 * extensive description.
2535 *
2536 * **Please update the documentation in both places when making changes**
2537 *
2538 * The return value is the number of characters which would
2539 * be generated for the given input, excluding the trailing
2540 * '\0', as per ISO C99. If you want to have the exact
2541 * number of characters written into @buf as return value
2542 * (not including the trailing '\0'), use vscnprintf(). If the
2543 * return is greater than or equal to @size, the resulting
2544 * string is truncated.
2545 *
2546 * If you're not already dealing with a va_list consider using snprintf().
2547 */
2548int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
2549{
2550	unsigned long long num;
2551	char *str, *end;
2552	struct printf_spec spec = {0};
2553
2554	/* Reject out-of-range values early.  Large positive sizes are
2555	   used for unknown buffer sizes. */
2556	if (WARN_ON_ONCE(size > INT_MAX))
2557		return 0;
2558
2559	str = buf;
2560	end = buf + size;
2561
2562	/* Make sure end is always >= buf */
2563	if (end < buf) {
2564		end = ((void *)-1);
2565		size = end - buf;
2566	}
2567
2568	while (*fmt) {
2569		const char *old_fmt = fmt;
2570		int read = format_decode(fmt, &spec);
2571
2572		fmt += read;
2573
2574		switch (spec.type) {
2575		case FORMAT_TYPE_NONE: {
2576			int copy = read;
2577			if (str < end) {
2578				if (copy > end - str)
2579					copy = end - str;
2580				memcpy(str, old_fmt, copy);
2581			}
2582			str += read;
2583			break;
2584		}
2585
2586		case FORMAT_TYPE_WIDTH:
2587			set_field_width(&spec, va_arg(args, int));
2588			break;
2589
2590		case FORMAT_TYPE_PRECISION:
2591			set_precision(&spec, va_arg(args, int));
2592			break;
2593
2594		case FORMAT_TYPE_CHAR: {
2595			char c;
2596
2597			if (!(spec.flags & LEFT)) {
2598				while (--spec.field_width > 0) {
2599					if (str < end)
2600						*str = ' ';
2601					++str;
2602
2603				}
2604			}
2605			c = (unsigned char) va_arg(args, int);
2606			if (str < end)
2607				*str = c;
2608			++str;
2609			while (--spec.field_width > 0) {
2610				if (str < end)
2611					*str = ' ';
2612				++str;
2613			}
2614			break;
2615		}
2616
2617		case FORMAT_TYPE_STR:
2618			str = string(str, end, va_arg(args, char *), spec);
2619			break;
2620
2621		case FORMAT_TYPE_PTR:
2622			str = pointer(fmt, str, end, va_arg(args, void *),
2623				      spec);
2624			while (isalnum(*fmt))
2625				fmt++;
2626			break;
2627
2628		case FORMAT_TYPE_PERCENT_CHAR:
2629			if (str < end)
2630				*str = '%';
2631			++str;
2632			break;
2633
2634		case FORMAT_TYPE_INVALID:
2635			/*
2636			 * Presumably the arguments passed gcc's type
2637			 * checking, but there is no safe or sane way
2638			 * for us to continue parsing the format and
2639			 * fetching from the va_list; the remaining
2640			 * specifiers and arguments would be out of
2641			 * sync.
2642			 */
2643			goto out;
2644
2645		default:
2646			switch (spec.type) {
2647			case FORMAT_TYPE_LONG_LONG:
2648				num = va_arg(args, long long);
2649				break;
2650			case FORMAT_TYPE_ULONG:
2651				num = va_arg(args, unsigned long);
2652				break;
2653			case FORMAT_TYPE_LONG:
2654				num = va_arg(args, long);
2655				break;
2656			case FORMAT_TYPE_SIZE_T:
2657				if (spec.flags & SIGN)
2658					num = va_arg(args, ssize_t);
2659				else
2660					num = va_arg(args, size_t);
2661				break;
2662			case FORMAT_TYPE_PTRDIFF:
2663				num = va_arg(args, ptrdiff_t);
2664				break;
2665			case FORMAT_TYPE_UBYTE:
2666				num = (unsigned char) va_arg(args, int);
2667				break;
2668			case FORMAT_TYPE_BYTE:
2669				num = (signed char) va_arg(args, int);
2670				break;
2671			case FORMAT_TYPE_USHORT:
2672				num = (unsigned short) va_arg(args, int);
2673				break;
2674			case FORMAT_TYPE_SHORT:
2675				num = (short) va_arg(args, int);
2676				break;
2677			case FORMAT_TYPE_INT:
2678				num = (int) va_arg(args, int);
2679				break;
2680			default:
2681				num = va_arg(args, unsigned int);
2682			}
2683
2684			str = number(str, end, num, spec);
2685		}
2686	}
2687
2688out:
2689	if (size > 0) {
2690		if (str < end)
2691			*str = '\0';
2692		else
2693			end[-1] = '\0';
2694	}
2695
2696	/* the trailing null byte doesn't count towards the total */
2697	return str-buf;
2698
2699}
2700EXPORT_SYMBOL(vsnprintf);
2701
2702/**
2703 * vscnprintf - Format a string and place it in a buffer
2704 * @buf: The buffer to place the result into
2705 * @size: The size of the buffer, including the trailing null space
2706 * @fmt: The format string to use
2707 * @args: Arguments for the format string
2708 *
2709 * The return value is the number of characters which have been written into
2710 * the @buf not including the trailing '\0'. If @size is == 0 the function
2711 * returns 0.
2712 *
2713 * If you're not already dealing with a va_list consider using scnprintf().
2714 *
2715 * See the vsnprintf() documentation for format string extensions over C99.
2716 */
2717int vscnprintf(char *buf, size_t size, const char *fmt, va_list args)
2718{
2719	int i;
2720
2721	i = vsnprintf(buf, size, fmt, args);
2722
2723	if (likely(i < size))
2724		return i;
2725	if (size != 0)
2726		return size - 1;
2727	return 0;
2728}
2729EXPORT_SYMBOL(vscnprintf);
2730
2731/**
2732 * snprintf - Format a string and place it in a buffer
2733 * @buf: The buffer to place the result into
2734 * @size: The size of the buffer, including the trailing null space
2735 * @fmt: The format string to use
2736 * @...: Arguments for the format string
2737 *
2738 * The return value is the number of characters which would be
2739 * generated for the given input, excluding the trailing null,
2740 * as per ISO C99.  If the return is greater than or equal to
2741 * @size, the resulting string is truncated.
2742 *
2743 * See the vsnprintf() documentation for format string extensions over C99.
2744 */
2745int snprintf(char *buf, size_t size, const char *fmt, ...)
2746{
2747	va_list args;
2748	int i;
2749
2750	va_start(args, fmt);
2751	i = vsnprintf(buf, size, fmt, args);
2752	va_end(args);
2753
2754	return i;
2755}
2756EXPORT_SYMBOL(snprintf);
2757
2758/**
2759 * scnprintf - Format a string and place it in a buffer
2760 * @buf: The buffer to place the result into
2761 * @size: The size of the buffer, including the trailing null space
2762 * @fmt: The format string to use
2763 * @...: Arguments for the format string
2764 *
2765 * The return value is the number of characters written into @buf not including
2766 * the trailing '\0'. If @size is == 0 the function returns 0.
2767 */
2768
2769int scnprintf(char *buf, size_t size, const char *fmt, ...)
2770{
2771	va_list args;
2772	int i;
2773
2774	va_start(args, fmt);
2775	i = vscnprintf(buf, size, fmt, args);
2776	va_end(args);
2777
2778	return i;
2779}
2780EXPORT_SYMBOL(scnprintf);
2781
2782/**
2783 * vsprintf - Format a string and place it in a buffer
2784 * @buf: The buffer to place the result into
2785 * @fmt: The format string to use
2786 * @args: Arguments for the format string
2787 *
2788 * The function returns the number of characters written
2789 * into @buf. Use vsnprintf() or vscnprintf() in order to avoid
2790 * buffer overflows.
2791 *
2792 * If you're not already dealing with a va_list consider using sprintf().
2793 *
2794 * See the vsnprintf() documentation for format string extensions over C99.
2795 */
2796int vsprintf(char *buf, const char *fmt, va_list args)
2797{
2798	return vsnprintf(buf, INT_MAX, fmt, args);
2799}
2800EXPORT_SYMBOL(vsprintf);
2801
2802/**
2803 * sprintf - Format a string and place it in a buffer
2804 * @buf: The buffer to place the result into
2805 * @fmt: The format string to use
2806 * @...: Arguments for the format string
2807 *
2808 * The function returns the number of characters written
2809 * into @buf. Use snprintf() or scnprintf() in order to avoid
2810 * buffer overflows.
2811 *
2812 * See the vsnprintf() documentation for format string extensions over C99.
2813 */
2814int sprintf(char *buf, const char *fmt, ...)
2815{
2816	va_list args;
2817	int i;
2818
2819	va_start(args, fmt);
2820	i = vsnprintf(buf, INT_MAX, fmt, args);
2821	va_end(args);
2822
2823	return i;
2824}
2825EXPORT_SYMBOL(sprintf);
2826
2827#ifdef CONFIG_BINARY_PRINTF
2828/*
2829 * bprintf service:
2830 * vbin_printf() - VA arguments to binary data
2831 * bstr_printf() - Binary data to text string
2832 */
2833
2834/**
2835 * vbin_printf - Parse a format string and place args' binary value in a buffer
2836 * @bin_buf: The buffer to place args' binary value
2837 * @size: The size of the buffer(by words(32bits), not characters)
2838 * @fmt: The format string to use
2839 * @args: Arguments for the format string
2840 *
2841 * The format follows C99 vsnprintf, except %n is ignored, and its argument
2842 * is skipped.
2843 *
2844 * The return value is the number of words(32bits) which would be generated for
2845 * the given input.
2846 *
2847 * NOTE:
2848 * If the return value is greater than @size, the resulting bin_buf is NOT
2849 * valid for bstr_printf().
2850 */
2851int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args)
2852{
2853	struct printf_spec spec = {0};
2854	char *str, *end;
2855	int width;
2856
2857	str = (char *)bin_buf;
2858	end = (char *)(bin_buf + size);
2859
2860#define save_arg(type)							\
2861({									\
2862	unsigned long long value;					\
2863	if (sizeof(type) == 8) {					\
2864		unsigned long long val8;				\
2865		str = PTR_ALIGN(str, sizeof(u32));			\
2866		val8 = va_arg(args, unsigned long long);		\
2867		if (str + sizeof(type) <= end) {			\
2868			*(u32 *)str = *(u32 *)&val8;			\
2869			*(u32 *)(str + 4) = *((u32 *)&val8 + 1);	\
2870		}							\
2871		value = val8;						\
2872	} else {							\
2873		unsigned int val4;					\
2874		str = PTR_ALIGN(str, sizeof(type));			\
2875		val4 = va_arg(args, int);				\
2876		if (str + sizeof(type) <= end)				\
2877			*(typeof(type) *)str = (type)(long)val4;	\
2878		value = (unsigned long long)val4;			\
2879	}								\
2880	str += sizeof(type);						\
2881	value;								\
2882})
2883
2884	while (*fmt) {
2885		int read = format_decode(fmt, &spec);
2886
2887		fmt += read;
2888
2889		switch (spec.type) {
2890		case FORMAT_TYPE_NONE:
2891		case FORMAT_TYPE_PERCENT_CHAR:
2892			break;
2893		case FORMAT_TYPE_INVALID:
2894			goto out;
2895
2896		case FORMAT_TYPE_WIDTH:
2897		case FORMAT_TYPE_PRECISION:
2898			width = (int)save_arg(int);
2899			/* Pointers may require the width */
2900			if (*fmt == 'p')
2901				set_field_width(&spec, width);
2902			break;
2903
2904		case FORMAT_TYPE_CHAR:
2905			save_arg(char);
2906			break;
2907
2908		case FORMAT_TYPE_STR: {
2909			const char *save_str = va_arg(args, char *);
2910			const char *err_msg;
2911			size_t len;
2912
2913			err_msg = check_pointer_msg(save_str);
2914			if (err_msg)
2915				save_str = err_msg;
2916
2917			len = strlen(save_str) + 1;
2918			if (str + len < end)
2919				memcpy(str, save_str, len);
2920			str += len;
2921			break;
2922		}
2923
2924		case FORMAT_TYPE_PTR:
2925			/* Dereferenced pointers must be done now */
2926			switch (*fmt) {
2927			/* Dereference of functions is still OK */
2928			case 'S':
2929			case 's':
2930			case 'x':
2931			case 'K':
2932			case 'e':
2933				save_arg(void *);
2934				break;
2935			default:
2936				if (!isalnum(*fmt)) {
2937					save_arg(void *);
2938					break;
2939				}
2940				str = pointer(fmt, str, end, va_arg(args, void *),
2941					      spec);
2942				if (str + 1 < end)
2943					*str++ = '\0';
2944				else
2945					end[-1] = '\0'; /* Must be nul terminated */
2946			}
2947			/* skip all alphanumeric pointer suffixes */
2948			while (isalnum(*fmt))
2949				fmt++;
2950			break;
2951
2952		default:
2953			switch (spec.type) {
2954
2955			case FORMAT_TYPE_LONG_LONG:
2956				save_arg(long long);
2957				break;
2958			case FORMAT_TYPE_ULONG:
2959			case FORMAT_TYPE_LONG:
2960				save_arg(unsigned long);
2961				break;
2962			case FORMAT_TYPE_SIZE_T:
2963				save_arg(size_t);
2964				break;
2965			case FORMAT_TYPE_PTRDIFF:
2966				save_arg(ptrdiff_t);
2967				break;
2968			case FORMAT_TYPE_UBYTE:
2969			case FORMAT_TYPE_BYTE:
2970				save_arg(char);
2971				break;
2972			case FORMAT_TYPE_USHORT:
2973			case FORMAT_TYPE_SHORT:
2974				save_arg(short);
2975				break;
2976			default:
2977				save_arg(int);
2978			}
2979		}
2980	}
2981
2982out:
2983	return (u32 *)(PTR_ALIGN(str, sizeof(u32))) - bin_buf;
2984#undef save_arg
2985}
2986EXPORT_SYMBOL_GPL(vbin_printf);
2987
2988/**
2989 * bstr_printf - Format a string from binary arguments and place it in a buffer
2990 * @buf: The buffer to place the result into
2991 * @size: The size of the buffer, including the trailing null space
2992 * @fmt: The format string to use
2993 * @bin_buf: Binary arguments for the format string
2994 *
2995 * This function like C99 vsnprintf, but the difference is that vsnprintf gets
2996 * arguments from stack, and bstr_printf gets arguments from @bin_buf which is
2997 * a binary buffer that generated by vbin_printf.
2998 *
2999 * The format follows C99 vsnprintf, but has some extensions:
3000 *  see vsnprintf comment for details.
3001 *
3002 * The return value is the number of characters which would
3003 * be generated for the given input, excluding the trailing
3004 * '\0', as per ISO C99. If you want to have the exact
3005 * number of characters written into @buf as return value
3006 * (not including the trailing '\0'), use vscnprintf(). If the
3007 * return is greater than or equal to @size, the resulting
3008 * string is truncated.
3009 */
3010int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
3011{
3012	struct printf_spec spec = {0};
3013	char *str, *end;
3014	const char *args = (const char *)bin_buf;
3015
3016	if (WARN_ON_ONCE(size > INT_MAX))
3017		return 0;
3018
3019	str = buf;
3020	end = buf + size;
3021
3022#define get_arg(type)							\
3023({									\
3024	typeof(type) value;						\
3025	if (sizeof(type) == 8) {					\
3026		args = PTR_ALIGN(args, sizeof(u32));			\
3027		*(u32 *)&value = *(u32 *)args;				\
3028		*((u32 *)&value + 1) = *(u32 *)(args + 4);		\
3029	} else {							\
3030		args = PTR_ALIGN(args, sizeof(type));			\
3031		value = *(typeof(type) *)args;				\
3032	}								\
3033	args += sizeof(type);						\
3034	value;								\
3035})
3036
3037	/* Make sure end is always >= buf */
3038	if (end < buf) {
3039		end = ((void *)-1);
3040		size = end - buf;
3041	}
3042
3043	while (*fmt) {
3044		const char *old_fmt = fmt;
3045		int read = format_decode(fmt, &spec);
3046
3047		fmt += read;
3048
3049		switch (spec.type) {
3050		case FORMAT_TYPE_NONE: {
3051			int copy = read;
3052			if (str < end) {
3053				if (copy > end - str)
3054					copy = end - str;
3055				memcpy(str, old_fmt, copy);
3056			}
3057			str += read;
3058			break;
3059		}
3060
3061		case FORMAT_TYPE_WIDTH:
3062			set_field_width(&spec, get_arg(int));
3063			break;
3064
3065		case FORMAT_TYPE_PRECISION:
3066			set_precision(&spec, get_arg(int));
3067			break;
3068
3069		case FORMAT_TYPE_CHAR: {
3070			char c;
3071
3072			if (!(spec.flags & LEFT)) {
3073				while (--spec.field_width > 0) {
3074					if (str < end)
3075						*str = ' ';
3076					++str;
3077				}
3078			}
3079			c = (unsigned char) get_arg(char);
3080			if (str < end)
3081				*str = c;
3082			++str;
3083			while (--spec.field_width > 0) {
3084				if (str < end)
3085					*str = ' ';
3086				++str;
3087			}
3088			break;
3089		}
3090
3091		case FORMAT_TYPE_STR: {
3092			const char *str_arg = args;
3093			args += strlen(str_arg) + 1;
3094			str = string(str, end, (char *)str_arg, spec);
3095			break;
3096		}
3097
3098		case FORMAT_TYPE_PTR: {
3099			bool process = false;
3100			int copy, len;
3101			/* Non function dereferences were already done */
3102			switch (*fmt) {
3103			case 'S':
3104			case 's':
3105			case 'F':
3106			case 'f':
3107			case 'x':
3108			case 'K':
3109			case 'e':
3110				process = true;
3111				break;
3112			default:
3113				if (!isalnum(*fmt)) {
3114					process = true;
3115					break;
3116				}
3117				/* Pointer dereference was already processed */
3118				if (str < end) {
3119					len = copy = strlen(args);
3120					if (copy > end - str)
3121						copy = end - str;
3122					memcpy(str, args, copy);
3123					str += len;
3124					args += len + 1;
3125				}
3126			}
3127			if (process)
3128				str = pointer(fmt, str, end, get_arg(void *), spec);
3129
3130			while (isalnum(*fmt))
3131				fmt++;
3132			break;
3133		}
3134
3135		case FORMAT_TYPE_PERCENT_CHAR:
3136			if (str < end)
3137				*str = '%';
3138			++str;
3139			break;
3140
3141		case FORMAT_TYPE_INVALID:
3142			goto out;
3143
3144		default: {
3145			unsigned long long num;
3146
3147			switch (spec.type) {
3148
3149			case FORMAT_TYPE_LONG_LONG:
3150				num = get_arg(long long);
3151				break;
3152			case FORMAT_TYPE_ULONG:
3153			case FORMAT_TYPE_LONG:
3154				num = get_arg(unsigned long);
3155				break;
3156			case FORMAT_TYPE_SIZE_T:
3157				num = get_arg(size_t);
3158				break;
3159			case FORMAT_TYPE_PTRDIFF:
3160				num = get_arg(ptrdiff_t);
3161				break;
3162			case FORMAT_TYPE_UBYTE:
3163				num = get_arg(unsigned char);
3164				break;
3165			case FORMAT_TYPE_BYTE:
3166				num = get_arg(signed char);
3167				break;
3168			case FORMAT_TYPE_USHORT:
3169				num = get_arg(unsigned short);
3170				break;
3171			case FORMAT_TYPE_SHORT:
3172				num = get_arg(short);
3173				break;
3174			case FORMAT_TYPE_UINT:
3175				num = get_arg(unsigned int);
3176				break;
3177			default:
3178				num = get_arg(int);
3179			}
3180
3181			str = number(str, end, num, spec);
3182		} /* default: */
3183		} /* switch(spec.type) */
3184	} /* while(*fmt) */
3185
3186out:
3187	if (size > 0) {
3188		if (str < end)
3189			*str = '\0';
3190		else
3191			end[-1] = '\0';
3192	}
3193
3194#undef get_arg
3195
3196	/* the trailing null byte doesn't count towards the total */
3197	return str - buf;
3198}
3199EXPORT_SYMBOL_GPL(bstr_printf);
3200
3201/**
3202 * bprintf - Parse a format string and place args' binary value in a buffer
3203 * @bin_buf: The buffer to place args' binary value
3204 * @size: The size of the buffer(by words(32bits), not characters)
3205 * @fmt: The format string to use
3206 * @...: Arguments for the format string
3207 *
3208 * The function returns the number of words(u32) written
3209 * into @bin_buf.
3210 */
3211int bprintf(u32 *bin_buf, size_t size, const char *fmt, ...)
3212{
3213	va_list args;
3214	int ret;
3215
3216	va_start(args, fmt);
3217	ret = vbin_printf(bin_buf, size, fmt, args);
3218	va_end(args);
3219
3220	return ret;
3221}
3222EXPORT_SYMBOL_GPL(bprintf);
3223
3224#endif /* CONFIG_BINARY_PRINTF */
3225
3226/**
3227 * vsscanf - Unformat a buffer into a list of arguments
3228 * @buf:	input buffer
3229 * @fmt:	format of buffer
3230 * @args:	arguments
3231 */
3232int vsscanf(const char *buf, const char *fmt, va_list args)
3233{
3234	const char *str = buf;
3235	char *next;
3236	char digit;
3237	int num = 0;
3238	u8 qualifier;
3239	unsigned int base;
3240	union {
3241		long long s;
3242		unsigned long long u;
3243	} val;
3244	s16 field_width;
3245	bool is_sign;
3246
3247	while (*fmt) {
3248		/* skip any white space in format */
3249		/* white space in format matchs any amount of
3250		 * white space, including none, in the input.
3251		 */
3252		if (isspace(*fmt)) {
3253			fmt = skip_spaces(++fmt);
3254			str = skip_spaces(str);
3255		}
3256
3257		/* anything that is not a conversion must match exactly */
3258		if (*fmt != '%' && *fmt) {
3259			if (*fmt++ != *str++)
3260				break;
3261			continue;
3262		}
3263
3264		if (!*fmt)
3265			break;
3266		++fmt;
3267
3268		/* skip this conversion.
3269		 * advance both strings to next white space
3270		 */
3271		if (*fmt == '*') {
3272			if (!*str)
3273				break;
3274			while (!isspace(*fmt) && *fmt != '%' && *fmt) {
3275				/* '%*[' not yet supported, invalid format */
3276				if (*fmt == '[')
3277					return num;
3278				fmt++;
3279			}
3280			while (!isspace(*str) && *str)
3281				str++;
3282			continue;
3283		}
3284
3285		/* get field width */
3286		field_width = -1;
3287		if (isdigit(*fmt)) {
3288			field_width = skip_atoi(&fmt);
3289			if (field_width <= 0)
3290				break;
3291		}
3292
3293		/* get conversion qualifier */
3294		qualifier = -1;
3295		if (*fmt == 'h' || _tolower(*fmt) == 'l' ||
3296		    *fmt == 'z') {
3297			qualifier = *fmt++;
3298			if (unlikely(qualifier == *fmt)) {
3299				if (qualifier == 'h') {
3300					qualifier = 'H';
3301					fmt++;
3302				} else if (qualifier == 'l') {
3303					qualifier = 'L';
3304					fmt++;
3305				}
3306			}
3307		}
3308
3309		if (!*fmt)
3310			break;
3311
3312		if (*fmt == 'n') {
3313			/* return number of characters read so far */
3314			*va_arg(args, int *) = str - buf;
3315			++fmt;
3316			continue;
3317		}
3318
3319		if (!*str)
3320			break;
3321
3322		base = 10;
3323		is_sign = false;
3324
3325		switch (*fmt++) {
3326		case 'c':
3327		{
3328			char *s = (char *)va_arg(args, char*);
3329			if (field_width == -1)
3330				field_width = 1;
3331			do {
3332				*s++ = *str++;
3333			} while (--field_width > 0 && *str);
3334			num++;
3335		}
3336		continue;
3337		case 's':
3338		{
3339			char *s = (char *)va_arg(args, char *);
3340			if (field_width == -1)
3341				field_width = SHRT_MAX;
3342			/* first, skip leading white space in buffer */
3343			str = skip_spaces(str);
3344
3345			/* now copy until next white space */
3346			while (*str && !isspace(*str) && field_width--)
3347				*s++ = *str++;
3348			*s = '\0';
3349			num++;
3350		}
3351		continue;
3352		/*
3353		 * Warning: This implementation of the '[' conversion specifier
3354		 * deviates from its glibc counterpart in the following ways:
3355		 * (1) It does NOT support ranges i.e. '-' is NOT a special
3356		 *     character
3357		 * (2) It cannot match the closing bracket ']' itself
3358		 * (3) A field width is required
3359		 * (4) '%*[' (discard matching input) is currently not supported
3360		 *
3361		 * Example usage:
3362		 * ret = sscanf("00:0a:95","%2[^:]:%2[^:]:%2[^:]",
3363		 *		buf1, buf2, buf3);
3364		 * if (ret < 3)
3365		 *    // etc..
3366		 */
3367		case '[':
3368		{
3369			char *s = (char *)va_arg(args, char *);
3370			DECLARE_BITMAP(set, 256) = {0};
3371			unsigned int len = 0;
3372			bool negate = (*fmt == '^');
3373
3374			/* field width is required */
3375			if (field_width == -1)
3376				return num;
3377
3378			if (negate)
3379				++fmt;
3380
3381			for ( ; *fmt && *fmt != ']'; ++fmt, ++len)
3382				set_bit((u8)*fmt, set);
3383
3384			/* no ']' or no character set found */
3385			if (!*fmt || !len)
3386				return num;
3387			++fmt;
3388
3389			if (negate) {
3390				bitmap_complement(set, set, 256);
3391				/* exclude null '\0' byte */
3392				clear_bit(0, set);
3393			}
3394
3395			/* match must be non-empty */
3396			if (!test_bit((u8)*str, set))
3397				return num;
3398
3399			while (test_bit((u8)*str, set) && field_width--)
3400				*s++ = *str++;
3401			*s = '\0';
3402			++num;
3403		}
3404		continue;
3405		case 'o':
3406			base = 8;
3407			break;
3408		case 'x':
3409		case 'X':
3410			base = 16;
3411			break;
3412		case 'i':
3413			base = 0;
3414			/* fall through */
3415		case 'd':
3416			is_sign = true;
3417			/* fall through */
3418		case 'u':
3419			break;
3420		case '%':
3421			/* looking for '%' in str */
3422			if (*str++ != '%')
3423				return num;
3424			continue;
3425		default:
3426			/* invalid format; stop here */
3427			return num;
3428		}
3429
3430		/* have some sort of integer conversion.
3431		 * first, skip white space in buffer.
3432		 */
3433		str = skip_spaces(str);
3434
3435		digit = *str;
3436		if (is_sign && digit == '-')
 
 
 
3437			digit = *(str + 1);
 
3438
3439		if (!digit
3440		    || (base == 16 && !isxdigit(digit))
3441		    || (base == 10 && !isdigit(digit))
3442		    || (base == 8 && (!isdigit(digit) || digit > '7'))
3443		    || (base == 0 && !isdigit(digit)))
3444			break;
3445
3446		if (is_sign)
3447			val.s = qualifier != 'L' ?
3448				simple_strtol(str, &next, base) :
3449				simple_strtoll(str, &next, base);
3450		else
3451			val.u = qualifier != 'L' ?
3452				simple_strtoul(str, &next, base) :
3453				simple_strtoull(str, &next, base);
3454
3455		if (field_width > 0 && next - str > field_width) {
3456			if (base == 0)
3457				_parse_integer_fixup_radix(str, &base);
3458			while (next - str > field_width) {
3459				if (is_sign)
3460					val.s = div_s64(val.s, base);
3461				else
3462					val.u = div_u64(val.u, base);
3463				--next;
3464			}
3465		}
3466
3467		switch (qualifier) {
3468		case 'H':	/* that's 'hh' in format */
3469			if (is_sign)
3470				*va_arg(args, signed char *) = val.s;
3471			else
3472				*va_arg(args, unsigned char *) = val.u;
3473			break;
3474		case 'h':
3475			if (is_sign)
3476				*va_arg(args, short *) = val.s;
3477			else
3478				*va_arg(args, unsigned short *) = val.u;
3479			break;
3480		case 'l':
3481			if (is_sign)
3482				*va_arg(args, long *) = val.s;
3483			else
3484				*va_arg(args, unsigned long *) = val.u;
3485			break;
3486		case 'L':
3487			if (is_sign)
3488				*va_arg(args, long long *) = val.s;
3489			else
3490				*va_arg(args, unsigned long long *) = val.u;
3491			break;
3492		case 'z':
3493			*va_arg(args, size_t *) = val.u;
3494			break;
3495		default:
3496			if (is_sign)
3497				*va_arg(args, int *) = val.s;
3498			else
3499				*va_arg(args, unsigned int *) = val.u;
3500			break;
3501		}
3502		num++;
3503
3504		if (!next)
3505			break;
3506		str = next;
3507	}
3508
3509	return num;
3510}
3511EXPORT_SYMBOL(vsscanf);
3512
3513/**
3514 * sscanf - Unformat a buffer into a list of arguments
3515 * @buf:	input buffer
3516 * @fmt:	formatting of buffer
3517 * @...:	resulting arguments
3518 */
3519int sscanf(const char *buf, const char *fmt, ...)
3520{
3521	va_list args;
3522	int i;
3523
3524	va_start(args, fmt);
3525	i = vsscanf(buf, fmt, args);
3526	va_end(args);
3527
3528	return i;
3529}
3530EXPORT_SYMBOL(sscanf);