[LLVMbugs] [Bug 5097] New: Buffer overflow in LoopSimplify
    bugzilla-daemon at cs.uiuc.edu 
    bugzilla-daemon at cs.uiuc.edu
       
    Tue Sep 29 04:44:39 PDT 2009
    
    
  
http://llvm.org/bugs/show_bug.cgi?id=5097
           Summary: Buffer overflow in LoopSimplify
           Product: new-bugs
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: baldrick at free.fr
                CC: llvmbugs at cs.uiuc.edu
Created an attachment (id=3583)
 --> (http://llvm.org/bugs/attachment.cgi?id=3583)
testcase .ll
Reproduce by building with expensive checking and doing:
  opt bugpoint-reduced-simplified.ll -loop-unswitch -loopsimplify -iv-users
The problem seems to be that in lines 275...282 of LoopSimplify.cpp
      const std::vector<DomTreeNodeBase<BasicBlock> *> &Children =
        Node->getChildren();
      for (unsigned k = 0, g = Children.size(); k != g; ++k) {
        DT->changeImmediateDominator(Children[k], Node->getIDom());
        if (DF) DF->changeImmediateDominator(Children[k]->getBlock(),
                                             Node->getIDom()->getBlock(),
                                             DT);
      }
the code inside the loop mutates the Node->getChildren() vector.
Since Children is a reference to this vector, it can change as the
loop is executed.  In the testcase Children has length 1, so the
loop is entered.  It looks like the first line resizes Children to
be empty.  Then the second line accesses off the end of Children.
-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
    
    
More information about the llvm-bugs
mailing list