// User and groups
if cred := sys.Credential; cred != nil {
ngroups := uintptr(len(cred.Groups))
- var groups unsafe.Pointer
if ngroups > 0 {
- groups = unsafe.Pointer(&cred.Groups[0])
- }
- _, _, err1 = RawSyscall(SYS_SETGROUPS, ngroups, uintptr(groups), 0)
- if err1 != 0 {
- goto childerror
+ groups := unsafe.Pointer(&cred.Groups[0])
+ _, _, err1 = RawSyscall(SYS_SETGROUPS, ngroups, uintptr(groups), 0)
+ if err1 != 0 {
+ goto childerror
+ }
}
_, _, err1 = RawSyscall(SYS_SETGID, uintptr(cred.Gid), 0, 0)
if err1 != 0 {
t.Fatalf("Unprivileged gid_map rewriting with GidMappingsEnableSetgroups must fail")
}
}
+
+func TestEmptyCredGroupsDisableSetgroups(t *testing.T) {
+ cmd := whoamiCmd(t, os.Getuid(), os.Getgid(), false)
+ cmd.SysProcAttr.Credential = &syscall.Credential{}
+ if err := cmd.Run(); err != nil {
+ t.Fatal(err)
+ }
+}