From 92c3cd242c92e6870a24d784b400d0850f8e76c5 Mon Sep 17 00:00:00 2001 From: Lauri Tirkkonen Date: Mon, 11 Mar 2019 21:12:47 +0200 Subject: [PATCH] kernel: remove 32bit-only pread,pwrite,openat,fstatat,statvfs,fstatvfs these were essentially dead code. the remaining 32-bit/largefile compat stuff needs more care (eg. getdents, setrlimit, getrlimit, llseek, lseek) --- kernel/os/sysent.c | 6 --- kernel/syscall/open.c | 11 ----- kernel/syscall/rw.c | 18 +------- kernel/syscall/stat.c | 113 ----------------------------------------------- kernel/syscall/statvfs.c | 41 ----------------- 5 files changed, 1 insertion(+), 188 deletions(-) diff --git a/kernel/os/sysent.c b/kernel/os/sysent.c index f16a719c76..c0efbc23b4 100644 --- a/kernel/os/sysent.c +++ b/kernel/os/sysent.c @@ -723,13 +723,9 @@ struct sysent sysent[NSYSCALL] = extern int ulimit32(int, int); extern ssize_t read32(int32_t, caddr32_t, size32_t); extern ssize_t write32(int32_t, caddr32_t, size32_t); -extern ssize_t pread32(int32_t, caddr32_t, size32_t, off32_t); -extern ssize_t pwrite32(int32_t, caddr32_t, size32_t, off32_t); extern ssize_t readv32(int32_t, caddr32_t, int32_t); extern ssize_t writev32(int32_t, caddr32_t, int32_t); extern ssize_t readlinkat32(int, caddr32_t, caddr32_t, size32_t); -extern int openat32(int, char *, int, int); -extern int fstatat32(int, char *, struct stat32 *, int); extern int fstatat64_32(int, char *, struct stat64_32 *, int); extern int getmsg32(int, struct strbuf32 *, struct strbuf32 *, int32_t *); extern int putmsg32(int, struct strbuf32 *, struct strbuf32 *, int32_t *); @@ -738,8 +734,6 @@ extern int getpmsg32(int, struct strbuf32 *, struct strbuf32 *, int32_t *, extern int putpmsg32(int, struct strbuf32 *, struct strbuf32 *, int32_t, int32_t); extern int getsetcontext32(int, void *); -extern int statvfs32(char *, struct statvfs32 *); -extern int fstatvfs32(int, struct statvfs32 *); extern int statvfs64_32(char *, struct statvfs64_32 *); extern int fstatvfs64_32(int, struct statvfs64_32 *); extern int sigaction32(int, struct sigaction32 *, struct sigaction32 *); diff --git a/kernel/syscall/open.c b/kernel/syscall/open.c index a4ffa35d12..adbce3612d 100644 --- a/kernel/syscall/open.c +++ b/kernel/syscall/open.c @@ -300,14 +300,3 @@ openat64(int fd, char *path, int omode, int cmode) return (copen(fd, path, FFLAGS(omode), cmode)); } #endif /* _ILP32 || _SYSCALL32_IMPL */ - -#ifdef _SYSCALL32_IMPL -/* - * Open for 32-bit compatibility on 64-bit kernel - */ -int -openat32(int fd, char *path, int omode, int cmode) -{ - return (copen(fd, path, FFLAGS(omode), cmode)); -} -#endif /* _SYSCALL32_IMPL */ diff --git a/kernel/syscall/rw.c b/kernel/syscall/rw.c index c42d4ba93d..e78eab698a 100644 --- a/kernel/syscall/rw.c +++ b/kernel/syscall/rw.c @@ -1689,7 +1689,7 @@ out: * down negative input values as such and let the downcall handle error * reporting. Functions covered by this comments are: * - * rw.c: read32, write32, pread32, pwrite32, readv32, writev32. + * rw.c: read32, write32, readv32, writev32. * socksyscall.c: recv32, recvfrom32, send32, sendto32. * readlink.c: readlink32. */ @@ -1709,22 +1709,6 @@ write32(int32_t fdes, caddr32_t cbuf, size32_t count) } ssize_t -pread32(int32_t fdes, caddr32_t cbuf, size32_t count, off32_t offset) -{ - return (pread(fdes, - (void *)(uintptr_t)cbuf, (ssize32_t)count, - (off_t)(uint32_t)offset)); -} - -ssize_t -pwrite32(int32_t fdes, caddr32_t cbuf, size32_t count, off32_t offset) -{ - return (pwrite(fdes, - (void *)(uintptr_t)cbuf, (ssize32_t)count, - (off_t)(uint32_t)offset)); -} - -ssize_t readv32(int32_t fdes, caddr32_t iovp, int32_t iovcnt) { return (readv(fdes, (void *)(uintptr_t)iovp, iovcnt)); diff --git a/kernel/syscall/stat.c b/kernel/syscall/stat.c index 7cec1115e3..35071bf825 100644 --- a/kernel/syscall/stat.c +++ b/kernel/syscall/stat.c @@ -261,119 +261,6 @@ lookup: return (0); } -#if defined(_SYSCALL32_IMPL) - -/* - * 64-bit kernel, 32-bit applications, 32-bit file offsets - */ -static int cstatat32(int, char *, struct stat32 *, int, int); -static int cstat32(vnode_t *, struct stat32 *, int, cred_t *); - -static inline int -fstat32(int fd, struct stat32 *sb) -{ - FSTAT_BODY(fd, sb, cstat32) -} - -int -fstatat32(int fd, char *name, struct stat32 *sb, int flags) -{ - int followflag; - int csflags; - - if (name == NULL) - return (fstat32(fd, sb)); - - followflag = (flags & AT_SYMLINK_NOFOLLOW); - csflags = (flags & _AT_TRIGGER ? ATTR_TRIGGER : 0); - if (followflag == 0) - csflags |= ATTR_REAL; /* flag for procfs lookups */ - - return (cstatat32(fd, name, sb, followflag, csflags)); -} - -static int -cstat32(vnode_t *vp, struct stat32 *ubp, int flag, struct cred *cr) -{ - struct vfssw *vswp; - struct stat32 sb; - vattr_t vattr; - int error; - dev32_t st_dev, st_rdev; - - vattr.va_mask = VATTR_STAT | VATTR_NBLOCKS | VATTR_BLKSIZE | VATTR_SIZE; - if (error = fop_getattr(vp, &vattr, flag, cr, NULL)) - return (error); - - /* devices are a special case, see comments in cstat */ - if ((vattr.va_size > MAXOFF32_T) && - ((vp->v_type == VBLK) || (vp->v_type == VCHR))) { - /* OVERFLOW | UNKNOWN_SIZE */ - vattr.va_size = MAXOFF32_T; - } - - /* check for large values */ - if (!cmpldev(&st_dev, vattr.va_fsid) || - !cmpldev(&st_rdev, vattr.va_rdev) || - vattr.va_size > MAXOFF32_T || - vattr.va_nblocks > INT32_MAX || - vattr.va_nodeid > UINT32_MAX || - TIMESPEC_OVERFLOW(&(vattr.va_atime)) || - TIMESPEC_OVERFLOW(&(vattr.va_mtime)) || - TIMESPEC_OVERFLOW(&(vattr.va_ctime))) - return (EOVERFLOW); - - bzero(&sb, sizeof (sb)); - sb.st_dev = st_dev; - sb.st_ino = (ino32_t)vattr.va_nodeid; - sb.st_mode = VTTOIF(vattr.va_type) | vattr.va_mode; - sb.st_nlink = vattr.va_nlink; - sb.st_uid = vattr.va_uid; - sb.st_gid = vattr.va_gid; - sb.st_rdev = st_rdev; - sb.st_size = (off32_t)vattr.va_size; - TIMESPEC_TO_TIMESPEC32(&(sb.st_atim), &(vattr.va_atime)); - TIMESPEC_TO_TIMESPEC32(&(sb.st_mtim), &(vattr.va_mtime)); - TIMESPEC_TO_TIMESPEC32(&(sb.st_ctim), &(vattr.va_ctime)); - sb.st_blksize = vattr.va_blksize; - sb.st_blocks = (blkcnt32_t)vattr.va_nblocks; - if (vp->v_vfsp != NULL) { - vswp = &vfssw[vp->v_vfsp->vfs_fstype]; - if (vswp->vsw_name && *vswp->vsw_name) - (void) strcpy(sb.st_fstype, vswp->vsw_name); - } - if (copyout(&sb, ubp, sizeof (sb))) - return (EFAULT); - return (0); -} - -static int -cstatat32(int fd, char *name, struct stat32 *sb, int follow, int flags) -{ - vnode_t *vp; - int error; - cred_t *cred; - int link_follow; - int estale_retry = 0; - - link_follow = (follow == AT_SYMLINK_NOFOLLOW) ? NO_FOLLOW : FOLLOW; -lookup: - if (error = cstatat_getvp(fd, name, link_follow, &vp, &cred)) - return (set_errno(error)); - error = cstat32(vp, sb, flags, cred); - crfree(cred); - VN_RELE(vp); - if (error != 0) { - if (error == ESTALE && - fs_need_estale_retry(estale_retry++)) - goto lookup; - return (set_errno(error)); - } - return (0); -} - -#endif /* _SYSCALL32_IMPL */ - #if defined(_ILP32) /* diff --git a/kernel/syscall/statvfs.c b/kernel/syscall/statvfs.c index 7452412c4b..9167e3c033 100644 --- a/kernel/syscall/statvfs.c +++ b/kernel/syscall/statvfs.c @@ -282,47 +282,6 @@ cstatvfs64_32(struct vfs *vfsp, struct statvfs64_32 *ubp) } /* - * ILP32 "small file" system calls on LP64 kernel - */ -int -statvfs32(char *fname, struct statvfs32 *sbp) -{ - vnode_t *vp; - int error; - int estale_retry = 0; - -lookup: - if (error = lookupname(fname, UIO_USERSPACE, FOLLOW, NULLVPP, &vp)) { - if ((error == ESTALE) && fs_need_estale_retry(estale_retry++)) - goto lookup; - return (set_errno(error)); - } - error = cstatvfs32(vp->v_vfsp, sbp); - VN_RELE(vp); - if (error) { - if ((error == ESTALE) && fs_need_estale_retry(estale_retry++)) - goto lookup; - return (set_errno(error)); - } - return (0); -} - -int -fstatvfs32(int fdes, struct statvfs32 *sbp) -{ - struct file *fp; - int error; - - if ((fp = getf(fdes)) == NULL) - return (set_errno(EBADF)); - error = cstatvfs32(fp->f_vnode->v_vfsp, sbp); - releasef(fdes); - if (error) - return (set_errno(error)); - return (0); -} - -/* * ILP32 Large File system calls on LP64 kernel */ int -- 2.11.4.GIT