aboutsummaryrefslogtreecommitdiffstats
path: root/module/zcommon
diff options
context:
space:
mode:
authorchenqiuhao1997 <[email protected]>2024-05-10 23:47:21 +0800
committerGitHub <[email protected]>2024-05-10 08:47:21 -0700
commit41ae864b69991f7e13d5171f54a42c721b297233 (patch)
tree7a32e47472b3047f5ca8b28d3924bb75498c1fcf /module/zcommon
parent1ede0c716beeee4a720ff5c361121021555d7e3c (diff)
Replace P2ALIGN with P2ALIGN_TYPED and delete P2ALIGN.
In P2ALIGN, the result would be incorrect when align is unsigned integer and x is larger than max value of the type of align. In that case, -(align) would be a positive integer, which means high bits would be zero and finally stay zero after '&' when align is converted to a larger integer type. Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Youzhong Yang <[email protected]> Signed-off-by: Qiuhao Chen <[email protected]> Closes #15940
Diffstat (limited to 'module/zcommon')
-rw-r--r--module/zcommon/zfs_fletcher.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/module/zcommon/zfs_fletcher.c b/module/zcommon/zfs_fletcher.c
index 619ddef02..74b8c2a47 100644
--- a/module/zcommon/zfs_fletcher.c
+++ b/module/zcommon/zfs_fletcher.c
@@ -471,7 +471,8 @@ fletcher_4_native(const void *buf, uint64_t size,
const void *ctx_template, zio_cksum_t *zcp)
{
(void) ctx_template;
- const uint64_t p2size = P2ALIGN(size, FLETCHER_MIN_SIMD_SIZE);
+ const uint64_t p2size = P2ALIGN_TYPED(size, FLETCHER_MIN_SIMD_SIZE,
+ uint64_t);
ASSERT(IS_P2ALIGNED(size, sizeof (uint32_t)));
@@ -519,7 +520,8 @@ fletcher_4_byteswap(const void *buf, uint64_t size,
const void *ctx_template, zio_cksum_t *zcp)
{
(void) ctx_template;
- const uint64_t p2size = P2ALIGN(size, FLETCHER_MIN_SIMD_SIZE);
+ const uint64_t p2size = P2ALIGN_TYPED(size, FLETCHER_MIN_SIMD_SIZE,
+ uint64_t);
ASSERT(IS_P2ALIGNED(size, sizeof (uint32_t)));
@@ -878,7 +880,7 @@ abd_fletcher_4_iter(void *data, size_t size, void *private)
fletcher_4_ctx_t *ctx = cdp->acd_ctx;
fletcher_4_ops_t *ops = (fletcher_4_ops_t *)cdp->acd_private;
boolean_t native = cdp->acd_byteorder == ZIO_CHECKSUM_NATIVE;
- uint64_t asize = P2ALIGN(size, FLETCHER_MIN_SIMD_SIZE);
+ uint64_t asize = P2ALIGN_TYPED(size, FLETCHER_MIN_SIMD_SIZE, uint64_t);
ASSERT(IS_P2ALIGNED(size, sizeof (uint32_t)));