summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-05-21 11:40:16 +0000
committerkib <kib@FreeBSD.org>2013-05-21 11:40:16 +0000
commitad28c683142ae2c850f4fa327d462db99843dbe7 (patch)
tree57b376b8c9845c4f4394f71807a46f0436bd790d /sys/compat
parente68d3a11b7e0873437e0c75a7a936aa2cf260ac9 (diff)
downloadFreeBSD-src-ad28c683142ae2c850f4fa327d462db99843dbe7.zip
FreeBSD-src-ad28c683142ae2c850f4fa327d462db99843dbe7.tar.gz
Fix the wait6(2) on 32bit architectures and for the compat32, by using
the right type for the argument in syscalls.master. Also fix the posix_fallocate(2) and posix_fadvise(2) compat32 syscalls on the architectures which require padding of the 64bit argument. Noted and reviewed by: jhb Pointy hat to: kib MFC after: 1 week
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/freebsd32/freebsd32_misc.c4
-rw-r--r--sys/compat/freebsd32/syscalls.master21
2 files changed, 21 insertions, 4 deletions
diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c
index 934a32d..3a266b1 100644
--- a/sys/compat/freebsd32/freebsd32_misc.c
+++ b/sys/compat/freebsd32/freebsd32_misc.c
@@ -198,8 +198,8 @@ freebsd32_wait6(struct thread *td, struct freebsd32_wait6_args *uap)
bzero(sip, sizeof(*sip));
} else
sip = NULL;
- error = kern_wait6(td, uap->idtype, uap->id, &status, uap->options,
- wrup, sip);
+ error = kern_wait6(td, uap->idtype, PAIR32TO64(id_t, uap->id),
+ &status, uap->options, wrup, sip);
if (error != 0)
return (error);
if (uap->status != NULL)
diff --git a/sys/compat/freebsd32/syscalls.master b/sys/compat/freebsd32/syscalls.master
index be245be..e537bc9 100644
--- a/sys/compat/freebsd32/syscalls.master
+++ b/sys/compat/freebsd32/syscalls.master
@@ -994,6 +994,22 @@
529 AUE_NULL NOPROTO { int rctl_remove_rule(const void *inbufp, \
size_t inbuflen, void *outbufp, \
size_t outbuflen); }
+#ifdef PAD64_REQUIRED
+530 AUE_NULL STD { int freebsd32_posix_fallocate(int fd, \
+ int pad, \
+ uint32_t offset1, uint32_t offset2,\
+ uint32_t len1, uint32_t len2); }
+531 AUE_NULL STD { int freebsd32_posix_fadvise(int fd, \
+ int pad, \
+ uint32_t offset1, uint32_t offset2,\
+ uint32_t len1, uint32_t len2, \
+ int advice); }
+532 AUE_WAIT6 STD { int freebsd32_wait6(int idtype, int pad, \
+ uint32_t id1, uint32_t id2, \
+ int *status, int options, \
+ struct wrusage32 *wrusage, \
+ siginfo_t *info); }
+#else
530 AUE_NULL STD { int freebsd32_posix_fallocate(int fd,\
uint32_t offset1, uint32_t offset2,\
uint32_t len1, uint32_t len2); }
@@ -1001,11 +1017,12 @@
uint32_t offset1, uint32_t offset2,\
uint32_t len1, uint32_t len2, \
int advice); }
-532 AUE_WAIT6 STD { int freebsd32_wait6(int idtype, int id, \
+532 AUE_WAIT6 STD { int freebsd32_wait6(int idtype, \
+ uint32_t id1, uint32_t id2, \
int *status, int options, \
struct wrusage32 *wrusage, \
siginfo_t *info); }
-
+#endif
533 AUE_CAP_RIGHTS_LIMIT NOPROTO { int cap_rights_limit(int fd, \
uint64_t rights); }
534 AUE_CAP_IOCTLS_LIMIT NOPROTO { int cap_ioctls_limit(int fd, \
OpenPOWER on IntegriCloud