summaryrefslogtreecommitdiff
path: root/usr
diff options
context:
space:
mode:
authorRasmus Villemoes <linux@rasmusvillemoes.dk>2016-01-15 16:58:44 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2016-01-16 11:17:27 -0800
commit4d72ba014b4b0913f448ccaaaa2e8b39c54e3738 (patch)
treef53eee9fda200cf9d6dda00343c3a6dcf76eb526 /usr
parent1c7a8e622e84c9164dd665f5ad4879eac71bdc1e (diff)
downloadlwn-4d72ba014b4b0913f448ccaaaa2e8b39c54e3738.tar.gz
lwn-4d72ba014b4b0913f448ccaaaa2e8b39c54e3738.zip
lib/vsprintf.c: warn about too large precisions and field widths
The field width is overloaded to pass some extra information for some %p extensions (e.g. #bits for %pb). But we might silently truncate the passed value when we stash it in struct printf_spec (see e.g. "lib/vsprintf.c: expand field_width to 24 bits"). Hopefully 23 value bits should now be enough for everybody, but if not, let's make some noise. Do the same for the precision. In both cases, clamping seems more sensible than truncating. While, according to POSIX, "A negative precision is taken as if the precision were omitted.", the kernel's printf has always treated that case as if the precision was 0, so we use that as lower bound. For the field width, the smallest representable value is actually -(1<<23), but a negative field width means 'set the LEFT flag and use the absolute value', so we want the absolute value to fit. Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: Al Viro <viro@ZenIV.linux.org.uk> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Joe Perches <joe@perches.com> Cc: Kees Cook <keescook@chromium.org> Cc: Maurizio Lombardi <mlombard@redhat.com> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'usr')
0 files changed, 0 insertions, 0 deletions