From 26207e6d5a9560cf64ecbe4e53c360ab0ec219fb Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Sat, 27 Apr 2002 02:28:19 +0000 Subject: [PATCH] CDROM ioctls. (Lionel Ulmer) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@163 --- coregrind/vg_unsafe.h | 2 +- vg_syscall_mem.c | 39 ++++++++++++++++++++++++++++++++++++++- vg_unsafe.h | 2 +- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/coregrind/vg_unsafe.h b/coregrind/vg_unsafe.h index 6e362ad230..bbc417d98f 100644 --- a/coregrind/vg_unsafe.h +++ b/coregrind/vg_unsafe.h @@ -54,7 +54,7 @@ #include /* for the SG_* ioctls */ #include /* for struct sched_param */ #include /* for struct __sysctl_args */ - +#include /* for cd-rom ioctls */ #define __USE_LARGEFILE64 #include /* for struct stat */ diff --git a/vg_syscall_mem.c b/vg_syscall_mem.c index 931dec5add..f3b7052f8a 100644 --- a/vg_syscall_mem.c +++ b/vg_syscall_mem.c @@ -1718,7 +1718,44 @@ void VG_(perform_assumed_nonblocking_syscall) ( ThreadId tid ) if(!VG_(is_kerror) && res == 0) make_readable(arg3, sizeof(unsigned long)); break; - + + /* CD ROM stuff (??) */ + case CDROMSUBCHNL: + must_be_readable(tst, "ioctl(CDROMSUBCHNL (cdsc_format, char))", + (int) &(((struct cdrom_subchnl *) arg3)->cdsc_format), + sizeof(((struct cdrom_subchnl *) arg3)->cdsc_format)); + must_be_writable(tst, "ioctl(CDROMSUBCHNL)", arg3, + sizeof(struct cdrom_subchnl)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct cdrom_subchnl)); + break; + case CDROMREADTOCHDR: + must_be_writable(tst, "ioctl(CDROMREADTOCHDR)", arg3, + sizeof(struct cdrom_tochdr)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct cdrom_tochdr)); + break; + case CDROMREADTOCENTRY: + must_be_readable(tst, "ioctl(CDROMREADTOCENTRY (cdte_format, char))", + (int) &(((struct cdrom_tocentry *) arg3)->cdte_format), + sizeof(((struct cdrom_tocentry *) arg3)->cdte_format)); + must_be_readable(tst, "ioctl(CDROMREADTOCENTRY (cdte_track, char))", + (int) &(((struct cdrom_tocentry *) arg3)->cdte_track), + sizeof(((struct cdrom_tocentry *) arg3)->cdte_track)); + must_be_writable(tst, "ioctl(CDROMREADTOCENTRY)", arg3, + sizeof(struct cdrom_tocentry)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct cdrom_tochdr)); + break; + case CDROMPLAYMSF: + must_be_readable(tst, "ioctl(CDROMPLAYMSF)", arg3, + sizeof(struct cdrom_msf)); + KERNEL_DO_SYSCALL(tid,res); + break; + /* We don't have any specific information on it, so try to do something reasonable based on direction and size bits. The encoding scheme is described in diff --git a/vg_unsafe.h b/vg_unsafe.h index 6e362ad230..bbc417d98f 100644 --- a/vg_unsafe.h +++ b/vg_unsafe.h @@ -54,7 +54,7 @@ #include /* for the SG_* ioctls */ #include /* for struct sched_param */ #include /* for struct __sysctl_args */ - +#include /* for cd-rom ioctls */ #define __USE_LARGEFILE64 #include /* for struct stat */ -- 2.47.3