diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2016-08-22 18:48:03 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2016-08-22 20:24:38 +0000 |
commit | c7aa3802c43f81fcbd89a7d0a2d795572741710c (patch) | |
tree | fb30bbf9e98f4cdc362e2f99ba989f2436918c4a | |
parent | d0de416eba4efacef1c1fc99a50645dfe855b4e0 (diff) | |
download | illumos-joyent-c7aa3802c43f81fcbd89a7d0a2d795572741710c.tar.gz |
OS-5607 lxbrand move unixbench syscalls to IKE
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
-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 | ||||
-rw-r--r-- | usr/src/uts/common/brand/lx/os/lx_syscall.c | 76 | ||||
-rw-r--r-- | usr/src/uts/common/brand/lx/sys/lx_syscalls.h | 24 | ||||
-rw-r--r-- | usr/src/uts/common/brand/lx/syscall/lx_dup.c | 53 | ||||
-rw-r--r-- | usr/src/uts/common/brand/lx/syscall/lx_id.c | 215 | ||||
-rw-r--r-- | usr/src/uts/common/brand/lx/syscall/lx_umask.c | 25 | ||||
-rw-r--r-- | usr/src/uts/intel/Makefile.files | 2 |
11 files changed, 378 insertions, 428 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) */ diff --git a/usr/src/uts/common/brand/lx/os/lx_syscall.c b/usr/src/uts/common/brand/lx/os/lx_syscall.c index 5d4b10a012..bbd1ad9e22 100644 --- a/usr/src/uts/common/brand/lx/os/lx_syscall.c +++ b/usr/src/uts/common/brand/lx/os/lx_syscall.c @@ -544,8 +544,8 @@ lx_sysent_t lx_sysent32[] = { {"getpid", lx_getpid, 0, 0}, /* 20 */ {"mount", lx_mount, 0, 5}, /* 21 */ {"umount", lx_umount, 0, 1}, /* 22 */ - {"setuid16", NULL, 0, 1}, /* 23 */ - {"getuid16", NULL, 0, 0}, /* 24 */ + {"setuid16", lx_setuid16, 0, 1}, /* 23 */ + {"getuid16", lx_getuid16, 0, 0}, /* 24 */ {"stime", NULL, 0, 1}, /* 25 */ {"ptrace", lx_ptrace, 0, 4}, /* 26 */ {"alarm", NULL, 0, 1}, /* 27 */ @@ -562,16 +562,16 @@ lx_sysent_t lx_sysent32[] = { {"rename", NULL, 0, 2}, /* 38 */ {"mkdir", lx_mkdir, 0, 2}, /* 39 */ {"rmdir", NULL, 0, 1}, /* 40 */ - {"dup", NULL, 0, 1}, /* 41 */ + {"dup", lx_dup, 0, 1}, /* 41 */ {"pipe", lx_pipe, 0, 1}, /* 42 */ {"times", NULL, 0, 1}, /* 43 */ {"prof", NULL, NOSYS_OBSOLETE, 0}, /* 44 */ {"brk", lx_brk, 0, 1}, /* 45 */ - {"setgid16", NULL, 0, 1}, /* 46 */ - {"getgid16", NULL, 0, 0}, /* 47 */ + {"setgid16", lx_setgid16, 0, 1}, /* 46 */ + {"getgid16", lx_getgid16, 0, 0}, /* 47 */ {"signal", NULL, 0, 2}, /* 48 */ - {"geteuid16", NULL, 0, 0}, /* 49 */ - {"getegid16", NULL, 0, 0}, /* 50 */ + {"geteuid16", lx_geteuid16, 0, 0}, /* 49 */ + {"getegid16", lx_getegid16, 0, 0}, /* 50 */ {"acct", NULL, NOSYS_NO_EQUIV, 0}, /* 51 */ {"umount2", lx_umount2, 0, 2}, /* 52 */ {"lock", NULL, NOSYS_OBSOLETE, 0}, /* 53 */ @@ -581,18 +581,18 @@ lx_sysent_t lx_sysent32[] = { {"setpgid", NULL, 0, 2}, /* 57 */ {"ulimit", NULL, NOSYS_OBSOLETE, 0}, /* 58 */ {"olduname", NULL, NOSYS_OBSOLETE, 0}, /* 59 */ - {"umask", NULL, 0, 1}, /* 60 */ + {"umask", lx_umask, 0, 1}, /* 60 */ {"chroot", NULL, 0, 1}, /* 61 */ {"ustat", NULL, NOSYS_OBSOLETE, 2}, /* 62 */ - {"dup2", NULL, 0, 2}, /* 63 */ + {"dup2", lx_dup2, 0, 2}, /* 63 */ {"getppid", lx_getppid, 0, 0}, /* 64 */ {"getpgrp", NULL, 0, 0}, /* 65 */ {"setsid", NULL, 0, 0}, /* 66 */ {"sigaction", NULL, 0, 3}, /* 67 */ {"sgetmask", NULL, NOSYS_OBSOLETE, 0}, /* 68 */ {"ssetmask", NULL, NOSYS_OBSOLETE, 0}, /* 69 */ - {"setreuid16", NULL, 0, 2}, /* 70 */ - {"setregid16", NULL, 0, 2}, /* 71 */ + {"setreuid16", lx_setreuid16, 0, 2}, /* 70 */ + {"setregid16", lx_setregid16, 0, 2}, /* 71 */ {"sigsuspend", NULL, 0, 1}, /* 72 */ {"sigpending", NULL, 0, 1}, /* 73 */ {"sethostname", NULL, 0, 2}, /* 74 */ @@ -686,13 +686,13 @@ lx_sysent_t lx_sysent32[] = { {"nanosleep", lx_nanosleep, 0, 2}, /* 162 */ {"mremap", NULL, 0, 5}, /* 163 */ {"setresuid16", lx_setresuid16, 0, 3}, /* 164 */ - {"getresuid16", NULL, 0, 3}, /* 165 */ + {"getresuid16", lx_getresuid16, 0, 3}, /* 165 */ {"vm86", NULL, NOSYS_NO_EQUIV, 0}, /* 166 */ {"query_module", NULL, 0, 5}, /* 167 */ {"poll", lx_poll, 0, 3}, /* 168 */ {"nfsservctl", NULL, NOSYS_KERNEL, 0}, /* 169 */ {"setresgid16", lx_setresgid16, 0, 3}, /* 170 */ - {"getresgid16", NULL, 0, 3}, /* 171 */ + {"getresgid16", lx_getresgid16, 0, 3}, /* 171 */ {"prctl", lx_prctl, 0, 5}, /* 172 */ {"rt_sigreturn", NULL, 0, 0}, /* 173 */ {"rt_sigaction", NULL, 0, 4}, /* 174 */ @@ -720,22 +720,22 @@ lx_sysent_t lx_sysent32[] = { {"lstat64", lx_lstat64, 0, 2}, /* 196 */ {"fstat64", lx_fstat64, 0, 2}, /* 197 */ {"lchown", lx_lchown, 0, 3}, /* 198 */ - {"getuid", NULL, 0, 0}, /* 199 */ - {"getgid", NULL, 0, 0}, /* 200 */ - {"geteuid", NULL, 0, 0}, /* 201 */ - {"getegid", NULL, 0, 0}, /* 202 */ - {"setreuid", NULL, 0, 0}, /* 203 */ - {"setregid", NULL, 0, 0}, /* 204 */ + {"getuid", lx_getuid, 0, 0}, /* 199 */ + {"getgid", lx_getgid, 0, 0}, /* 200 */ + {"geteuid", lx_geteuid, 0, 0}, /* 201 */ + {"getegid", lx_getegid, 0, 0}, /* 202 */ + {"setreuid", lx_setreuid, 0, 0}, /* 203 */ + {"setregid", lx_setregid, 0, 0}, /* 204 */ {"getgroups", NULL, 0, 2}, /* 205 */ {"setgroups", NULL, 0, 2}, /* 206 */ {"fchown", lx_fchown, 0, 3}, /* 207 */ {"setresuid", lx_setresuid, 0, 3}, /* 208 */ - {"getresuid", NULL, 0, 3}, /* 209 */ + {"getresuid", lx_getresuid, 0, 3}, /* 209 */ {"setresgid", lx_setresgid, 0, 3}, /* 210 */ - {"getresgid", NULL, 0, 3}, /* 211 */ + {"getresgid", lx_getresgid, 0, 3}, /* 211 */ {"chown", lx_chown, 0, 3}, /* 212 */ - {"setuid", NULL, 0, 1}, /* 213 */ - {"setgid", NULL, 0, 1}, /* 214 */ + {"setuid", lx_setuid, 0, 1}, /* 213 */ + {"setgid", lx_setgid, 0, 1}, /* 214 */ {"setfsuid", NULL, 0, 1}, /* 215 */ {"setfsgid", NULL, 0, 1}, /* 216 */ {"pivot_root", NULL, NOSYS_KERNEL, 0}, /* 217 */ @@ -855,7 +855,7 @@ lx_sysent_t lx_sysent32[] = { {"signalfd4", NULL, 0, 4}, /* 327 */ {"eventfd2", NULL, 0, 2}, /* 328 */ {"epoll_create1", lx_epoll_create1, 0, 1}, /* 329 */ - {"dup3", NULL, 0, 3}, /* 330 */ + {"dup3", lx_dup3, 0, 3}, /* 330 */ {"pipe2", lx_pipe2, 0, 2}, /* 331 */ {"inotify_init1", NULL, 0, 1}, /* 332 */ {"preadv", lx_preadv32, 0, 5}, /* 333 */ @@ -924,8 +924,8 @@ lx_sysent_t lx_sysent64[] = { {"shmget", NULL, 0, 3}, /* 29 */ {"shmat", NULL, 0, 4}, /* 30 */ {"shmctl", NULL, 0, 3}, /* 31 */ - {"dup", NULL, 0, 1}, /* 32 */ - {"dup2", NULL, 0, 2}, /* 33 */ + {"dup", lx_dup, 0, 1}, /* 32 */ + {"dup2", lx_dup2, 0, 2}, /* 33 */ {"pause", NULL, 0, 0}, /* 34 */ {"nanosleep", lx_nanosleep, 0, 2}, /* 35 */ {"getitimer", NULL, 0, 2}, /* 36 */ @@ -987,32 +987,32 @@ lx_sysent_t lx_sysent64[] = { {"chown", lx_chown, 0, 3}, /* 92 */ {"fchown", lx_fchown, 0, 3}, /* 93 */ {"lchown", lx_lchown, 0, 3}, /* 94 */ - {"umask", NULL, 0, 1}, /* 95 */ + {"umask", lx_umask, 0, 1}, /* 95 */ {"gettimeofday", lx_gettimeofday, 0, 2}, /* 96 */ {"getrlimit", lx_getrlimit, 0, 2}, /* 97 */ {"getrusage", NULL, 0, 2}, /* 98 */ {"sysinfo", lx_sysinfo64, 0, 1}, /* 99 */ {"times", NULL, 0, 1}, /* 100 */ {"ptrace", lx_ptrace, 0, 4}, /* 101 */ - {"getuid", NULL, 0, 0}, /* 102 */ + {"getuid", lx_getuid, 0, 0}, /* 102 */ {"syslog", NULL, 0, 3}, /* 103 */ - {"getgid", NULL, 0, 0}, /* 104 */ - {"setuid", NULL, 0, 1}, /* 105 */ - {"setgid", NULL, 0, 1}, /* 106 */ - {"geteuid", NULL, 0, 0}, /* 107 */ - {"getegid", NULL, 0, 0}, /* 108 */ + {"getgid", lx_getgid, 0, 0}, /* 104 */ + {"setuid", lx_setuid, 0, 1}, /* 105 */ + {"setgid", lx_setgid, 0, 1}, /* 106 */ + {"geteuid", lx_geteuid, 0, 0}, /* 107 */ + {"getegid", lx_getegid, 0, 0}, /* 108 */ {"setpgid", NULL, 0, 2}, /* 109 */ {"getppid", lx_getppid, 0, 0}, /* 110 */ {"getpgrp", NULL, 0, 0}, /* 111 */ {"setsid", NULL, 0, 0}, /* 112 */ - {"setreuid", NULL, 0, 0}, /* 113 */ - {"setregid", NULL, 0, 0}, /* 114 */ + {"setreuid", lx_setreuid, 0, 0}, /* 113 */ + {"setregid", lx_setregid, 0, 0}, /* 114 */ {"getgroups", NULL, 0, 2}, /* 115 */ {"setgroups", NULL, 0, 2}, /* 116 */ {"setresuid", lx_setresuid, 0, 3}, /* 117 */ - {"getresuid", NULL, 0, 3}, /* 118 */ + {"getresuid", lx_getresuid, 0, 3}, /* 118 */ {"setresgid", lx_setresgid, 0, 3}, /* 119 */ - {"getresgid", NULL, 0, 3}, /* 120 */ + {"getresgid", lx_getresgid, 0, 3}, /* 120 */ {"getpgid", NULL, 0, 1}, /* 121 */ {"setfsuid", NULL, 0, 1}, /* 122 */ {"setfsgid", NULL, 0, 1}, /* 123 */ @@ -1184,7 +1184,7 @@ lx_sysent_t lx_sysent64[] = { {"signalfd4", NULL, 0, 4}, /* 289 */ {"eventfd2", NULL, 0, 2}, /* 290 */ {"epoll_create1", lx_epoll_create1, 0, 1}, /* 291 */ - {"dup3", NULL, 0, 3}, /* 292 */ + {"dup3", lx_dup3, 0, 3}, /* 292 */ {"pipe2", lx_pipe2, 0, 2}, /* 293 */ {"inotify_init1", NULL, 0, 1}, /* 294 */ {"preadv", lx_preadv, 0, 4}, /* 295 */ diff --git a/usr/src/uts/common/brand/lx/sys/lx_syscalls.h b/usr/src/uts/common/brand/lx/sys/lx_syscalls.h index 2c0d982bd6..32442538d1 100644 --- a/usr/src/uts/common/brand/lx/sys/lx_syscalls.h +++ b/usr/src/uts/common/brand/lx/sys/lx_syscalls.h @@ -48,6 +48,9 @@ extern long lx_clock_gettime(); extern long lx_clock_settime(); extern long lx_close(); extern long lx_connect(); +extern long lx_dup(); +extern long lx_dup2(); +extern long lx_dup3(); extern long lx_epoll_create(); extern long lx_epoll_create1(); extern long lx_epoll_ctl(); @@ -78,15 +81,27 @@ extern long lx_getcwd(); extern long lx_getdents_32(); extern long lx_getdents_64(); extern long lx_getdents64(); +extern long lx_getegid(); +extern long lx_getegid16(); +extern long lx_geteuid(); +extern long lx_geteuid16(); +extern long lx_getgid(); +extern long lx_getgid16(); extern long lx_getpeername(); extern long lx_getsockname(); extern long lx_getpid(); extern long lx_getppid(); extern long lx_getrandom(); +extern long lx_getresgid(); +extern long lx_getresgid16(); +extern long lx_getresuid(); +extern long lx_getresuid16(); extern long lx_getrlimit(); extern long lx_getsockopt(); extern long lx_gettid(); extern long lx_gettimeofday(); +extern long lx_getuid(); +extern long lx_getuid16(); extern long lx_getxattr(); extern long lx_io_setup(); extern long lx_ioctl(); @@ -151,11 +166,19 @@ extern long lx_sendto(); extern long lx_set_robust_list(); extern long lx_set_thread_area(); extern long lx_set_tid_address(); +extern long lx_setgid(); +extern long lx_setgid16(); +extern long lx_setregid(); +extern long lx_setregid16(); extern long lx_setresgid(); extern long lx_setresgid16(); extern long lx_setresuid(); extern long lx_setresuid16(); +extern long lx_setreuid(); +extern long lx_setreuid16(); extern long lx_setrlimit(); +extern long lx_setuid(); +extern long lx_setuid16(); extern long lx_setxattr(); extern long lx_setsockopt(); extern long lx_shutdown(); @@ -172,6 +195,7 @@ extern long lx_removexattr(); extern long lx_tgkill(); extern long lx_time(); extern long lx_tkill(); +extern long lx_umask(); extern long lx_umount(); extern long lx_umount2(); extern long lx_uname(); diff --git a/usr/src/uts/common/brand/lx/syscall/lx_dup.c b/usr/src/uts/common/brand/lx/syscall/lx_dup.c new file mode 100644 index 0000000000..d0f513753c --- /dev/null +++ b/usr/src/uts/common/brand/lx/syscall/lx_dup.c @@ -0,0 +1,53 @@ +/* + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + */ + +/* + * Copyright 2016 Joyent, Inc. + */ + +#include <sys/types.h> +#include <sys/filio.h> +#include <sys/fcntl.h> +#include <sys/stat.h> +#include <sys/lx_fcntl.h> +#include <sys/lx_misc.h> + +/* From usr/src/uts/common/syscall/fcntl.c */ +extern int fcntl(int, int, intptr_t); + +long +lx_dup(int fd) +{ + return (fcntl(fd, F_DUPFD, 0)); +} + +long +lx_dup2(int oldfd, int newfd) +{ + return (fcntl(oldfd, F_DUP2FD, newfd)); +} + +long +lx_dup3(int oldfd, int newfd, int flags) +{ + int rc; + + /* The only valid flag is O_CLOEXEC. */ + if (flags & ~LX_O_CLOEXEC) + return (set_errno(EINVAL)); + + /* Only DUP2FD_CLOEXEC returns EINVAL on the same fd's */ + if (oldfd == newfd) + return (set_errno(EINVAL)); + + rc = fcntl(oldfd, (flags == 0) ? F_DUP2FD : F_DUP2FD_CLOEXEC, newfd); + return (rc); +} diff --git a/usr/src/uts/common/brand/lx/syscall/lx_id.c b/usr/src/uts/common/brand/lx/syscall/lx_id.c index f940b9763a..9bcd2dc8ad 100644 --- a/usr/src/uts/common/brand/lx/syscall/lx_id.c +++ b/usr/src/uts/common/brand/lx/syscall/lx_id.c @@ -30,30 +30,125 @@ #include <sys/systm.h> #include <sys/errno.h> #include <sys/zone.h> +#include <sys/cred.h> #include <sys/cred_impl.h> #include <sys/policy.h> +#include <sys/lx_types.h> -typedef ushort_t l_uid16_t; -typedef ushort_t l_gid16_t; -typedef uint_t l_uid_t; -typedef uint_t l_gid_t; - -#define LINUX_UID16_TO_UID32(uid16) \ - (((uid16) == (l_uid16_t)-1) ? ((l_uid_t)-1) : (l_uid_t)(uid16)) +#define LX_NGROUPS_MAX 32 -#define LINUX_GID16_TO_GID32(gid16) \ - (((gid16) == (l_gid16_t)-1) ? ((l_gid_t)-1) : (l_gid_t)(gid16)) +/* From usr/src/uts/common/syscall/gid.c & uid.c */ +extern int setgid(gid_t); +extern int setregid(gid_t, gid_t); +extern int setreuid(uid_t, uid_t); +extern int setuid(uid_t); -#define LX_NGROUPS_MAX 32 +/* From usr/src/uts/common/syscall/groups.c */ extern int setgroups(int, gid_t *); +long +lx_getegid(void) +{ + return (crgetgid(CRED())); +} + +long +lx_getegid16(void) +{ + return ((int)LX_GID32_TO_GID16(crgetgid(CRED()))); +} + +long +lx_geteuid(void) +{ + return (crgetuid(CRED())); +} + +long +lx_geteuid16(void) +{ + return ((int)LX_UID32_TO_UID16(crgetuid(CRED()))); +} + +long +lx_getgid(void) +{ + return (crgetrgid(CRED())); +} + +long +lx_getgid16(void) +{ + return ((int)LX_GID32_TO_GID16(crgetrgid(CRED()))); +} + +long +lx_getuid(void) +{ + return (crgetruid(CRED())); +} + +long +lx_getuid16(void) +{ + return ((int)LX_UID32_TO_UID16(crgetruid(CRED()))); +} + +long +lx_setgid(gid_t gid) +{ + return (setgid(gid)); +} + +long +lx_setgid16(lx_gid16_t gid) +{ + return (setgid(LX_GID16_TO_GID32(gid))); +} + +long +lx_setregid(gid_t rgid, gid_t egid) +{ + return (setregid(rgid, egid)); +} + +long +lx_setregid16(lx_gid16_t rgid, lx_gid16_t egid) +{ + return (setregid(LX_UID16_TO_UID32(rgid), LX_UID16_TO_UID32(egid))); +} + +long +lx_setreuid(uid_t ruid, uid_t euid) +{ + return (setreuid(ruid, euid)); +} + +long +lx_setreuid16(lx_uid16_t ruid, lx_uid16_t euid) +{ + return (setreuid(LX_UID16_TO_UID32(ruid), LX_UID16_TO_UID32(euid))); +} + +long +lx_setuid(uid_t uid) +{ + return (setuid(uid)); +} + +long +lx_setuid16(lx_uid16_t uid) +{ + return (setuid(LX_UID16_TO_UID32(uid))); +} + /* * This function is based on setreuid in common/syscall/uid.c and exists * because illumos does not have a way to explicitly set the saved uid (suid) * from any other system call. */ long -lx_setresuid(l_uid_t ruid, l_uid_t euid, l_uid_t suid) +lx_setresuid(lx_uid_t ruid, lx_uid_t euid, lx_uid_t suid) { proc_t *p; int error = 0; @@ -173,14 +268,14 @@ done: } long -lx_setresuid16(l_uid16_t ruid16, l_uid16_t euid16, l_uid16_t suid16) +lx_setresuid16(lx_uid16_t ruid16, lx_uid16_t euid16, lx_uid16_t suid16) { long rval; rval = lx_setresuid( - LINUX_UID16_TO_UID32(ruid16), - LINUX_UID16_TO_UID32(euid16), - LINUX_UID16_TO_UID32(suid16)); + LX_UID16_TO_UID32(ruid16), + LX_UID16_TO_UID32(euid16), + LX_UID16_TO_UID32(suid16)); return (rval); } @@ -189,7 +284,7 @@ lx_setresuid16(l_uid16_t ruid16, l_uid16_t euid16, l_uid16_t suid16) * This function is based on setregid in common/syscall/gid.c */ long -lx_setresgid(l_gid_t rgid, l_gid_t egid, l_gid_t sgid) +lx_setresgid(lx_gid_t rgid, lx_gid_t egid, lx_gid_t sgid) { proc_t *p; int error = 0; @@ -268,14 +363,14 @@ done: } long -lx_setresgid16(l_gid16_t rgid16, l_gid16_t egid16, l_gid16_t sgid16) +lx_setresgid16(lx_gid16_t rgid16, lx_gid16_t egid16, lx_gid16_t sgid16) { long rval; rval = lx_setresgid( - LINUX_GID16_TO_GID32(rgid16), - LINUX_GID16_TO_GID32(egid16), - LINUX_GID16_TO_GID32(sgid16)); + LX_GID16_TO_GID32(rgid16), + LX_GID16_TO_GID32(egid16), + LX_GID16_TO_GID32(sgid16)); return (rval); } @@ -294,3 +389,83 @@ lx_helper_setgroups(int ngroups, gid_t *grouplist) return (setgroups(ngroups, grouplist)); } + +long +lx_getresuid(lx_uid_t *ruid, lx_uid_t *euid, lx_uid_t *suid) +{ + lx_uid_t lx_ruid, lx_euid, lx_suid; + cred_t *cr = CRED(); + + lx_ruid = (lx_uid_t)crgetruid(cr); + lx_euid = (lx_uid_t)crgetuid(cr); + lx_suid = (lx_uid_t)crgetsuid(cr); + + if (copyout(&lx_ruid, (void *)ruid, sizeof (lx_uid_t)) != 0) + return (set_errno(EFAULT)); + if (copyout(&lx_euid, (void *)euid, sizeof (lx_uid_t)) != 0) + return (set_errno(EFAULT)); + if (copyout(&lx_suid, (void *)suid, sizeof (lx_uid_t)) != 0) + return (set_errno(EFAULT)); + + return (0); +} + +long +lx_getresuid16(lx_uid16_t *ruid16, lx_uid16_t *euid16, lx_uid16_t *suid16) +{ + lx_uid16_t lx_ruid16, lx_euid16, lx_suid16; + cred_t *cr = CRED(); + + lx_ruid16 = LX_UID32_TO_UID16((lx_uid_t)crgetruid(cr)); + lx_euid16 = LX_UID32_TO_UID16((lx_uid_t)crgetuid(cr)); + lx_suid16 = LX_UID32_TO_UID16((lx_uid_t)crgetsuid(cr)); + + if (copyout(&lx_ruid16, (void *)ruid16, sizeof (lx_uid16_t)) != 0) + return (set_errno(EFAULT)); + if (copyout(&lx_euid16, (void *)euid16, sizeof (lx_uid16_t)) != 0) + return (set_errno(EFAULT)); + if (copyout(&lx_suid16, (void *)suid16, sizeof (lx_uid16_t)) != 0) + return (set_errno(EFAULT)); + + return (0); +} + +long +lx_getresgid(lx_gid_t *rgid, lx_gid_t *egid, lx_gid_t *sgid) +{ + lx_gid_t lx_rgid, lx_egid, lx_sgid; + cred_t *cr = CRED(); + + lx_rgid = (lx_gid_t)crgetrgid(cr); + lx_egid = (lx_gid_t)crgetgid(cr); + lx_sgid = (lx_gid_t)crgetsgid(cr); + + if (copyout(&lx_rgid, (void *)rgid, sizeof (lx_gid_t)) != 0) + return (set_errno(EFAULT)); + if (copyout(&lx_egid, (void *)egid, sizeof (lx_gid_t)) != 0) + return (set_errno(EFAULT)); + if (copyout(&lx_sgid, (void *)sgid, sizeof (lx_gid_t)) != 0) + return (set_errno(EFAULT)); + + return (0); +} + +long +lx_getresgid16(lx_gid16_t *rgid16, lx_gid16_t *egid16, lx_gid16_t *sgid16) +{ + lx_gid16_t lx_rgid16, lx_egid16, lx_sgid16; + cred_t *cr = CRED(); + + lx_rgid16 = LX_GID32_TO_GID16((lx_gid_t)crgetrgid(cr)); + lx_egid16 = LX_GID32_TO_GID16((lx_gid_t)crgetgid(cr)); + lx_sgid16 = LX_GID32_TO_GID16((lx_gid_t)crgetsgid(cr)); + + if (copyout(&lx_rgid16, (void *)rgid16, sizeof (lx_gid16_t)) != 0) + return (set_errno(EFAULT)); + if (copyout(&lx_egid16, (void *)egid16, sizeof (lx_gid16_t)) != 0) + return (set_errno(EFAULT)); + if (copyout(&lx_sgid16, (void *)sgid16, sizeof (lx_gid16_t)) != 0) + return (set_errno(EFAULT)); + + return (0); +} diff --git a/usr/src/uts/common/brand/lx/syscall/lx_umask.c b/usr/src/uts/common/brand/lx/syscall/lx_umask.c new file mode 100644 index 0000000000..130af6c776 --- /dev/null +++ b/usr/src/uts/common/brand/lx/syscall/lx_umask.c @@ -0,0 +1,25 @@ +/* + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + */ + +/* + * Copyright 2016 Joyent, Inc. + */ + +#include <sys/types.h> + +/* From usr/src/uts/common/syscall/umask.c */ +extern int umask(int); + +long +lx_umask(mode_t cmask) +{ + return (umask(cmask)); +} diff --git a/usr/src/uts/intel/Makefile.files b/usr/src/uts/intel/Makefile.files index 3f8865ff1c..ff375b0c72 100644 --- a/usr/src/uts/intel/Makefile.files +++ b/usr/src/uts/intel/Makefile.files @@ -317,6 +317,7 @@ LX_BRAND_OBJS = \ lx_clone.o \ lx_close.o \ lx_cpu.o \ + lx_dup.o \ lx_errno.o \ lx_epoll.o \ lx_fallocate.o \ @@ -355,6 +356,7 @@ LX_BRAND_OBJS = \ lx_sysinfo.o \ lx_thread_area.o \ lx_timer.o \ + lx_umask.o \ lx_uname.o \ lx_wait.o \ lx_xattr.o |