Bug #2535
closedGlobalRoutingHelper - CalculateAllPossibleRoutes SEGFAULTS - fix included
100%
Description
When calling ndn::GlobalRoutingHelper::CalculateAllPossibleRoutes() I did sometimes receive SEGFAULTS or similar crashes (e.g., 300 nodes created with BRITE).
After using valgrind and gdb I identified the problem:
https://github.com/named-data/ndnSIM/blob/master/helper/ndn-global-routing-helper.cpp#L316-L320
A vector is initialized with .size() elements, though in the for loop the index "faceNumber" is used, which is incremented BEFORE it is used.
Therefore, for the last face in this list, you create an invalid write.
The fix is rather easy: do not increment faceNumber until the end of the loop. I've attached a .diff file (and the full file) to this bug report.
Files
Updated by Spyros Mastorakis almost 10 years ago
- Category changed from heper to helpers
- Status changed from New to Code review
- Assignee set to Spyros Mastorakis
- % Done changed from 90 to 100
Originally reported by Christian Kreuzberger.
Updated by Alex Afanasyev almost 10 years ago
Christian, can you post a sample scenario to verify expose the problem (and to verify that it was fixed)?
Updated by Christian Kreuzberger almost 10 years ago
- File ndn-routing-crash.cc ndn-routing-crash.cc added
Here is an example (attached). It has something to do with the amount of faces you have on a certain node, hence the "arbitrary" construct of p2p links.
Updated by Spyros Mastorakis almost 10 years ago
Christian thank you very much for the sample scenario.
@Alex, I confirm that before the fix on Ubuntu 14.04 I got a segmentation fault. After the patch, the scenario run successfully.
On OS X 10.10, I did not test before the patch. I tested after the patch, though, and the scenario run successfully.
Updated by Spyros Mastorakis almost 10 years ago
- Status changed from Code review to Closed