[PATCH 1/5] lib/vsprintf.c: make sure vsnprintf() never returns a negative value
Rasmus Villemoes
rasmus.villemoes at prevas.dk
Thu May 20 12:05:24 CEST 2021
Most callers (or callers of callers, etc.) of vsnprintf() are not
prepared for it to return a negative value.
The only case where that can currently happen is %pD, and it's IMO
more user-friendly to produce some output that clearly shows that some
"impossible" thing happened instead of having the message completely
ignored - or mishandled as for example log.c would currently do.
Signed-off-by: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
---
lib/vsprintf.c | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 9dc96c81c6..0050110683 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -310,7 +310,7 @@ static char *device_path_string(char *buf, char *end, void *dp, int field_width,
str = efi_dp_str((struct efi_device_path *)dp);
if (!str)
- return ERR_PTR(-ENOMEM);
+ return string(buf, end, "<%pD:ENOMEM>", field_width, precision, flags);
buf = string16(buf, end, str, field_width, precision, flags);
efi_free_pool(str);
@@ -631,8 +631,6 @@ repeat:
str = pointer(fmt + 1, str, end,
va_arg(args, void *),
field_width, precision, flags);
- if (IS_ERR(str))
- return PTR_ERR(str);
/* Skip all alphanumeric pointer suffixes */
while (isalnum(fmt[1]))
fmt++;
@@ -798,9 +796,6 @@ int printf(const char *fmt, ...)
i = vscnprintf(printbuffer, sizeof(printbuffer), fmt, args);
va_end(args);
- /* Handle error */
- if (i <= 0)
- return i;
/* Print the string */
puts(printbuffer);
return i;
@@ -817,9 +812,6 @@ int vprintf(const char *fmt, va_list args)
*/
i = vscnprintf(printbuffer, sizeof(printbuffer), fmt, args);
- /* Handle error */
- if (i <= 0)
- return i;
/* Print the string */
puts(printbuffer);
return i;
--
2.29.2
More information about the U-Boot
mailing list