diff options
Diffstat (limited to 'usr/src/lib')
-rw-r--r-- | usr/src/lib/brand/lx/lx_brand/common/fcntl.c | 30 | ||||
-rw-r--r-- | usr/src/lib/brand/lx/lx_brand/common/id.c | 209 | ||||
-rw-r--r-- | usr/src/lib/brand/lx/lx_brand/common/lx_brand.c | 76 | ||||
-rw-r--r-- | usr/src/lib/brand/lx/lx_brand/common/misc.c | 72 | ||||
-rw-r--r-- | usr/src/lib/brand/lx/lx_brand/sys/lx_syscall.h | 24 |
5 files changed, 41 insertions, 370 deletions
diff --git a/usr/src/lib/brand/lx/lx_brand/common/fcntl.c b/usr/src/lib/brand/lx/lx_brand/common/fcntl.c index 7b6cd4d5f2..93738bf84f 100644 --- a/usr/src/lib/brand/lx/lx_brand/common/fcntl.c +++ b/usr/src/lib/brand/lx/lx_brand/common/fcntl.c @@ -40,36 +40,6 @@ #include <sys/lx_misc.h> #include <sys/lx_syscall.h> -long -lx_dup2(uintptr_t p1, uintptr_t p2) -{ - int oldfd = (int)p1; - int newfd = (int)p2; - int rc; - - rc = fcntl(oldfd, F_DUP2FD, newfd); - return ((rc == -1) ? -errno : rc); -} - -long -lx_dup3(uintptr_t p1, uintptr_t p2, uintptr_t p3) -{ - int oldfd = (int)p1; - int newfd = (int)p2; - int flags = (int)p3; - int rc; - - /* The only valid flag is O_CLOEXEC. */ - if (flags & ~LX_O_CLOEXEC) - return (-EINVAL); - - if (oldfd == newfd) - return (-EINVAL); - - rc = fcntl(oldfd, (flags == 0) ? F_DUP2FD : F_DUP2FD_CLOEXEC, newfd); - return ((rc == -1) ? -errno : rc); -} - /* * flock() applies or removes an advisory lock on the file * associated with the file descriptor fd. diff --git a/usr/src/lib/brand/lx/lx_brand/common/id.c b/usr/src/lib/brand/lx/lx_brand/common/id.c index cd5baefa7d..9ab923270d 100644 --- a/usr/src/lib/brand/lx/lx_brand/common/id.c +++ b/usr/src/lib/brand/lx/lx_brand/common/id.c @@ -22,215 +22,12 @@ /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. - * Copyright 2014 Joyent, Inc. All rights reserved. + * Copyright 2016 Joyent, Inc. */ #include <sys/types.h> -#include <fcntl.h> -#include <procfs.h> -#include <sys/systm.h> -#include <sys/errno.h> -#include <sys/zone.h> #include <sys/lx_types.h> -#include <sys/lx_syscall.h> -#include <sys/cred_impl.h> -#include <sys/policy.h> -#include <sys/ucred.h> -#include <sys/syscall.h> -#include <alloca.h> -#include <errno.h> -#include <ucred.h> #include <unistd.h> -#include <errno.h> -#include <string.h> -#include <sys/lx_misc.h> - - -long -lx_setuid16(uintptr_t uid) -{ - return ((setuid(LX_UID16_TO_UID32((lx_uid16_t)uid))) ? -errno : 0); -} - -long -lx_getuid16(void) -{ - return ((int)LX_UID32_TO_UID16(getuid())); -} - -long -lx_setgid16(uintptr_t gid) -{ - return ((setgid(LX_GID16_TO_GID32((lx_gid16_t)gid))) ? -errno : 0); -} - -long -lx_getgid16(void) -{ - return ((int)LX_GID32_TO_GID16(getgid())); -} - -long -lx_geteuid16(void) -{ - return ((int)LX_UID32_TO_UID16(geteuid())); -} - -long -lx_getegid16(void) -{ - return ((int)LX_GID32_TO_GID16(getegid())); -} - -long -lx_geteuid(void) -{ - return ((int)geteuid()); -} - -long -lx_getegid(void) -{ - return ((int)getegid()); -} - -long -lx_getresuid(uintptr_t ruid, uintptr_t euid, uintptr_t suid) -{ - lx_uid_t lx_ruid, lx_euid, lx_suid; - ucred_t *cr; - size_t sz; - - /* - * We allocate a ucred_t ourselves rather than call ucred_get(3C) - * because ucred_get() calls malloc(3C), which the brand library cannot - * use. Because we allocate the space with SAFE_ALLOCA(), there's - * no need to free it when we're done. - */ - sz = ucred_size(); - cr = (ucred_t *)SAFE_ALLOCA(sz); - if (cr == NULL) - return (-ENOMEM); - - if (syscall(SYS_ucredsys, UCREDSYS_UCREDGET, P_MYID, cr) != 0) - return (-errno); - - if (((lx_ruid = (lx_uid_t)ucred_getruid(cr)) == (lx_uid_t)-1) || - ((lx_euid = (lx_uid_t)ucred_geteuid(cr)) == (lx_uid_t)-1) || - ((lx_suid = (lx_uid_t)ucred_getsuid(cr)) == (lx_uid_t)-1)) { - return (-errno); - } - - if (uucopy(&lx_ruid, (void *)ruid, sizeof (lx_uid_t)) != 0) - return (-errno); - - if (uucopy(&lx_euid, (void *)euid, sizeof (lx_uid_t)) != 0) - return (-errno); - - return ((uucopy(&lx_suid, (void *)suid, sizeof (lx_uid_t)) != 0) - ? -errno : 0); -} - -long -lx_getresuid16(uintptr_t ruid16, uintptr_t euid16, uintptr_t suid16) -{ - lx_uid_t lx_ruid, lx_euid, lx_suid; - lx_uid16_t lx_ruid16, lx_euid16, lx_suid16; - int rv; - - if ((rv = lx_getresuid((uintptr_t)&lx_ruid, (uintptr_t)&lx_euid, - (uintptr_t)&lx_suid)) != 0) - return (rv); - - lx_ruid16 = LX_UID32_TO_UID16(lx_ruid); - lx_euid16 = LX_UID32_TO_UID16(lx_euid); - lx_suid16 = LX_UID32_TO_UID16(lx_suid); - - if (uucopy(&lx_ruid16, (void *)ruid16, sizeof (lx_uid16_t)) != 0) - return (-errno); - - if (uucopy(&lx_euid16, (void *)euid16, sizeof (lx_uid16_t)) != 0) - return (-errno); - - return ((uucopy(&lx_suid16, (void *)suid16, sizeof (lx_uid16_t)) != 0) - ? -errno : 0); -} - -long -lx_getresgid(uintptr_t rgid, uintptr_t egid, uintptr_t sgid) -{ - ucred_t *cr; - lx_gid_t lx_rgid, lx_egid, lx_sgid; - size_t sz; - - /* - * We allocate a ucred_t ourselves rather than call ucred_get(3C) - * because ucred_get() calls malloc(3C), which the brand library cannot - * use. Because we allocate the space with SAFE_ALLOCA(), there's - * no need to free it when we're done. - */ - sz = ucred_size(); - cr = (ucred_t *)SAFE_ALLOCA(sz); - if (cr == NULL) - return (-ENOMEM); - - if (syscall(SYS_ucredsys, UCREDSYS_UCREDGET, P_MYID, cr) != 0) - return (-errno); - - if (((lx_rgid = (lx_gid_t)ucred_getrgid(cr)) == (lx_gid_t)-1) || - ((lx_egid = (lx_gid_t)ucred_getegid(cr)) == (lx_gid_t)-1) || - ((lx_sgid = (lx_gid_t)ucred_getsgid(cr)) == (lx_gid_t)-1)) { - return (-errno); - } - - if (uucopy(&lx_rgid, (void *)rgid, sizeof (lx_gid_t)) != 0) - return (-errno); - - if (uucopy(&lx_egid, (void *)egid, sizeof (lx_gid_t)) != 0) - return (-errno); - - return ((uucopy(&lx_sgid, (void *)sgid, sizeof (lx_gid_t)) != 0) - ? -errno : 0); -} - -long -lx_getresgid16(uintptr_t rgid16, uintptr_t egid16, uintptr_t sgid16) -{ - lx_gid_t lx_rgid, lx_egid, lx_sgid; - lx_gid16_t lx_rgid16, lx_egid16, lx_sgid16; - int rv; - - if ((rv = lx_getresgid((uintptr_t)&lx_rgid, (uintptr_t)&lx_egid, - (uintptr_t)&lx_sgid)) != 0) - return (rv); - - lx_rgid16 = LX_UID32_TO_UID16(lx_rgid); - lx_egid16 = LX_UID32_TO_UID16(lx_egid); - lx_sgid16 = LX_UID32_TO_UID16(lx_sgid); - - if (uucopy(&lx_rgid16, (void *)rgid16, sizeof (lx_gid16_t)) != 0) - return (-errno); - - if (uucopy(&lx_egid16, (void *)egid16, sizeof (lx_gid16_t)) != 0) - return (-errno); - - return ((uucopy(&lx_sgid16, (void *)sgid16, sizeof (lx_gid16_t)) != 0) - ? -errno : 0); -} - -long -lx_setreuid16(uintptr_t ruid, uintptr_t euid) -{ - return ((setreuid(LX_UID16_TO_UID32((lx_uid16_t)ruid), - LX_UID16_TO_UID32((lx_uid16_t)euid))) ? -errno : 0); -} - -long -lx_setregid16(uintptr_t rgid, uintptr_t egid) -{ - return ((setregid(LX_UID16_TO_UID32((lx_gid16_t)rgid), - LX_UID16_TO_UID32((lx_gid16_t)egid))) ? -errno : 0); -} /* * The lx brand cannot support the setfs[ug]id16/setfs[ug]id calls as that @@ -246,14 +43,14 @@ lx_setregid16(uintptr_t rgid, uintptr_t egid) long lx_setfsuid16(uintptr_t fsuid16) { - return (lx_geteuid16()); + return ((int)LX_UID32_TO_UID16(geteuid())); } /*ARGSUSED*/ long lx_setfsgid16(uintptr_t fsgid16) { - return (lx_getegid16()); + return ((int)LX_GID32_TO_GID16(getegid())); } /*ARGSUSED*/ diff --git a/usr/src/lib/brand/lx/lx_brand/common/lx_brand.c b/usr/src/lib/brand/lx/lx_brand/common/lx_brand.c index 274d5435a4..92771c3f71 100644 --- a/usr/src/lib/brand/lx/lx_brand/common/lx_brand.c +++ b/usr/src/lib/brand/lx/lx_brand/common/lx_brand.c @@ -1043,8 +1043,8 @@ static lx_syscall_handler_t lx_handlers[] = { lx_shmget, /* 29: shmget */ lx_shmat, /* 30: shmat */ lx_shmctl, /* 31: shmctl */ - lx_dup, /* 32: dup */ - lx_dup2, /* 33: dup2 */ + NULL, /* 32: dup */ + NULL, /* 33: dup2 */ lx_pause, /* 34: pause */ NULL, /* 35: nanosleep */ lx_getitimer, /* 36: getitimer */ @@ -1106,32 +1106,32 @@ static lx_syscall_handler_t lx_handlers[] = { NULL, /* 92: chown */ NULL, /* 93: fchown */ NULL, /* 94: lchown */ - lx_umask, /* 95: umask */ + NULL, /* 95: umask */ NULL, /* 96: gettimeofday */ NULL, /* 97: getrlimit */ lx_getrusage, /* 98: getrusage */ NULL, /* 99: sysinfo */ lx_times, /* 100: times */ NULL, /* 101: ptrace */ - lx_getuid, /* 102: getuid */ + NULL, /* 102: getuid */ lx_syslog, /* 103: syslog */ - lx_getgid, /* 104: getgid */ - lx_setuid, /* 105: setuid */ - lx_setgid, /* 106: setgid */ - lx_geteuid, /* 107: geteuid */ - lx_getegid, /* 108: getegid */ + NULL, /* 104: getgid */ + NULL, /* 105: setuid */ + NULL, /* 106: setgid */ + NULL, /* 107: geteuid */ + NULL, /* 108: getegid */ lx_setpgid, /* 109: setpgid */ NULL, /* 110: getppid */ lx_getpgrp, /* 111: getpgrp */ lx_setsid, /* 112: setsid */ - lx_setreuid, /* 113: setreuid */ - lx_setregid, /* 114: setregid */ + NULL, /* 113: setreuid */ + NULL, /* 114: setregid */ lx_getgroups, /* 115: getgroups */ lx_setgroups, /* 116: setgroups */ NULL, /* 117: setresuid */ - lx_getresuid, /* 118: getresuid */ + NULL, /* 118: getresuid */ NULL, /* 119: setresgid */ - lx_getresgid, /* 120: getresgid */ + NULL, /* 120: getresgid */ lx_getpgid, /* 121: getpgid */ lx_setfsuid, /* 122: setfsuid */ lx_setfsgid, /* 123: setfsgid */ @@ -1303,7 +1303,7 @@ static lx_syscall_handler_t lx_handlers[] = { lx_signalfd4, /* 289: signalfd4 */ lx_eventfd2, /* 290: eventfd2 */ NULL, /* 291: epoll_create1 */ - lx_dup3, /* 292: dup3 */ + NULL, /* 292: dup3 */ NULL, /* 293: pipe2 */ lx_inotify_init1, /* 294: inotify_init1 */ NULL, /* 295: preadv */ @@ -1365,8 +1365,8 @@ static lx_syscall_handler_t lx_handlers[] = { NULL, /* 20: getpid */ lx_mount, /* 21: mount */ NULL, /* 22: umount */ - lx_setuid16, /* 23: setuid16 */ - lx_getuid16, /* 24: getuid16 */ + NULL, /* 23: setuid16 */ + NULL, /* 24: getuid16 */ lx_stime, /* 25: stime */ NULL, /* 26: ptrace */ lx_alarm, /* 27: alarm */ @@ -1383,16 +1383,16 @@ static lx_syscall_handler_t lx_handlers[] = { lx_rename, /* 38: rename */ NULL, /* 39: mkdir */ lx_rmdir, /* 40: rmdir */ - lx_dup, /* 41: dup */ + NULL, /* 41: dup */ NULL, /* 42: pipe */ lx_times, /* 43: times */ NULL, /* 44: prof */ NULL, /* 45: brk */ - lx_setgid16, /* 46: setgid16 */ - lx_getgid16, /* 47: getgid16 */ + NULL, /* 46: setgid16 */ + NULL, /* 47: getgid16 */ lx_signal, /* 48: signal */ - lx_geteuid16, /* 49: geteuid16 */ - lx_getegid16, /* 50: getegid16 */ + NULL, /* 49: geteuid16 */ + NULL, /* 50: getegid16 */ NULL, /* 51: acct */ NULL, /* 52: umount2 */ NULL, /* 53: lock */ @@ -1402,18 +1402,18 @@ static lx_syscall_handler_t lx_handlers[] = { lx_setpgid, /* 57: setpgid */ NULL, /* 58: ulimit */ NULL, /* 59: olduname */ - lx_umask, /* 60: umask */ + NULL, /* 60: umask */ lx_chroot, /* 61: chroot */ NULL, /* 62: ustat */ - lx_dup2, /* 63: dup2 */ + NULL, /* 63: dup2 */ NULL, /* 64: getppid */ lx_getpgrp, /* 65: getpgrp */ lx_setsid, /* 66: setsid */ lx_sigaction, /* 67: sigaction */ NULL, /* 68: sgetmask */ NULL, /* 69: ssetmask */ - lx_setreuid16, /* 70: setreuid16 */ - lx_setregid16, /* 71: setregid16 */ + NULL, /* 70: setreuid16 */ + NULL, /* 71: setregid16 */ lx_sigsuspend, /* 72: sigsuspend */ lx_sigpending, /* 73: sigpending */ lx_sethostname, /* 74: sethostname */ @@ -1507,13 +1507,13 @@ static lx_syscall_handler_t lx_handlers[] = { NULL, /* 162: nanosleep */ lx_remap, /* 163: mremap */ NULL, /* 164: setresuid16 */ - lx_getresuid16, /* 165: getresuid16 */ + NULL, /* 165: getresuid16 */ NULL, /* 166: vm86 */ lx_query_module, /* 167: query_module */ NULL, /* 168: poll */ NULL, /* 169: nfsservctl */ NULL, /* 170: setresgid16 */ - lx_getresgid16, /* 171: getresgid16 */ + NULL, /* 171: getresgid16 */ NULL, /* 172: prctl */ lx_rt_sigreturn, /* 173: rt_sigreturn */ lx_rt_sigaction, /* 174: rt_sigaction */ @@ -1541,22 +1541,22 @@ static lx_syscall_handler_t lx_handlers[] = { NULL, /* 196: lstat64 */ NULL, /* 197: fstat64 */ NULL, /* 198: lchown */ - lx_getuid, /* 199: getuid */ - lx_getgid, /* 200: getgid */ - lx_geteuid, /* 201: geteuid */ - lx_getegid, /* 202: getegid */ - lx_setreuid, /* 203: setreuid */ - lx_setregid, /* 204: setregid */ + NULL, /* 199: getuid */ + NULL, /* 200: getgid */ + NULL, /* 201: geteuid */ + NULL, /* 202: getegid */ + NULL, /* 203: setreuid */ + NULL, /* 204: setregid */ lx_getgroups, /* 205: getgroups */ lx_setgroups, /* 206: setgroups */ NULL, /* 207: fchown */ NULL, /* 208: setresuid */ - lx_getresuid, /* 209: getresuid */ + NULL, /* 209: getresuid */ NULL, /* 210: setresgid */ - lx_getresgid, /* 211: getresgid */ + NULL, /* 211: getresgid */ NULL, /* 212: chown */ - lx_setuid, /* 213: setuid */ - lx_setgid, /* 214: setgid */ + NULL, /* 213: setuid */ + NULL, /* 214: setgid */ lx_setfsuid, /* 215: setfsuid */ lx_setfsgid, /* 216: setfsgid */ NULL, /* 217: pivot_root */ @@ -1672,7 +1672,7 @@ static lx_syscall_handler_t lx_handlers[] = { lx_signalfd4, /* 327: signalfd4 */ lx_eventfd2, /* 328: eventfd2 */ NULL, /* 329: epoll_create1 */ - lx_dup3, /* 330: dup3 */ + NULL, /* 330: dup3 */ NULL, /* 331: pipe2 */ lx_inotify_init1, /* 332: inotify_init1 */ NULL, /* 333: preadv */ diff --git a/usr/src/lib/brand/lx/lx_brand/common/misc.c b/usr/src/lib/brand/lx/lx_brand/common/misc.c index 49ac90608b..795c63144a 100644 --- a/usr/src/lib/brand/lx/lx_brand/common/misc.c +++ b/usr/src/lib/brand/lx/lx_brand/common/misc.c @@ -507,15 +507,6 @@ lx_creat(const char *path, mode_t mode) } long -lx_dup(int fildes) -{ - int r; - - r = dup(fildes); - return ((r == -1) ? -errno : r); -} - -long lx_fchdir(int fildes) { int r; @@ -525,15 +516,6 @@ lx_fchdir(int fildes) } long -lx_getgid(void) -{ - int r; - - r = getgid(); - return (r); -} - -long lx_getgroups(int gidsetsize, gid_t *grouplist) { int r; @@ -552,15 +534,6 @@ lx_getitimer(int which, struct itimerval *value) } long -lx_getuid(void) -{ - int r; - - r = getuid(); - return (r); -} - -long lx_inotify_add_watch(int fd, const char *pathname, uint32_t mask) { int r; @@ -642,42 +615,6 @@ lx_pause(void) } long -lx_setgid(gid_t gid) -{ - int r; - - r = setgid(gid); - return ((r == -1) ? -errno : r); -} - -long -lx_setuid(uid_t uid) -{ - int r; - - r = setuid(uid); - return ((r == -1) ? -errno : r); -} - -long -lx_setregid(gid_t rgid, gid_t egid) -{ - int r; - - r = setregid(rgid, egid); - return ((r == -1) ? -errno : r); -} - -long -lx_setreuid(uid_t ruid, uid_t euid) -{ - int r; - - r = setreuid(ruid, euid); - return ((r == -1) ? -errno : r); -} - -long lx_shmdt(char *shmaddr) { int r; @@ -705,15 +642,6 @@ lx_symlink(const char *name1, const char *name2) } long -lx_umask(mode_t cmask) -{ - int r; - - r = umask(cmask); - return ((r == -1) ? -errno : r); -} - -long lx_utimes(const char *path, const struct timeval times[2]) { int r; diff --git a/usr/src/lib/brand/lx/lx_brand/sys/lx_syscall.h b/usr/src/lib/brand/lx/lx_brand/sys/lx_syscall.h index b1cdba338f..fe28dc7a05 100644 --- a/usr/src/lib/brand/lx/lx_brand/sys/lx_syscall.h +++ b/usr/src/lib/brand/lx/lx_brand/sys/lx_syscall.h @@ -65,8 +65,6 @@ extern long lx_flock(uintptr_t, uintptr_t); extern long lx_readlink(uintptr_t, uintptr_t, uintptr_t); extern long lx_readdir(uintptr_t, uintptr_t, uintptr_t); extern long lx_execve(uintptr_t, uintptr_t, uintptr_t); -extern long lx_dup2(uintptr_t, uintptr_t); -extern long lx_dup3(uintptr_t, uintptr_t, uintptr_t); extern long lx_ioctl(uintptr_t, uintptr_t, uintptr_t); extern long lx_vhangup(void); extern long lx_fadvise64(uintptr_t, off64_t, uintptr_t, uintptr_t); @@ -82,23 +80,9 @@ extern long lx_setpgid(uintptr_t, uintptr_t); extern long lx_getsid(uintptr_t); extern long lx_setsid(void); -extern long lx_getuid16(void); -extern long lx_getgid16(void); -extern long lx_geteuid16(void); -extern long lx_getegid16(void); -extern long lx_geteuid(void); -extern long lx_getegid(void); -extern long lx_getresuid16(uintptr_t, uintptr_t, uintptr_t); -extern long lx_getresgid16(uintptr_t, uintptr_t, uintptr_t); -extern long lx_getresuid(uintptr_t, uintptr_t, uintptr_t); -extern long lx_getresgid(uintptr_t, uintptr_t, uintptr_t); extern long lx_capget(uintptr_t, uintptr_t); extern long lx_capset(uintptr_t, uintptr_t); -extern long lx_setuid16(uintptr_t); -extern long lx_setreuid16(uintptr_t, uintptr_t); -extern long lx_setregid16(uintptr_t, uintptr_t); -extern long lx_setgid16(uintptr_t); extern long lx_setfsuid16(uintptr_t); extern long lx_setfsgid16(uintptr_t); @@ -241,14 +225,11 @@ extern long lx_close(int); extern long lx_chdir(const char *); extern long lx_chroot(const char *); extern long lx_creat(const char *, mode_t); -extern long lx_dup(int); extern long lx_eventfd(unsigned int); extern long lx_eventfd2(unsigned int, int); extern long lx_fchdir(int); -extern long lx_getgid(void); extern long lx_getgroups(int, gid_t *); extern long lx_getitimer(int, struct itimerval *); -extern long lx_getuid(void); extern long lx_inotify_add_watch(int, const char *, uint32_t); extern long lx_inotify_init(void); extern long lx_inotify_init1(int); @@ -257,10 +238,6 @@ extern long lx_mincore(caddr_t, size_t, char *); extern long lx_munmap(void *, size_t); extern long lx_nice(int); extern long lx_pause(void); -extern long lx_setgid(gid_t); -extern long lx_setuid(uid_t); -extern long lx_setregid(gid_t, gid_t); -extern long lx_setreuid(uid_t, uid_t); extern long lx_shmdt(char *); extern long lx_signalfd(int, uintptr_t, size_t); extern long lx_signalfd4(int, uintptr_t, size_t, int); @@ -271,7 +248,6 @@ extern long lx_timerfd_create(int, int); extern long lx_timerfd_settime(int, int, const struct itimerspec *, struct itimerspec *); extern long lx_timerfd_gettime(int, struct itimerspec *); -extern long lx_umask(mode_t); extern long lx_utimes(const char *, const struct timeval *); #endif /* !defined(_ASM) */ |