Author: brooks Date: Tue Mar 27 17:48:39 2018 New Revision: 331635 URL: https://svnweb.freebsd.org/changeset/base/331635
Log: MFC r330876, r330945 r330876: Fix ISP_FC_LIP and ISP_RESCAN on big-endian 64-bit systems. For _IO() ioctls, addr is a pointer to uap->data which is a caddr_t. When the caddr_t stores an int, dereferencing addr as an (int *) results in truncation on little-endian 64-bit systems and corruption (owing to extracting top bits) on big-endian 64-bit systems. In practice the value of chan was probably always zero on systems of the latter type as all such FreeBSD platforms use a register-based calling convention. Reviewed by: mav Obtained from: CheriBSD Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D14673 r330945: Add opt_compat.h to isp(4) as required by r330876. Modified: stable/10/sys/dev/isp/isp_freebsd.c stable/10/sys/modules/isp/Makefile Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/isp/isp_freebsd.c ============================================================================== --- stable/10/sys/dev/isp/isp_freebsd.c Tue Mar 27 17:46:25 2018 (r331634) +++ stable/10/sys/dev/isp/isp_freebsd.c Tue Mar 27 17:48:39 2018 (r331635) @@ -433,7 +433,7 @@ ispioctl(struct cdev *dev, u_long c, caddr_t addr, int case ISP_RESCAN: if (IS_FC(isp)) { - chan = *(int *)addr; + chan = *(intptr_t *)addr; if (chan < 0 || chan >= isp->isp_nchan) { retval = -ENXIO; break; @@ -450,7 +450,7 @@ ispioctl(struct cdev *dev, u_long c, caddr_t addr, int case ISP_FC_LIP: if (IS_FC(isp)) { - chan = *(int *)addr; + chan = *(intptr_t *)addr; if (chan < 0 || chan >= isp->isp_nchan) { retval = -ENXIO; break; Modified: stable/10/sys/modules/isp/Makefile ============================================================================== --- stable/10/sys/modules/isp/Makefile Tue Mar 27 17:46:25 2018 (r331634) +++ stable/10/sys/modules/isp/Makefile Tue Mar 27 17:48:39 2018 (r331635) @@ -4,7 +4,7 @@ KMOD= isp SRCS= bus_if.h device_if.h pci_if.h \ - opt_cam.h opt_ddb.h opt_isp.h \ + opt_cam.h opt_compat.h opt_ddb.h opt_isp.h \ isp.c isp_library.c isp_target.c isp_freebsd.c isp_pci.c .if ${MACHINE} == sparc64 _______________________________________________ svn-src-all@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"