This is an archive of the discontinued LLVM Phabricator instance.

UBSan: Teach isDerivedFromAtOffset and findBaseAtOffset about vbases
ClosedPublic

Authored by majnemer on Nov 1 2014, 6:46 PM.

Details

Summary

When the virtual_mask is set, offset_flags >> __offset_shift yields
an offset into the vtable. Dereferencing this vtable slot gets us the
vbase offset.

Adjust a test case to verify that this, in fact, works.

Diff Detail

Repository
rL LLVM

Event Timeline

majnemer updated this revision to Diff 15673.Nov 1 2014, 6:46 PM
majnemer retitled this revision from to UBSan: Teach isDerivedFromAtOffset and findBaseAtOffset about vbases.
majnemer updated this object.
majnemer added reviewers: rsmith, samsonov.
majnemer added a subscriber: Unknown Object (MLST).
samsonov accepted this revision.Nov 5 2014, 7:24 PM
samsonov edited edge metadata.

LGTM. Thanks for doing this!

lib/ubsan/ubsan_type_hash.cc
143 ↗(On Diff #15673)

Can this be

sptr VTable = *reinterpret_cast<sptr *>(Object);
OffsetHere = *reinterpret_cast<sptr *>(VTable + OffsetHere);

?

This revision is now accepted and ready to land.Nov 5 2014, 7:24 PM
majnemer closed this revision.Nov 6 2014, 1:06 AM
majnemer updated this revision to Diff 15843.

Closed by commit rL221445 (authored by @majnemer).