mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-06 14:05:39 +00:00
e1be43d9b5
In order to perform more open-coded replacements of common allocation size arithmetic, the kernel needs saturating (SIZE_MAX) helpers for multiplication, addition, and subtraction. For example, it is common in allocators, especially on realloc, to add to an existing size: p = krealloc(map->patch, sizeof(struct reg_sequence) * (map->patch_regs + num_regs), GFP_KERNEL); There is no existing saturating replacement for this calculation, and just leaving the addition open coded inside array_size() could potentially overflow as well. For example, an overflow in an expression for a size_t argument might wrap to zero: array_size(anything, something_at_size_max + 1) == 0 Introduce size_mul(), size_add(), and size_sub() helpers that implicitly promote arguments to size_t and saturated calculations for use in allocations. With these helpers it is also possible to redefine array_size(), array3_size(), flex_array_size(), and struct_size() in terms of the new helpers. As with the check_*_overflow() helpers, the new helpers use __must_check, though what is really desired is a way to make sure that assignment is only to a size_t lvalue. Without this, it's still possible to introduce overflow/underflow via type conversion (i.e. from size_t to int). Enforcing this will currently need to be left to static analysis or future use of -Wconversion. Additionally update the overflow unit tests to force runtime evaluation for the pathological cases. Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: Gustavo A. R. Silva <gustavoars@kernel.org> Cc: Nathan Chancellor <nathan@kernel.org> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Nick Desaulniers <ndesaulniers@google.com> Cc: Leon Romanovsky <leon@kernel.org> Cc: Keith Busch <kbusch@kernel.org> Cc: Len Baker <len.baker@gmx.com> Signed-off-by: Kees Cook <keescook@chromium.org> |
||
---|---|---|
.. | ||
1.Intro.rst | ||
2.Process.rst | ||
3.Early-stage.rst | ||
4.Coding.rst | ||
5.Posting.rst | ||
6.Followthrough.rst | ||
7.AdvancedTopics.rst | ||
8.Conclusion.rst | ||
adding-syscalls.rst | ||
applying-patches.rst | ||
botching-up-ioctls.rst | ||
changes.rst | ||
clang-format.rst | ||
code-of-conduct-interpretation.rst | ||
code-of-conduct.rst | ||
coding-style.rst | ||
deprecated.rst | ||
development-process.rst | ||
email-clients.rst | ||
embargoed-hardware-issues.rst | ||
howto.rst | ||
index.rst | ||
kernel-docs.rst | ||
kernel-driver-statement.rst | ||
kernel-enforcement-statement.rst | ||
license-rules.rst | ||
magic-number.rst | ||
maintainer-handbooks.rst | ||
maintainer-pgp-guide.rst | ||
maintainer-tip.rst | ||
maintainers.rst | ||
management-style.rst | ||
programming-language.rst | ||
stable-api-nonsense.rst | ||
stable-kernel-rules.rst | ||
submit-checklist.rst | ||
submitting-drivers.rst | ||
submitting-patches.rst | ||
volatile-considered-harmful.rst |