overflow: Fix kern-doc markup for functions

Fix the kern-doc markings for several of the overflow helpers and move
their location into the core kernel API documentation, where it belongs
(it's not driver-specific).

Cc: Jonathan Corbet <corbet@lwn.net>
Cc: linux-doc@vger.kernel.org
Cc: linux-hardening@vger.kernel.org
Reviewed-by: Akira Yokosawa <akiyks@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
Kees Cook 2022-09-26 12:45:32 -07:00
parent 9abf2313ad
commit 31970608a6
3 changed files with 22 additions and 25 deletions

View File

@ -118,6 +118,12 @@ Text Searching
CRC and Math Functions in Linux CRC and Math Functions in Linux
=============================== ===============================
Arithmetic Overflow Checking
----------------------------
.. kernel-doc:: include/linux/overflow.h
:internal:
CRC Functions CRC Functions
------------- -------------

View File

@ -107,9 +107,6 @@ Kernel utility functions
.. kernel-doc:: kernel/panic.c .. kernel-doc:: kernel/panic.c
:export: :export:
.. kernel-doc:: include/linux/overflow.h
:internal:
Device Resource Management Device Resource Management
-------------------------- --------------------------

View File

@ -51,8 +51,8 @@ static inline bool __must_check __must_check_overflow(bool overflow)
return unlikely(overflow); return unlikely(overflow);
} }
/** check_add_overflow() - Calculate addition with overflow checking /**
* * check_add_overflow() - Calculate addition with overflow checking
* @a: first addend * @a: first addend
* @b: second addend * @b: second addend
* @d: pointer to store sum * @d: pointer to store sum
@ -66,8 +66,8 @@ static inline bool __must_check __must_check_overflow(bool overflow)
#define check_add_overflow(a, b, d) \ #define check_add_overflow(a, b, d) \
__must_check_overflow(__builtin_add_overflow(a, b, d)) __must_check_overflow(__builtin_add_overflow(a, b, d))
/** check_sub_overflow() - Calculate subtraction with overflow checking /**
* * check_sub_overflow() - Calculate subtraction with overflow checking
* @a: minuend; value to subtract from * @a: minuend; value to subtract from
* @b: subtrahend; value to subtract from @a * @b: subtrahend; value to subtract from @a
* @d: pointer to store difference * @d: pointer to store difference
@ -81,8 +81,8 @@ static inline bool __must_check __must_check_overflow(bool overflow)
#define check_sub_overflow(a, b, d) \ #define check_sub_overflow(a, b, d) \
__must_check_overflow(__builtin_sub_overflow(a, b, d)) __must_check_overflow(__builtin_sub_overflow(a, b, d))
/** check_mul_overflow() - Calculate multiplication with overflow checking /**
* * check_mul_overflow() - Calculate multiplication with overflow checking
* @a: first factor * @a: first factor
* @b: second factor * @b: second factor
* @d: pointer to store product * @d: pointer to store product
@ -96,23 +96,24 @@ static inline bool __must_check __must_check_overflow(bool overflow)
#define check_mul_overflow(a, b, d) \ #define check_mul_overflow(a, b, d) \
__must_check_overflow(__builtin_mul_overflow(a, b, d)) __must_check_overflow(__builtin_mul_overflow(a, b, d))
/** check_shl_overflow() - Calculate a left-shifted value and check overflow /**
* * check_shl_overflow() - Calculate a left-shifted value and check overflow
* @a: Value to be shifted * @a: Value to be shifted
* @s: How many bits left to shift * @s: How many bits left to shift
* @d: Pointer to where to store the result * @d: Pointer to where to store the result
* *
* Computes *@d = (@a << @s) * Computes *@d = (@a << @s)
* *
* Returns true if '*d' cannot hold the result or when 'a << s' doesn't * Returns true if '*@d' cannot hold the result or when '@a << @s' doesn't
* make sense. Example conditions: * make sense. Example conditions:
* - 'a << s' causes bits to be lost when stored in *d.
* - 's' is garbage (e.g. negative) or so large that the result of
* 'a << s' is guaranteed to be 0.
* - 'a' is negative.
* - 'a << s' sets the sign bit, if any, in '*d'.
* *
* '*d' will hold the results of the attempted shift, but is not * - '@a << @s' causes bits to be lost when stored in *@d.
* - '@s' is garbage (e.g. negative) or so large that the result of
* '@a << @s' is guaranteed to be 0.
* - '@a' is negative.
* - '@a << @s' sets the sign bit, if any, in '*@d'.
*
* '*@d' will hold the results of the attempted shift, but is not
* considered "safe for use" if true is returned. * considered "safe for use" if true is returned.
*/ */
#define check_shl_overflow(a, s, d) __must_check_overflow(({ \ #define check_shl_overflow(a, s, d) __must_check_overflow(({ \
@ -129,7 +130,6 @@ static inline bool __must_check __must_check_overflow(bool overflow)
/** /**
* size_mul() - Calculate size_t multiplication with saturation at SIZE_MAX * size_mul() - Calculate size_t multiplication with saturation at SIZE_MAX
*
* @factor1: first factor * @factor1: first factor
* @factor2: second factor * @factor2: second factor
* *
@ -149,7 +149,6 @@ static inline size_t __must_check size_mul(size_t factor1, size_t factor2)
/** /**
* size_add() - Calculate size_t addition with saturation at SIZE_MAX * size_add() - Calculate size_t addition with saturation at SIZE_MAX
*
* @addend1: first addend * @addend1: first addend
* @addend2: second addend * @addend2: second addend
* *
@ -169,7 +168,6 @@ static inline size_t __must_check size_add(size_t addend1, size_t addend2)
/** /**
* size_sub() - Calculate size_t subtraction with saturation at SIZE_MAX * size_sub() - Calculate size_t subtraction with saturation at SIZE_MAX
*
* @minuend: value to subtract from * @minuend: value to subtract from
* @subtrahend: value to subtract from @minuend * @subtrahend: value to subtract from @minuend
* *
@ -192,7 +190,6 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend)
/** /**
* array_size() - Calculate size of 2-dimensional array. * array_size() - Calculate size of 2-dimensional array.
*
* @a: dimension one * @a: dimension one
* @b: dimension two * @b: dimension two
* *
@ -205,7 +202,6 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend)
/** /**
* array3_size() - Calculate size of 3-dimensional array. * array3_size() - Calculate size of 3-dimensional array.
*
* @a: dimension one * @a: dimension one
* @b: dimension two * @b: dimension two
* @c: dimension three * @c: dimension three
@ -220,7 +216,6 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend)
/** /**
* flex_array_size() - Calculate size of a flexible array member * flex_array_size() - Calculate size of a flexible array member
* within an enclosing structure. * within an enclosing structure.
*
* @p: Pointer to the structure. * @p: Pointer to the structure.
* @member: Name of the flexible array member. * @member: Name of the flexible array member.
* @count: Number of elements in the array. * @count: Number of elements in the array.
@ -237,7 +232,6 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend)
/** /**
* struct_size() - Calculate size of structure with trailing flexible array. * struct_size() - Calculate size of structure with trailing flexible array.
*
* @p: Pointer to the structure. * @p: Pointer to the structure.
* @member: Name of the array member. * @member: Name of the array member.
* @count: Number of elements in the array. * @count: Number of elements in the array.