[Mlir-commits] [mlir] [mlir] Fix correct memset range in `OwningMemRef` zero-init (PR #158200)
Ryan Kim
llvmlistbot at llvm.org
Fri Sep 12 06:54:32 PDT 2025
https://github.com/chokobole updated https://github.com/llvm/llvm-project/pull/158200
>From 6827340d4bc4a9cba9c9c6e234eba5a1b213b85b Mon Sep 17 00:00:00 2001
From: Ryan Kim <chokobole33 at gmail.com>
Date: Fri, 12 Sep 2025 14:12:05 +0900
Subject: [PATCH] [mlir] Fix correct memset range in OwningMemRef zero-init
`OwningMemRef` previously called `memset()` on `descriptor.data` with
`size + desiredAlignment`, which could write past the allocated region
since `data != alignedData`.
---
mlir/include/mlir/ExecutionEngine/MemRefUtils.h | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/mlir/include/mlir/ExecutionEngine/MemRefUtils.h b/mlir/include/mlir/ExecutionEngine/MemRefUtils.h
index d66d757cb7a8e..e9471731afe13 100644
--- a/mlir/include/mlir/ExecutionEngine/MemRefUtils.h
+++ b/mlir/include/mlir/ExecutionEngine/MemRefUtils.h
@@ -164,19 +164,17 @@ class OwningMemRef {
int64_t nElements = 1;
for (int64_t s : shapeAlloc)
nElements *= s;
- auto [data, alignedData] =
+ auto [allocatedPtr, alignedData] =
detail::allocAligned<T>(nElements, allocFun, alignment);
- descriptor = detail::makeStridedMemRefDescriptor<Rank>(data, alignedData,
- shape, shapeAlloc);
+ descriptor = detail::makeStridedMemRefDescriptor<Rank>(
+ allocatedPtr, alignedData, shape, shapeAlloc);
if (init) {
for (StridedMemrefIterator<T, Rank> it = descriptor.begin(),
end = descriptor.end();
it != end; ++it)
init(*it, it.getIndices());
} else {
- memset(descriptor.data, 0,
- nElements * sizeof(T) +
- alignment.value_or(detail::nextPowerOf2(sizeof(T))));
+ memset(alignedData, 0, nElements * sizeof(T));
}
}
/// Take ownership of an existing descriptor with a custom deleter.
More information about the Mlir-commits
mailing list