|
From: <sv...@va...> - 2005-08-10 11:33:21
|
Author: dirk
Date: 2005-08-10 12:33:18 +0100 (Wed, 10 Aug 2005)
New Revision: 4365
Log:
Check the fields of the new structure passed to sigaction individually
and only check sa_restorer if the SA_RESTORER flag is set.
Modified:
branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-generic.c
branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-x86-linux.c
Modified: branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-generi=
c.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-generic.c 20=
05-08-10 11:32:41 UTC (rev 4364)
+++ branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-generic.c 20=
05-08-10 11:33:18 UTC (rev 4365)
@@ -5374,8 +5374,14 @@
int, signum, const struct sigaction *, act,
struct sigaction *, oldact, vki_size_t, sigsetsize);
=20
- if (ARG2 !=3D 0)
- PRE_MEM_READ( "rt_sigaction(act)", ARG2, sizeof(struct vki_sigacti=
on));
+ if (ARG2 !=3D 0) {
+ struct vki_sigaction *sa =3D (struct vki_sigaction *)ARG2;
+ PRE_MEM_READ( "rt_sigaction(act->sa_handler)", (Addr)&sa->ksa_hand=
ler, sizeof(sa->ksa_handler));
+ PRE_MEM_READ( "rt_sigaction(act->sa_mask)", (Addr)&sa->sa_mask, si=
zeof(sa->sa_mask));
+ PRE_MEM_READ( "rt_sigaction(act->sa_flags)", (Addr)&sa->sa_flags, =
sizeof(sa->sa_flags));
+ if (sa->sa_flags & VKI_SA_RESTORER)
+ PRE_MEM_READ( "rt_sigaction(act->sa_restorer)", (Addr)&sa->sa_r=
estorer, sizeof(sa->sa_restorer));
+ }
if (ARG3 !=3D 0)
PRE_MEM_WRITE( "rt_sigaction(oldact)", ARG3, sizeof(struct vki_sig=
action));
=20
Modified: branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-x86-li=
nux.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-x86-linux.c =
2005-08-10 11:32:41 UTC (rev 4364)
+++ branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-x86-linux.c =
2005-08-10 11:33:18 UTC (rev 4365)
@@ -1871,8 +1871,14 @@
=20
newp =3D oldp =3D NULL;
=20
- if (ARG2 !=3D 0)
- PRE_MEM_READ( "sigaction(act)", ARG2, sizeof(struct vki_old_sigact=
ion));
+ if (ARG2 !=3D 0) {
+ struct vki_old_sigaction *sa =3D (struct vki_old_sigaction *)ARG2;
+ PRE_MEM_READ( "rt_sigaction(act->sa_handler)", (Addr)&sa->ksa_hand=
ler, sizeof(sa->ksa_handler));
+ PRE_MEM_READ( "rt_sigaction(act->sa_mask)", (Addr)&sa->sa_mask, si=
zeof(sa->sa_mask));
+ PRE_MEM_READ( "rt_sigaction(act->sa_flags)", (Addr)&sa->sa_flags, =
sizeof(sa->sa_flags));
+ if (sa->sa_flags & VKI_SA_RESTORER)
+ PRE_MEM_READ( "rt_sigaction(act->sa_restorer)", (Addr)&sa->sa_r=
estorer, sizeof(sa->sa_restorer));
+ }
=20
if (ARG3 !=3D 0) {
PRE_MEM_WRITE( "sigaction(oldact)", ARG3, sizeof(struct vki_old_si=
gaction));
|