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