[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v15 1/3] safemath: Add ALIGN_UP_OVF() that checks for {over, unde
From: |
Gao Xiang |
Subject: |
[PATCH v15 1/3] safemath: Add ALIGN_UP_OVF() that checks for {over, under}flow |
Date: |
Tue, 21 May 2024 01:20:57 +0800 |
The following EROFS patch will use this helper to handle overflow
ALIGN_UP() cases.
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Signed-off-by: Gao Xiang <hsiangkao@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