Skip to content

Commit fc0cd43

Browse files
thurstondLukacma
authored andcommitted
[flang][mlir] Fix-forward heap use-after-free in llvm#155348 (llvm#164712)
`mapInfoOp.getMembers()` on line 258 is use-after-free, because cloneModifyAndErase (line 255) erased `mapInfoOp`. Fix the issue by replacing subsequent `mapInfoOp` usages with `clonedOp`. Similarly, update `memberMapInfoOp` to avoid subsequent use-after-free.
1 parent eaaee18 commit fc0cd43

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

mlir/lib/Dialect/OpenMP/Transforms/OpenMPOffloadPrivatizationPrepare.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,14 +252,17 @@ class PrepareForOMPOffloadPrivatizationPass
252252
// variable, rewrite all the uses of the original variable with
253253
// the heap-allocated variable.
254254
rewriter.setInsertionPoint(targetOp);
255-
rewriter.setInsertionPoint(cloneModifyAndErase(mapInfoOp));
255+
mapInfoOp = cast<omp::MapInfoOp>(cloneModifyAndErase(mapInfoOp));
256+
rewriter.setInsertionPoint(mapInfoOp);
256257

257258
// Fix any members that may use varPtr to now use heapMem
258259
for (auto member : mapInfoOp.getMembers()) {
259260
auto memberMapInfoOp = cast<omp::MapInfoOp>(member.getDefiningOp());
260261
if (!usesVarPtr(memberMapInfoOp))
261262
continue;
262-
rewriter.setInsertionPoint(cloneModifyAndErase(memberMapInfoOp));
263+
memberMapInfoOp =
264+
cast<omp::MapInfoOp>(cloneModifyAndErase(memberMapInfoOp));
265+
rewriter.setInsertionPoint(memberMapInfoOp);
263266

264267
if (memberMapInfoOp.getVarPtrPtr()) {
265268
Operation *varPtrPtrdefOp =

0 commit comments

Comments
 (0)