diff options
author | brooks <brooks@FreeBSD.org> | 2018-03-27 17:39:27 +0000 |
---|---|---|
committer | brooks <brooks@FreeBSD.org> | 2018-03-27 17:39:27 +0000 |
commit | 9e25b279a2b64ef3bb297353b3874987277be25b (patch) | |
tree | b3f9e69c02d048cc7404739e03e9d054c42e31ab | |
parent | afaab4bdf5993f92b5013cb423c5c34216bd1319 (diff) | |
download | FreeBSD-src-9e25b279a2b64ef3bb297353b3874987277be25b.zip FreeBSD-src-9e25b279a2b64ef3bb297353b3874987277be25b.tar.gz |
MFC r330820:
Reject ioctls to SCSI enclosures from 32-bit compat processes.
The ioctl objects contain pointers and require translation and some
refactoring of the infrastructure to work. For now prevent operation
on garbage values. This is very slightly overbroad in that ENCIOC_INIT
is safe.
Reviewed by: imp, kib
Obtained from: CheriBSD
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D14671
-rw-r--r-- | sys/cam/scsi/scsi_enc.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/cam/scsi/scsi_enc.c b/sys/cam/scsi/scsi_enc.c index a450cd0..5c78c50 100644 --- a/sys/cam/scsi/scsi_enc.c +++ b/sys/cam/scsi/scsi_enc.c @@ -27,6 +27,8 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include "opt_compat.h" + #include <sys/param.h> #include <sys/conf.h> @@ -37,8 +39,10 @@ __FBSDID("$FreeBSD$"); #include <sys/lock.h> #include <sys/malloc.h> #include <sys/mutex.h> +#include <sys/proc.h> #include <sys/queue.h> #include <sys/sx.h> +#include <sys/sysent.h> #include <sys/systm.h> #include <sys/sysctl.h> #include <sys/types.h> @@ -351,6 +355,10 @@ enc_ioctl(struct cdev *dev, u_long cmd, caddr_t arg_addr, int flag, void *addr; int error, i; +#ifdef COMPAT_FREEBSD32 + if (SV_PROC_FLAG(td->td_proc, SV_ILP32)) + return (ENOTTY); +#endif if (arg_addr) addr = *((caddr_t *) arg_addr); |