[PATCH] emit a trap for buffer overflow in placement new

Marc Glisse marc.glisse@inria.fr
Mon Dec 4 22:45:00 GMT 2017


On Mon, 4 Dec 2017, Martin Sebor wrote:

> The -Wplacement-new option warns for buffer overflow in placement
> new expressions with objects of constant sizes, but because it's
> implemented completely in the C++ front end it misses the more
> interesting non-constant sizes.
>
> The attached patch instruments both forms of operator placement
> new to emit a trap when __builtin_object_size() determines that
> the pointer points to an object less than the specified number
> of bytes.  This is done only when _FORTIFY_SOURCE is defined
> to a non-zero value.  This makes it possible to prevent buffer
> overflow in most of the same cases as in built-ins like strcpy,
> though without warnings when the size is nor a C++ constant
> integer expression.
>
> On x86_64-linux it passes testing with no apparent regressions.
> Can anyone think of problems with this solution?  If not, given
> its simplicity, would it be appropriate even at this stage?

AFAIK, one can call this operator new manually on any pointer, including 
one-past-the-end pointers and null pointers. It is only with new 
expressions that the limitation comes in (because it runs a constructor 
afterwards). Not that people often do that...

-- 
Marc Glisse



More information about the Libstdc++ mailing list