From: Jonathan Wakely Date: Tue, 12 May 2020 08:54:44 +0000 (+0100) Subject: libstdc++: Fix incorrect size calculation in PMR resource (PR 94906) X-Git-Tag: misc/first-auto-changelog-10~49 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dc103060c18656affaecfdd57faa4e0237dadcd3;p=thirdparty%2Fgcc.git libstdc++: Fix incorrect size calculation in PMR resource (PR 94906) Calculating the size of a chunk being returned to the upstream allocator was done with a 32-bit type, so it wrapped if the chunk was 4GB or larger. I don't know how to test this without allocating 4GB, so there's no test in the testsuite. It has been tested manually of course. Backport from mainline 2020-05-04 Jonathan Wakely PR libstdc++/94906 * src/c++17/memory_resource.cc (monotonic_buffer_resource::_Chunk::release): Use size_t for shift operands. --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index b37c19ace3b7..d9c2ecf1ed47 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,13 @@ 2020-05-12 Jonathan Wakely + Backport from mainline + 2020-05-04 Jonathan Wakely + + PR libstdc++/94906 + * src/c++17/memory_resource.cc + (monotonic_buffer_resource::_Chunk::release): Use size_t for shift + operands. + Backport from mainline 2020-05-03 Jonathan Wakely diff --git a/libstdc++-v3/src/c++17/memory_resource.cc b/libstdc++-v3/src/c++17/memory_resource.cc index 56a87844da03..70c39881fa1b 100644 --- a/libstdc++-v3/src/c++17/memory_resource.cc +++ b/libstdc++-v3/src/c++17/memory_resource.cc @@ -228,8 +228,8 @@ namespace pmr if (__ch->_M_canary != (__ch->_M_size | __ch->_M_align)) return; // buffer overflow detected! - size_t __size = (1u << __ch->_M_size); - size_t __align = (1u << __ch->_M_align); + size_t __size = (size_t)1 << __ch->_M_size; + size_t __align = (size_t)1 << __ch->_M_align; void* __start = (char*)(__ch + 1) - __size; __r->deallocate(__start, __size, __align); }