The following EROFS patch will use this helper to handle overflow ALIGN_UP() cases.
Reviewed-by: Daniel Kiper <daniel.ki...@oracle.com> Signed-off-by: Gao Xiang <hsiang...@linux.alibaba.com> --- include/grub/safemath.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/include/grub/safemath.h b/include/grub/safemath.h index fbd9b5925..bb8a5b39c 100644 --- a/include/grub/safemath.h +++ b/include/grub/safemath.h @@ -32,6 +32,22 @@ #define grub_cast(a, res) grub_add ((a), 0, (res)) +/* + * It's caller's responsibility that `align` should not equal to 0 and + * it must be a power of 2. + */ +#define ALIGN_UP_OVF(v, align, res) \ +({ \ + bool __failed; \ + typeof(v) __a = ((typeof(v))(align) - 1); \ + \ + __failed = grub_add (v, __a, res); \ + if (__failed == false) \ + { \ + *(res) &= ~__a; \ + } \ +__failed;}) + #else #error gcc 5.1 or newer or clang 8.0 or newer is required #endif -- 2.39.3 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel