From: Julian Seward Date: Wed, 8 May 2002 01:31:15 +0000 (+0000) Subject: More shmctl() fixes. (Helge Deller) X-Git-Tag: svn/VALGRIND_1_0_3~232 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f1ce22b7388a54f98ad00ae5ddefec52667a0623;p=thirdparty%2Fvalgrind.git More shmctl() fixes. (Helge Deller) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@232 --- diff --git a/vg_syscall_mem.c b/vg_syscall_mem.c index 6a98267188..ea83fbf919 100644 --- a/vg_syscall_mem.c +++ b/vg_syscall_mem.c @@ -1384,19 +1384,18 @@ void VG_(perform_assumed_nonblocking_syscall) ( ThreadId tid ) KERNEL_DO_SYSCALL(tid,res); break; case 24: /* IPCOP_shmctl */ - { - if ( arg3 > 0 ) { - must_be_readable ( tst, "shmctl(buf)", arg3, - sizeof( struct shmid_ds ) ); - - if ( arg2 == SHM_STAT ) - must_be_writable( tst, "shmctl(IPC_STAT,buf)", arg3, - sizeof( struct shmid_ds ) ); - } - - KERNEL_DO_SYSCALL(tid,res); - break; + if ( arg3 ) { + if ( arg2 == SHM_STAT ) + must_be_writable( tst, "shmctl(SHM_STAT,buf)", arg3, + sizeof(struct shmid_ds) ); + else + must_be_readable( tst, "shmctl(SHM_XXXX,buf)", arg3, + sizeof(struct shmid_ds) ); } + KERNEL_DO_SYSCALL(tid,res); + if ( arg3 && !VG_(is_kerror)(res) && res == 0 /*&& arg2 == SHM_STAT*/ ) + make_readable( arg3, sizeof(struct shmid_ds) ); + break; default: VG_(message)(Vg_DebugMsg, "FATAL: unhandled syscall(ipc) %d",