lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f308ab312810d538a79c2f54f49edba32c60b561.camel@perches.com>
Date:   Fri, 08 Feb 2019 09:11:17 -0800
From:   Joe Perches <joe@...ches.com>
To:     Petr Mladek <pmladek@...e.com>,
        Andy Shevchenko <andriy.shevchenko@...ux.intel.com>,
        Rasmus Villemoes <linux@...musvillemoes.dk>
Cc:     Linus Torvalds <torvalds@...ux-foundation.org>,
        "Tobin C . Harding" <me@...in.cc>,
        Andrew Morton <akpm@...ux-foundation.org>,
        Michal Hocko <mhocko@...e.cz>,
        Sergey Senozhatsky <sergey.senozhatsky@...il.com>,
        Steven Rostedt <rostedt@...dmis.org>,
        Sergey Senozhatsky <sergey.senozhatsky.work@...il.com>,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH v6 5/9] vsprintf: Factor out %pV handler as va_format()

On Fri, 2019-02-08 at 16:23 +0100, Petr Mladek wrote:
> Move the code from the long pointer() function. We are going to improve
> error handling that will make it more complicated.
> 
> This patch does not change the existing behavior.

But doesn't this increase stack use?
%pV is recursive and increasing the stack is undesired
for this use.

> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
[]
> @@ -1519,6 +1519,17 @@ char *escaped_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
>  	return buf;
>  }
>  
> +static char *va_format(char *buf, char *end, struct va_format *va_fmt)
> +{
> +	va_list va;
> +
> +	va_copy(va, *va_fmt->va);
> +	buf += vsnprintf(buf, end > buf ? end - buf : 0, va_fmt->fmt, va);
> +	va_end(va);
> +
> +	return buf;
> +}
> +
>  static noinline_for_stack
>  char *uuid_string(char *buf, char *end, const u8 *addr,
>  		  struct printf_spec spec, const char *fmt)
> @@ -2046,15 +2057,7 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
>  	case 'U':
>  		return uuid_string(buf, end, ptr, spec, fmt);
>  	case 'V':
> -		{
> -			va_list va;
> -
> -			va_copy(va, *((struct va_format *)ptr)->va);
> -			buf += vsnprintf(buf, end > buf ? end - buf : 0,
> -					 ((struct va_format *)ptr)->fmt, va);
> -			va_end(va);
> -			return buf;
> -		}
> +		return va_format(buf, end, ptr);
>  	case 'K':
>  		return restricted_pointer(buf, end, ptr, spec);
>  	case 'N':

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ