summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbrooks <brooks@FreeBSD.org>2018-03-27 17:39:27 +0000
committerbrooks <brooks@FreeBSD.org>2018-03-27 17:39:27 +0000
commit9e25b279a2b64ef3bb297353b3874987277be25b (patch)
treeb3f9e69c02d048cc7404739e03e9d054c42e31ab
parentafaab4bdf5993f92b5013cb423c5c34216bd1319 (diff)
downloadFreeBSD-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.c8
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);
OpenPOWER on IntegriCloud