This is an archive of the discontinued LLVM Phabricator instance.

[scudo] Application & platform compatibility changes
ClosedPublic

Authored by cryptoad on Aug 15 2017, 9:55 AM.

Details

Summary

This patch changes a few (small) things around for compatibility purposes for
the current Android & Fuchsia work:

  • realloc'ing some memory that was not allocated with malloc, calloc or realloc, while UB according to http://pubs.opengroup.org/onlinepubs/009695399/functions/realloc.html is more common that one would think. We now only check this if DeallocationTypeMismatch is set; change the "mismatch" error messages to be more homogeneous;
  • some sketchily written but widely used libraries expect a call to realloc to copy the usable size of the old chunk to the new one instead of the requested size. We have to begrundingly abide by this de-facto standard. This doesn't seem to impact security either way, unless someone comes up with something we didn't think about;
  • the CRC32 intrinsics for 64-bit take a 64-bit first argument. This is misleading as the upper 32 bits end up being ignored. This was also raising -Wconversion errors. Change things to take a u32 as first argument. This also means we were (and are) only using 32 bits of the Cookie - not a big thing, but worth mentioning.
  • Includes-wise: prefer stddef.h to cstddef, move scudo_flags.h where it is actually needed.
  • Add tests for the memalign-realloc case, and the realloc-usable-size one.

(Edited typos)

Event Timeline

cryptoad created this revision.Aug 15 2017, 9:55 AM
cryptoad edited the summary of this revision. (Show Details)Aug 15 2017, 10:36 AM
alekseyshl accepted this revision.Aug 15 2017, 1:54 PM

What are these libraries? Can you mention some examples here?

This revision is now accepted and ready to land.Aug 15 2017, 1:54 PM
cryptoad closed this revision.Aug 16 2017, 9:41 AM