flawopen.com/Simulators/Heap Use-After-Free
kfree() के बाद पॉइंटर शून्य न करने से पैदा होने वाले डैंगलिंग पॉइंटर और लिनक्स कर्नेल रूट विशेषाधिकार अधिग्रहण का विज़ुअल सिमुलेशन।
होटल के कमरा 304 से चेक-आउट करने और चाबी रिसेप्शन पर लौटाने के बाद, अपनी जेब में एक डुप्लीकेट चाबी रखने की कल्पना करें। होटल वह कमरा नए अतिथि को दे देता है। रात में आप डुप्लीकेट चाबी से कमरा खोलकर उसका सामान देख लेते हैं! वह डुप्लीकेट चाबी ही डैंगलिंग पॉइंटर (Dangling Pointer) है।
// Vulnerable cleanup routine
void release_session(struct session_mgr *mgr) {
if (mgr->active_session) {
kfree(mgr->active_session);
// FLAW: mgr->active_session remains dangling!
}
}
// Hardened cleanup routine
void release_session(struct session_mgr *mgr) {
struct user_session *sess;
sess = xchg(&mgr->active_session, NULL);
if (sess) {
memzero_explicit(sess, sizeof(*sess));
kfree(sess);
}
}