Skip to content

Commit d0df966

Browse files
mateusz834gopherbot
authored andcommitted
unix: support all Setuid/Setgid and related syscalls on Linux
Fixes golang/go#53444 Change-Id: I284e85f954f1646f7026478987db74993ae06d4a GitHub-Last-Rev: 490f814 GitHub-Pull-Request: #134 Reviewed-on: https://go-review.googlesource.com/c/sys/+/428174 Reviewed-by: Michael Knyszek <[email protected]> Run-TryBot: Ian Lance Taylor <[email protected]> Run-TryBot: Ian Lance Taylor <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]> Auto-Submit: Ian Lance Taylor <[email protected]>
1 parent 9e1f761 commit d0df966

28 files changed

+19
-656
lines changed

unix/syscall_linux.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1892,17 +1892,28 @@ func PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uint
18921892
return int(ret), nil
18931893
}
18941894

1895-
// issue 1435.
1896-
// On linux Setuid and Setgid only affects the current thread, not the process.
1897-
// This does not match what most callers expect so we must return an error
1898-
// here rather than letting the caller think that the call succeeded.
1899-
19001895
func Setuid(uid int) (err error) {
1901-
return EOPNOTSUPP
1896+
return syscall.Setuid(uid)
1897+
}
1898+
1899+
func Setgid(gid int) (err error) {
1900+
return syscall.Setgid(gid)
1901+
}
1902+
1903+
func Setreuid(ruid, euid int) (err error) {
1904+
return syscall.Setreuid(ruid, euid)
1905+
}
1906+
1907+
func Setregid(rgid, egid int) (err error) {
1908+
return syscall.Setregid(rgid, egid)
1909+
}
1910+
1911+
func Setresuid(ruid, euid, suid int) (err error) {
1912+
return syscall.Setresuid(ruid, euid, suid)
19021913
}
19031914

1904-
func Setgid(uid int) (err error) {
1905-
return EOPNOTSUPP
1915+
func Setresgid(rgid, egid, sgid int) (err error) {
1916+
return syscall.Setresgid(rgid, egid, sgid)
19061917
}
19071918

19081919
// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set.

unix/syscall_linux_386.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,6 @@ func setTimeval(sec, usec int64) Timeval {
4141
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
4242
//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
4343
//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
44-
//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
45-
//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
46-
//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
47-
//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32
4844
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
4945
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
5046
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)

unix/syscall_linux_amd64.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
4646
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
4747
//sys setfsgid(gid int) (prev int, err error)
4848
//sys setfsuid(uid int) (prev int, err error)
49-
//sysnb Setregid(rgid int, egid int) (err error)
50-
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
51-
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
5249
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
53-
//sysnb Setreuid(ruid int, euid int) (err error)
5450
//sys Shutdown(fd int, how int) (err error)
5551
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
5652

unix/syscall_linux_arm.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
6262
//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
6363
//sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
6464
//sys setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
65-
//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
66-
//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
67-
//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
68-
//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32
6965
//sys Shutdown(fd int, how int) (err error)
7066
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
7167
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64

unix/syscall_linux_arm64.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
3939
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
4040
//sys setfsgid(gid int) (prev int, err error)
4141
//sys setfsuid(uid int) (prev int, err error)
42-
//sysnb Setregid(rgid int, egid int) (err error)
43-
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
44-
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
4542
//sysnb setrlimit(resource int, rlim *Rlimit) (err error)
46-
//sysnb Setreuid(ruid int, euid int) (err error)
4743
//sys Shutdown(fd int, how int) (err error)
4844
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
4945

unix/syscall_linux_loong64.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
3434
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
3535
//sys setfsgid(gid int) (prev int, err error)
3636
//sys setfsuid(uid int) (prev int, err error)
37-
//sysnb Setregid(rgid int, egid int) (err error)
38-
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
39-
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
40-
//sysnb Setreuid(ruid int, euid int) (err error)
4137
//sys Shutdown(fd int, how int) (err error)
4238
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
4339

unix/syscall_linux_mips64x.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
3737
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
3838
//sys setfsgid(gid int) (prev int, err error)
3939
//sys setfsuid(uid int) (prev int, err error)
40-
//sysnb Setregid(rgid int, egid int) (err error)
41-
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
42-
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
4340
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
44-
//sysnb Setreuid(ruid int, euid int) (err error)
4541
//sys Shutdown(fd int, how int) (err error)
4642
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
4743
//sys Statfs(path string, buf *Statfs_t) (err error)

unix/syscall_linux_mipsx.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,6 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
3232
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
3333
//sys setfsgid(gid int) (prev int, err error)
3434
//sys setfsuid(uid int) (prev int, err error)
35-
//sysnb Setregid(rgid int, egid int) (err error)
36-
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
37-
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
38-
//sysnb Setreuid(ruid int, euid int) (err error)
3935
//sys Shutdown(fd int, how int) (err error)
4036
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
4137
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)

unix/syscall_linux_ppc.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@ import (
3434
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
3535
//sys setfsgid(gid int) (prev int, err error)
3636
//sys setfsuid(uid int) (prev int, err error)
37-
//sysnb Setregid(rgid int, egid int) (err error)
38-
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
39-
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
40-
//sysnb Setreuid(ruid int, euid int) (err error)
4137
//sys Shutdown(fd int, how int) (err error)
4238
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
4339
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64

unix/syscall_linux_ppc64x.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,7 @@ package unix
3434
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
3535
//sys setfsgid(gid int) (prev int, err error)
3636
//sys setfsuid(uid int) (prev int, err error)
37-
//sysnb Setregid(rgid int, egid int) (err error)
38-
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
39-
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
4037
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
41-
//sysnb Setreuid(ruid int, euid int) (err error)
4238
//sys Shutdown(fd int, how int) (err error)
4339
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
4440
//sys Stat(path string, stat *Stat_t) (err error)

0 commit comments

Comments
 (0)