From: Eric Botcazou Date: Mon, 9 Jan 2012 18:22:35 +0000 (+0000) Subject: sol2-unwind.h (sparc64_is_sighandler): Check that the purported sigacthandler address... X-Git-Tag: releases/gcc-4.5.4~281 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5f5d83a3f03056f336e53cee64a9b9363282159;p=thirdparty%2Fgcc.git sol2-unwind.h (sparc64_is_sighandler): Check that the purported sigacthandler address isn't null before dereferencing it. * config/sparc/sol2-unwind.h (sparc64_is_sighandler): Check that the purported sigacthandler address isn't null before dereferencing it. (sparc_is_sighandler): Likewise. From-SVN: r183022 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6a8595c1d5f2..66cf0914da4f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-01-09 Eric Botcazou + + * config/sparc/sol2-unwind.h (sparc64_is_sighandler): Check that the + purported sigacthandler address isn't null before dereferencing it. + (sparc_is_sighandler): Likewise. + 2012-01-06 Richard Sandiford PR middle-end/48660 diff --git a/gcc/config/sparc/sol2-unwind.h b/gcc/config/sparc/sol2-unwind.h index aa1358dfae58..6eb070cff566 100644 --- a/gcc/config/sparc/sol2-unwind.h +++ b/gcc/config/sparc/sol2-unwind.h @@ -123,10 +123,10 @@ sparc64_fallback_frame_state (struct _Unwind_Context *context, /* This matches the call_user_handler pattern for Solaris 10. There are 2 cases so we look for the return address of the caller's caller frame in order to do more pattern matching. */ - unsigned int sah_pattern - = *(unsigned int *)(*(unsigned long *)(this_cfa + 176 + 15*8) - 4); + unsigned long sah_address + = *(unsigned long *)(this_cfa + 176 + 15*8); - if (sah_pattern == 0x92100019) + if (sah_address && *(unsigned int *)(sah_address - 4) == 0x92100019) /* This is the same setup as for Solaris 9, see below. */ regs_off = 176 + 176 + 176 + 304; else @@ -371,10 +371,10 @@ sparc_fallback_frame_state (struct _Unwind_Context *context, /* This matches the call_user_handler pattern for Solaris 10. There are 2 cases so we look for the return address of the caller's caller frame in order to do more pattern matching. */ - unsigned int sah_pattern - = *(unsigned int *)(*(unsigned int *)(this_cfa + 96 + 15*4) - 4); + unsigned int sah_address + = *(unsigned int *)(this_cfa + 96 + 15*4); - if (sah_pattern == 0x92100019) + if (sah_address && *(unsigned int *)(sah_address - 4) == 0x92100019) /* This is the same setup as for Solaris 9, see below. */ regs_off = 96 + 96 + 96 + 160; else