diff options
| author | Jakob Unterwurzacher | 2025-02-26 21:38:36 +0100 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2025-02-26 21:38:36 +0100 | 
| commit | 6b1ba5846b17eec710a70cb6c6bf23e3f2024289 (patch) | |
| tree | d184579ee8f0a746b373801087999374250b58ba | |
| parent | 07b1bd7ce810c83ed622885b65dbba3dab0f7fbb (diff) | |
syscallcompat: use our own Setgroups/Setregid/Setreuid wrappers
x/sys v0.1.0 (https://github.com/golang/sys/commit/d0df966e6959f00dc1c74363e537872647352d51)
breaks our usecase. Switch to our own wrappers.
Relates-to: https://github.com/rfjakob/gocryptfs/issues/892
Relates-to: https://github.com/rfjakob/gocryptfs/issues/893
| -rw-r--r-- | internal/syscallcompat/asuser_linux.go | 19 | 
1 files changed, 10 insertions, 9 deletions
diff --git a/internal/syscallcompat/asuser_linux.go b/internal/syscallcompat/asuser_linux.go index d0224bc..804a898 100644 --- a/internal/syscallcompat/asuser_linux.go +++ b/internal/syscallcompat/asuser_linux.go @@ -7,8 +7,6 @@ import (  	"strconv"  	"strings" -	"golang.org/x/sys/unix" -  	"github.com/hanwen/go-fuse/v2/fuse"  ) @@ -29,25 +27,28 @@ func asUser(f func() (int, error), context *fuse.Context) (int, error) {  	// syscall.{Setgroups,Setregid,Setreuid} affects all threads, which  	// is exactly what we not want.  	// -	// We now use unix.{Setgroups,Setregid,Setreuid} instead. +	// And unix.{Setgroups,Setregid,Setreuid} also changed to this behavoir in +	// v0.1.0 (commit d0df966e6959f00dc1c74363e537872647352d51 , +	// https://go-review.googlesource.com/c/sys/+/428174 ), so we use +	// our own syscall wrappers. -	err := unix.Setgroups(getSupplementaryGroups(context.Pid)) +	err := Setgroups(getSupplementaryGroups(context.Pid))  	if err != nil {  		return -1, err  	} -	defer unix.Setgroups(nil) +	defer SetgroupsPanic(nil) -	err = unix.Setregid(-1, int(context.Owner.Gid)) +	err = Setregid(-1, int(context.Owner.Gid))  	if err != nil {  		return -1, err  	} -	defer unix.Setregid(-1, 0) +	defer SetregidPanic(-1, 0) -	err = unix.Setreuid(-1, int(context.Owner.Uid)) +	err = Setreuid(-1, int(context.Owner.Uid))  	if err != nil {  		return -1, err  	} -	defer unix.Setreuid(-1, 0) +	defer SetreuidPanic(-1, 0)  	return f()  }  | 
