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
| ||
|
Date: Thu, 19 May 2022 13:24:08 -0400 From: Kent Overstreet <kent.overstreet@...il.com> To: linux-kernel@...r.kernel.org, linux-mm@...r.kernel.org, pmladek@...e.com, rostedt@...dmis.org, senozhatsky@...omium.org Cc: Kent Overstreet <kent.overstreet@...il.com>, andriy.shevchenko@...ux.intel.com, willy@...radead.org Subject: [PATCH v2 15/28] vsprintf: Refactor fourcc_string() - We're attempting to consolidate printf_spec and format string handling in the top level vpr_buf(), this changes fourcc_string() to not take printf_spec - With the new printbuf helpers there's no need to use a separate stack allocated buffer, so this patch deletes it. Signed-off-by: Kent Overstreet <kent.overstreet@...il.com> --- lib/vsprintf.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/lib/vsprintf.c b/lib/vsprintf.c index dd4bbb28e7..3d17ddad31 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -1702,17 +1702,15 @@ void netdev_bits(struct printbuf *out, const void *addr, static noinline_for_stack void fourcc_string(struct printbuf *out, const u32 *fourcc, - struct printf_spec spec, const char *fmt) + const char *fmt) { - char output_buf[sizeof("0123 little-endian (0x01234567)")]; - struct printbuf output = PRINTBUF_EXTERN(output_buf, sizeof(output_buf)); unsigned int i; u32 val; if (fmt[1] != 'c' || fmt[2] != 'c') - return error_string_spec(out, "(%p4?)", spec); + return error_string(out, "(%p4?)"); - if (check_pointer_spec(out, fourcc, spec)) + if (check_pointer(out, fourcc)) return; val = *fourcc & ~BIT(31); @@ -1721,18 +1719,17 @@ void fourcc_string(struct printbuf *out, const u32 *fourcc, unsigned char c = val >> (i * 8); /* Print non-control ASCII characters as-is, dot otherwise */ - __pr_char(&output, isascii(c) && isprint(c) ? c : '.'); + __pr_char(out, isascii(c) && isprint(c) ? c : '.'); } - pr_str(&output, *fourcc & BIT(31) ? " big-endian" : " little-endian"); + pr_str(out, *fourcc & BIT(31) ? " big-endian" : " little-endian"); - __pr_char(&output, ' '); - __pr_char(&output, '('); - special_hex_number(&output, *fourcc, sizeof(u32)); - __pr_char(&output, ')'); - printbuf_nul_terminate(&output); + __pr_char(out, ' '); + __pr_char(out, '('); + special_hex_number(out, *fourcc, sizeof(u32)); + __pr_char(out, ')'); - string_spec(out, output_buf, spec); + printbuf_nul_terminate(out); } static noinline_for_stack @@ -2340,7 +2337,8 @@ void pointer(struct printbuf *out, const char *fmt, netdev_bits(out, ptr, fmt); return do_width_precision(out, prev_pos, spec); case '4': - return fourcc_string(out, ptr, spec, fmt); + fourcc_string(out, ptr, fmt); + return do_width_precision(out, prev_pos, spec); case 'a': address_val(out, ptr, fmt); return do_width_precision(out, prev_pos, spec); -- 2.36.0
Powered by blists - more mailing lists