Patchwork [google,gcc-4_7,integration] Scribble on destructed strings to catch invalid accesses.

login
register
mail settings
Submitter Paul Pluzhnikov
Date Jan. 24, 2013, 6:23 a.m.
Message ID <ye6qy5fjcd5y.fsf@elbrus2.mtv.corp.google.com>
Download mbox | patch
Permalink /patch/215258/
State New
Headers show

Comments

Paul Pluzhnikov - Jan. 24, 2013, 6:23 a.m.
This patch allows us to catch use of destructed strings.

Google ref: b/5430313

Ok for google/gcc-4_7 and google/integration?

--
Paul Pluzhnikov
Diego Novillo - Jan. 24, 2013, 12:08 p.m.
On Thu, Jan 24, 2013 at 1:23 AM, Paul Pluzhnikov <ppluzhnikov@google.com> wrote:
> This patch allows us to catch use of destructed strings.
>
> Google ref: b/5430313
>
> Ok for google/gcc-4_7 and google/integration?

OK.


Diego.
Marc Glisse - Jan. 24, 2013, 7:03 p.m.
On Wed, 23 Jan 2013, Paul Pluzhnikov wrote:

> This patch allows us to catch use of destructed strings.

Hello,

while a number of the google debug patches are just cheaper versions (that 
don't break the ABI) of what libstdc++'s debug mode provides, this 
overwriting of classes on destruction is not as obviously redundant, and I 
wonder whether something like it (done consistently for many classes) 
could go to trunk...

> Google ref: b/5430313
>
> Ok for google/gcc-4_7 and google/integration?
>
> --
> Paul Pluzhnikov
>
>
>
> Index: libstdc++-v3/include/ext/sso_string_base.h
> ===================================================================
> --- libstdc++-v3/include/ext/sso_string_base.h	(revision 195417)
> +++ libstdc++-v3/include/ext/sso_string_base.h	(working copy)
> @@ -215,7 +215,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> 			  const _Alloc& __a);
>
>       ~__sso_string_base()
> -      { _M_dispose(); }
> +      {
> +          _M_dispose();
> +#ifdef __google_stl_debug_dangling_string
> +          __builtin_memset(this, 0xcd, sizeof(*this));
> +#endif
> +      }
>
>       _CharT_alloc_type&
>       _M_get_allocator()
Jonathan Wakely - Jan. 25, 2013, 12:15 a.m.
On 24 January 2013 19:03, Marc Glisse wrote:
> On Wed, 23 Jan 2013, Paul Pluzhnikov wrote:
>
>> This patch allows us to catch use of destructed strings.
>
>
> Hello,
>
> while a number of the google debug patches are just cheaper versions (that
> don't break the ABI) of what libstdc++'s debug mode provides, this
> overwriting of classes on destruction is not as obviously redundant, and I
> wonder whether something like it (done consistently for many classes) could
> go to trunk...

Thanks for pointing this out, Marc.

This does look like something that could be included in debug mode,
but probably not until we're back in Stage 1.  Please either put it in
Bugzilla (and CC me) or if you're diligent enough to remember please
email us again during Stage 1  :-)

Googlers, please include the libstdc++ list on patches to the
libstdc++ code, even if it's only to a google branch. I don't read
gcc-patches but am still interested in the changes you make to the
code on your branch.
Diego Novillo - Jan. 25, 2013, 1:48 p.m.
On Thu, Jan 24, 2013 at 7:15 PM, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:

> Googlers, please include the libstdc++ list on patches to the
> libstdc++ code, even if it's only to a google branch. I don't read
> gcc-patches but am still interested in the changes you make to the
> code on your branch.

Thanks Jonathan.  We'll do.


Diego.
Paul Pluzhnikov - Jan. 25, 2013, 2:51 p.m.
On Thu, Jan 24, 2013 at 4:15 PM, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:

> This does look like something that could be included in debug mode,
> but probably not until we're back in Stage 1.  Please either put it in
> Bugzilla (and CC me) or if you're diligent enough to remember please
> email us again during Stage 1  :-)

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56109

> Googlers, please include the libstdc++ list on patches to the
> libstdc++ code, even if it's only to a google branch.

Will do. Sorry about that.

Thanks,

Patch

Index: libstdc++-v3/include/ext/sso_string_base.h
===================================================================
--- libstdc++-v3/include/ext/sso_string_base.h	(revision 195417)
+++ libstdc++-v3/include/ext/sso_string_base.h	(working copy)
@@ -215,7 +215,12 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 			  const _Alloc& __a);
 
       ~__sso_string_base()
-      { _M_dispose(); }
+      {
+          _M_dispose();
+#ifdef __google_stl_debug_dangling_string
+          __builtin_memset(this, 0xcd, sizeof(*this));
+#endif
+      }
 
       _CharT_alloc_type&
       _M_get_allocator()