From: Arvind Sankar <nivedita@alum.mit.edu>
Date: Mon, 18 May 2020 15:07:02 -0400
Subject: efi/printf: Merge 'p' with the integer formats
Patch-mainline: v5.8-rc1
Git-commit: 7c30fd79168aeb83d11260246d93f8a293052007
References: jsc#SLE-16407
Treat 'p' as a hexadecimal integer with precision equal to the number of
digits in void *.
Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Link: https://lore.kernel.org/r/20200518190716.751506-11-nivedita@alum.mit.edu
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Acked-by: Lee, Chun-Yi <jlee@suse.com>
---
drivers/firmware/efi/libstub/vsprintf.c | 22 ++++++++--------------
1 file changed, 8 insertions(+), 14 deletions(-)
--- a/drivers/firmware/efi/libstub/vsprintf.c
+++ b/drivers/firmware/efi/libstub/vsprintf.c
@@ -297,9 +297,6 @@ int vsprintf(char *buf, const char *fmt,
}
}
- /* default base */
- base = 10;
-
switch (*fmt) {
case 'c':
if (!(flags & LEFT))
@@ -323,21 +320,15 @@ int vsprintf(char *buf, const char *fmt,
*str++ = ' ';
continue;
- case 'p':
- if (field_width == -1) {
- field_width = 2 * sizeof(void *);
- flags |= ZEROPAD;
- }
- str = number(str,
- (unsigned long)va_arg(args, void *), 16,
- field_width, precision, flags);
- continue;
-
/* integer number formats - set up the flags and "break" */
case 'o':
base = 8;
break;
+ case 'p':
+ if (precision < 0)
+ precision = 2 * sizeof(void *);
+ fallthrough;
case 'x':
flags |= SMALL;
fallthrough;
@@ -350,6 +341,7 @@ int vsprintf(char *buf, const char *fmt,
flags |= SIGN;
fallthrough;
case 'u':
+ base = 10;
break;
default:
@@ -360,7 +352,9 @@ int vsprintf(char *buf, const char *fmt,
--fmt;
continue;
}
- if (flags & SIGN) {
+ if (*fmt == 'p') {
+ num = (unsigned long)va_arg(args, void *);
+ } else if (flags & SIGN) {
switch (qualifier) {
case 'L':
num = va_arg(args, long long);