Re: [RFC][PATCH] printf: Harden accessing pointer dereference in vsprintf()

From: Sergey Senozhatsky
Date: Mon Jan 06 2025 - 23:33:53 EST


On (25/01/06 17:27), Steven Rostedt wrote:
> @@ -695,12 +695,18 @@ static char *error_string(char *buf, char *end, const char *s,
> */
> static const char *check_pointer_msg(const void *ptr)
> {
> + char ch;
> +
> if (!ptr)
> return "(null)";
>
> if ((unsigned long)ptr < PAGE_SIZE || IS_ERR_VALUE(ptr))
> return "(efault)";
>
> + /* Just test a single byte */
> + if (copy_from_kernel_nofault(&ch, ptr, 1) < 0)
> + return "(efault)";
> +

I might be wrong, but I recall that copy_from_kernel() (previously known
as probe_kernel_read()) did cause boot regressions in the past. E.g.
Petr's commit 2ac5a3bf7042 ("vsprintf: Do not break early boot with
probing addresses").