mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
gVisor: Refactor SyscallFn to take in the syscall number as argument.
This will be used to plumb the syscall number through to a counter metric that exports the number of times an unimplemented syscall has been called. Plenty of syscall implementations call `EmitUnimplementedEvent` for flags and settings that are not implemented. With `sysno` available, they will be able to plumb that bit of information through. PiperOrigin-RevId: 518635831
This commit is contained in:
committed by
gVisor bot
parent
08920d098b
commit
44e2d0fcfe
@@ -1534,7 +1534,7 @@ const (
|
||||
|
||||
// EmitUnimplementedEvent emits an UnimplementedSyscall event via the event
|
||||
// channel.
|
||||
func (k *Kernel) EmitUnimplementedEvent(ctx context.Context) {
|
||||
func (k *Kernel) EmitUnimplementedEvent(ctx context.Context, sysno uintptr) {
|
||||
k.unimplementedSyscallEmitterOnce.Do(func() {
|
||||
k.unimplementedSyscallEmitter = eventchannel.RateLimitedEmitterFrom(eventchannel.DefaultEmitter, unimplementedSyscallsMaxRate, unimplementedSyscallBurst)
|
||||
})
|
||||
|
||||
@@ -90,7 +90,7 @@ type Syscall struct {
|
||||
}
|
||||
|
||||
// SyscallFn is a syscall implementation.
|
||||
type SyscallFn func(t *Task, args arch.SyscallArguments) (uintptr, *SyscallControl, error)
|
||||
type SyscallFn func(t *Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *SyscallControl, error)
|
||||
|
||||
// MissingFn is a syscall to be called when an implementation is missing.
|
||||
type MissingFn func(t *Task, sysno uintptr, args arch.SyscallArguments) (uintptr, error)
|
||||
|
||||
@@ -30,7 +30,7 @@ func createSyscallTable() *SyscallTable {
|
||||
for i := uintptr(0); i <= maxTestSyscall; i++ {
|
||||
j := i
|
||||
m[i] = Syscall{
|
||||
Fn: func(*Task, arch.SyscallArguments) (uintptr, *SyscallControl, error) {
|
||||
Fn: func(t *Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *SyscallControl, error) {
|
||||
return j, nil, nil
|
||||
},
|
||||
}
|
||||
@@ -61,7 +61,7 @@ func TestTable(t *testing.T) {
|
||||
continue
|
||||
}
|
||||
|
||||
v, _, _ := fn(nil, arch.SyscallArguments{})
|
||||
v, _, _ := fn(nil, i, arch.SyscallArguments{})
|
||||
if v != i {
|
||||
t.Errorf("Wrong return value for syscall %v: expected %v, got %v", i, i, v)
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ func (t *Task) executeSyscall(sysno uintptr, args arch.SyscallArguments) (rval u
|
||||
}
|
||||
if fn != nil {
|
||||
// Call our syscall implementation.
|
||||
rval, ctrl, err = fn(t, args)
|
||||
rval, ctrl, err = fn(t, sysno, args)
|
||||
} else {
|
||||
// Use the missing function if not found.
|
||||
rval, err = t.SyscallTable().Missing(t, sysno, args)
|
||||
|
||||
@@ -414,7 +414,7 @@ var AMD64 = &kernel.SyscallTable{
|
||||
0xffffffffff600800: 309, // vsyscall getcpu(2)
|
||||
},
|
||||
Missing: func(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, error) {
|
||||
t.Kernel().EmitUnimplementedEvent(t)
|
||||
t.Kernel().EmitUnimplementedEvent(t, sysno)
|
||||
return 0, linuxerr.ENOSYS
|
||||
},
|
||||
}
|
||||
@@ -731,7 +731,7 @@ var ARM64 = &kernel.SyscallTable{
|
||||
},
|
||||
Emulate: map[hostarch.Addr]uintptr{},
|
||||
Missing: func(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, error) {
|
||||
t.Kernel().EmitUnimplementedEvent(t)
|
||||
t.Kernel().EmitUnimplementedEvent(t, sysno)
|
||||
return 0, linuxerr.ENOSYS
|
||||
},
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ func SetAFSSyscallPanic(v bool) {
|
||||
|
||||
// AFSSyscall is a gVisor specific implementation of afs_syscall:
|
||||
// - if TESTONLY-afs-syscall-panic flag is set it triggers a panic.
|
||||
func AFSSyscall(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func AFSSyscall(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
if afsSyscallPanic.Load() {
|
||||
panic("User workload triggered a panic via afs_syscall. This panic is intentional.")
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ import (
|
||||
)
|
||||
|
||||
// IoSetup implements linux syscall io_setup(2).
|
||||
func IoSetup(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func IoSetup(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
nrEvents := args[0].Int()
|
||||
idAddr := args[1].Pointer()
|
||||
|
||||
@@ -60,7 +60,7 @@ func IoSetup(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sysca
|
||||
}
|
||||
|
||||
// IoDestroy implements linux syscall io_destroy(2).
|
||||
func IoDestroy(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func IoDestroy(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
id := args[0].Uint64()
|
||||
|
||||
ctx := t.MemoryManager().DestroyAIOContext(t, id)
|
||||
@@ -88,7 +88,7 @@ func IoDestroy(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// IoGetevents implements linux syscall io_getevents(2).
|
||||
func IoGetevents(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func IoGetevents(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
id := args[0].Uint64()
|
||||
minEvents := args[1].Int()
|
||||
events := args[2].Int()
|
||||
@@ -214,12 +214,12 @@ func memoryFor(t *kernel.Task, cb *linux.IOCallback) (usermem.IOSequence, error)
|
||||
//
|
||||
// It is not presently supported (ENOSYS indicates no support on this
|
||||
// architecture).
|
||||
func IoCancel(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func IoCancel(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
return 0, nil, linuxerr.ENOSYS
|
||||
}
|
||||
|
||||
// IoSubmit implements linux syscall io_submit(2).
|
||||
func IoSubmit(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func IoSubmit(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
id := args[0].Uint64()
|
||||
nrEvents := args[1].Int()
|
||||
addr := args[2].Pointer()
|
||||
|
||||
@@ -40,7 +40,7 @@ func lookupCaps(t *kernel.Task, tid kernel.ThreadID) (permitted, inheritable, ef
|
||||
}
|
||||
|
||||
// Capget implements Linux syscall capget.
|
||||
func Capget(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Capget(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
hdrAddr := args[0].Pointer()
|
||||
dataAddr := args[1].Pointer()
|
||||
|
||||
@@ -104,7 +104,7 @@ func Capget(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
|
||||
}
|
||||
|
||||
// Capset implements Linux syscall capset.
|
||||
func Capset(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Capset(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
hdrAddr := args[0].Pointer()
|
||||
dataAddr := args[1].Pointer()
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ import (
|
||||
// x86_64:
|
||||
//
|
||||
// sys_clone(clone_flags, newsp, parent_tidptr, child_tidptr, tls_val)
|
||||
func Clone(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Clone(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
flags := int(args[0].Int())
|
||||
stack := args[1].Pointer()
|
||||
parentTID := args[2].Pointer()
|
||||
|
||||
@@ -27,7 +27,7 @@ import (
|
||||
// arm64(kernel/fork.c with CONFIG_CLONE_BACKWARDS defined in the config file):
|
||||
//
|
||||
// sys_clone(clone_flags, newsp, parent_tidptr, tls_val, child_tidptr)
|
||||
func Clone(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Clone(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
flags := int(args[0].Int())
|
||||
stack := args[1].Pointer()
|
||||
parentTID := args[2].Pointer()
|
||||
|
||||
@@ -31,7 +31,7 @@ import (
|
||||
var sizeofEpollEvent = (*linux.EpollEvent)(nil).SizeBytes()
|
||||
|
||||
// EpollCreate1 implements Linux syscall epoll_create1(2).
|
||||
func EpollCreate1(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func EpollCreate1(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
flags := args[0].Int()
|
||||
if flags&^linux.EPOLL_CLOEXEC != 0 {
|
||||
return 0, nil, linuxerr.EINVAL
|
||||
@@ -53,7 +53,7 @@ func EpollCreate1(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.
|
||||
}
|
||||
|
||||
// EpollCreate implements Linux syscall epoll_create(2).
|
||||
func EpollCreate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func EpollCreate(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
size := args[0].Int()
|
||||
|
||||
// "Since Linux 2.6.8, the size argument is ignored, but must be greater
|
||||
@@ -76,7 +76,7 @@ func EpollCreate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.S
|
||||
}
|
||||
|
||||
// EpollCtl implements Linux syscall epoll_ctl(2).
|
||||
func EpollCtl(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func EpollCtl(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
epfd := args[0].Int()
|
||||
op := args[1].Int()
|
||||
fd := args[2].Int()
|
||||
@@ -187,7 +187,7 @@ func waitEpoll(t *kernel.Task, epfd int32, eventsAddr hostarch.Addr, maxEvents i
|
||||
}
|
||||
|
||||
// EpollWait implements Linux syscall epoll_wait(2).
|
||||
func EpollWait(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func EpollWait(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
epfd := args[0].Int()
|
||||
eventsAddr := args[1].Pointer()
|
||||
maxEvents := int(args[2].Int())
|
||||
@@ -197,7 +197,7 @@ func EpollWait(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// EpollPwait implements Linux syscall epoll_pwait(2).
|
||||
func EpollPwait(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func EpollPwait(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
maskAddr := args[4].Pointer()
|
||||
maskSize := uint(args[5].Uint())
|
||||
|
||||
@@ -205,11 +205,11 @@ func EpollPwait(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sy
|
||||
return 0, nil, err
|
||||
}
|
||||
|
||||
return EpollWait(t, args)
|
||||
return EpollWait(t, sysno, args)
|
||||
}
|
||||
|
||||
// EpollPwait2 implements Linux syscall epoll_pwait(2).
|
||||
func EpollPwait2(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func EpollPwait2(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
epfd := args[0].Int()
|
||||
eventsAddr := args[1].Pointer()
|
||||
maxEvents := int(args[2].Int())
|
||||
|
||||
@@ -23,7 +23,7 @@ import (
|
||||
)
|
||||
|
||||
// Eventfd2 implements linux syscall eventfd2(2).
|
||||
func Eventfd2(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Eventfd2(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
initVal := uint64(args[0].Uint())
|
||||
flags := uint(args[1].Uint())
|
||||
allOps := uint(linux.EFD_SEMAPHORE | linux.EFD_NONBLOCK | linux.EFD_CLOEXEC)
|
||||
@@ -55,7 +55,7 @@ func Eventfd2(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sysc
|
||||
}
|
||||
|
||||
// Eventfd implements linux syscall eventfd(2).
|
||||
func Eventfd(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Eventfd(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
args[1].Value = 0
|
||||
return Eventfd2(t, args)
|
||||
return Eventfd2(t, sysno, args)
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ import (
|
||||
)
|
||||
|
||||
// Mknod implements Linux syscall mknod(2).
|
||||
func Mknod(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Mknod(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
mode := args[1].ModeT()
|
||||
dev := args[2].Uint()
|
||||
@@ -43,7 +43,7 @@ func Mknod(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscall
|
||||
}
|
||||
|
||||
// Mknodat implements Linux syscall mknodat(2).
|
||||
func Mknodat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Mknodat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
addr := args[1].Pointer()
|
||||
mode := args[2].ModeT()
|
||||
@@ -75,7 +75,7 @@ func mknodat(t *kernel.Task, dirfd int32, addr hostarch.Addr, mode linux.FileMod
|
||||
}
|
||||
|
||||
// Open implements Linux syscall open(2).
|
||||
func Open(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Open(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
flags := args[1].Uint()
|
||||
mode := args[2].ModeT()
|
||||
@@ -83,7 +83,7 @@ func Open(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallC
|
||||
}
|
||||
|
||||
// Openat implements Linux syscall openat(2).
|
||||
func Openat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Openat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
addr := args[1].Pointer()
|
||||
flags := args[2].Uint()
|
||||
@@ -92,7 +92,7 @@ func Openat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
|
||||
}
|
||||
|
||||
// Creat implements Linux syscall creat(2).
|
||||
func Creat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Creat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
mode := args[1].ModeT()
|
||||
return openat(t, linux.AT_FDCWD, addr, linux.O_WRONLY|linux.O_CREAT|linux.O_TRUNC, mode)
|
||||
@@ -125,7 +125,7 @@ func openat(t *kernel.Task, dirfd int32, pathAddr hostarch.Addr, flags uint32, m
|
||||
}
|
||||
|
||||
// Access implements Linux syscall access(2).
|
||||
func Access(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Access(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
mode := args[1].ModeT()
|
||||
|
||||
@@ -133,7 +133,7 @@ func Access(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
|
||||
}
|
||||
|
||||
// Faccessat implements Linux syscall faccessat(2).
|
||||
func Faccessat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Faccessat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
addr := args[1].Pointer()
|
||||
mode := args[2].ModeT()
|
||||
@@ -142,7 +142,7 @@ func Faccessat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// Faccessat2 implements Linux syscall faccessat2(2).
|
||||
func Faccessat2(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Faccessat2(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
addr := args[1].Pointer()
|
||||
mode := args[2].ModeT()
|
||||
@@ -199,7 +199,7 @@ func accessAt(t *kernel.Task, dirfd int32, pathAddr hostarch.Addr, mode uint, fl
|
||||
}
|
||||
|
||||
// Ioctl implements Linux syscall ioctl(2).
|
||||
func Ioctl(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Ioctl(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
|
||||
file := t.GetFile(fd)
|
||||
@@ -288,7 +288,7 @@ func Ioctl(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscall
|
||||
}
|
||||
|
||||
// Getcwd implements Linux syscall getcwd(2).
|
||||
func Getcwd(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Getcwd(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
size := args[1].SizeT()
|
||||
|
||||
@@ -320,7 +320,7 @@ func Getcwd(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
|
||||
}
|
||||
|
||||
// Chdir implements Linux syscall chdir(2).
|
||||
func Chdir(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Chdir(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
|
||||
path, err := copyInPath(t, addr)
|
||||
@@ -345,7 +345,7 @@ func Chdir(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscall
|
||||
}
|
||||
|
||||
// Fchdir implements Linux syscall fchdir(2).
|
||||
func Fchdir(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Fchdir(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
|
||||
tpop, err := getTaskPathOperation(t, fd, fspath.Path{}, allowEmptyPath, nofollowFinalSymlink)
|
||||
@@ -366,7 +366,7 @@ func Fchdir(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
|
||||
}
|
||||
|
||||
// Chroot implements Linux syscall chroot(2).
|
||||
func Chroot(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Chroot(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
|
||||
if !t.HasCapability(linux.CAP_SYS_CHROOT) {
|
||||
@@ -395,7 +395,7 @@ func Chroot(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
|
||||
}
|
||||
|
||||
// PivotRoot implements Linux syscall pivot_root(2).
|
||||
func PivotRoot(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func PivotRoot(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr1 := args[0].Pointer()
|
||||
addr2 := args[1].Pointer()
|
||||
|
||||
@@ -440,7 +440,7 @@ func PivotRoot(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// Close implements Linux syscall close(2).
|
||||
func Close(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Close(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
|
||||
// Note that Remove provides a reference on the file that we may use to
|
||||
@@ -457,7 +457,7 @@ func Close(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscall
|
||||
}
|
||||
|
||||
// CloseRange implements linux syscall close_range(2).
|
||||
func CloseRange(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func CloseRange(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
first := args[0].Uint()
|
||||
last := args[1].Uint()
|
||||
flags := args[2].Uint()
|
||||
@@ -511,7 +511,7 @@ func CloseRange(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sy
|
||||
}
|
||||
|
||||
// Dup implements Linux syscall dup(2).
|
||||
func Dup(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Dup(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
|
||||
file := t.GetFile(fd)
|
||||
@@ -528,7 +528,7 @@ func Dup(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallCo
|
||||
}
|
||||
|
||||
// Dup2 implements Linux syscall dup2(2).
|
||||
func Dup2(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Dup2(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
oldfd := args[0].Int()
|
||||
newfd := args[1].Int()
|
||||
|
||||
@@ -546,7 +546,7 @@ func Dup2(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallC
|
||||
}
|
||||
|
||||
// Dup3 implements Linux syscall dup3(2).
|
||||
func Dup3(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Dup3(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
oldfd := args[0].Int()
|
||||
newfd := args[1].Int()
|
||||
flags := args[2].Uint()
|
||||
@@ -579,7 +579,7 @@ func dup3(t *kernel.Task, oldfd, newfd int32, flags uint32) (uintptr, *kernel.Sy
|
||||
}
|
||||
|
||||
// Fcntl implements linux syscall fcntl(2).
|
||||
func Fcntl(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Fcntl(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
cmd := args[1].Int()
|
||||
|
||||
@@ -879,7 +879,7 @@ func posixLock(t *kernel.Task, args arch.SyscallArguments, file *vfs.FileDescrip
|
||||
|
||||
// Fadvise64 implements fadvise64(2).
|
||||
// This implementation currently ignores the provided advice.
|
||||
func Fadvise64(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Fadvise64(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
length := args[2].Int64()
|
||||
advice := args[3].Int()
|
||||
@@ -920,14 +920,14 @@ func Fadvise64(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// Mkdir implements Linux syscall mkdir(2).
|
||||
func Mkdir(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Mkdir(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
mode := args[1].ModeT()
|
||||
return 0, nil, mkdirat(t, linux.AT_FDCWD, addr, mode)
|
||||
}
|
||||
|
||||
// Mkdirat implements Linux syscall mkdirat(2).
|
||||
func Mkdirat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Mkdirat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
addr := args[1].Pointer()
|
||||
mode := args[2].ModeT()
|
||||
@@ -950,7 +950,7 @@ func mkdirat(t *kernel.Task, dirfd int32, addr hostarch.Addr, mode uint) error {
|
||||
}
|
||||
|
||||
// Rmdir implements Linux syscall rmdir(2).
|
||||
func Rmdir(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Rmdir(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
pathAddr := args[0].Pointer()
|
||||
return 0, nil, rmdirat(t, linux.AT_FDCWD, pathAddr)
|
||||
}
|
||||
@@ -969,14 +969,14 @@ func rmdirat(t *kernel.Task, dirfd int32, pathAddr hostarch.Addr) error {
|
||||
}
|
||||
|
||||
// Symlink implements Linux syscall symlink(2).
|
||||
func Symlink(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Symlink(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
targetAddr := args[0].Pointer()
|
||||
linkpathAddr := args[1].Pointer()
|
||||
return 0, nil, symlinkat(t, targetAddr, linux.AT_FDCWD, linkpathAddr)
|
||||
}
|
||||
|
||||
// Symlinkat implements Linux syscall symlinkat(2).
|
||||
func Symlinkat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Symlinkat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
targetAddr := args[0].Pointer()
|
||||
newdirfd := args[1].Int()
|
||||
linkpathAddr := args[2].Pointer()
|
||||
@@ -1004,14 +1004,14 @@ func symlinkat(t *kernel.Task, targetAddr hostarch.Addr, newdirfd int32, linkpat
|
||||
}
|
||||
|
||||
// Link implements Linux syscall link(2).
|
||||
func Link(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Link(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
oldpathAddr := args[0].Pointer()
|
||||
newpathAddr := args[1].Pointer()
|
||||
return 0, nil, linkat(t, linux.AT_FDCWD, oldpathAddr, linux.AT_FDCWD, newpathAddr, 0 /* flags */)
|
||||
}
|
||||
|
||||
// Linkat implements Linux syscall linkat(2).
|
||||
func Linkat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Linkat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
olddirfd := args[0].Int()
|
||||
oldpathAddr := args[1].Pointer()
|
||||
newdirfd := args[2].Int()
|
||||
@@ -1052,7 +1052,7 @@ func linkat(t *kernel.Task, olddirfd int32, oldpathAddr hostarch.Addr, newdirfd
|
||||
}
|
||||
|
||||
// Readlinkat implements Linux syscall readlinkat(2).
|
||||
func Readlinkat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Readlinkat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
pathAddr := args[1].Pointer()
|
||||
bufAddr := args[2].Pointer()
|
||||
@@ -1061,7 +1061,7 @@ func Readlinkat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sy
|
||||
}
|
||||
|
||||
// Readlink implements Linux syscall readlink(2).
|
||||
func Readlink(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Readlink(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
pathAddr := args[0].Pointer()
|
||||
bufAddr := args[1].Pointer()
|
||||
size := args[2].SizeT()
|
||||
@@ -1102,7 +1102,7 @@ func readlinkat(t *kernel.Task, dirfd int32, pathAddr, bufAddr hostarch.Addr, si
|
||||
}
|
||||
|
||||
// Unlink implements Linux syscall unlink(2).
|
||||
func Unlink(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Unlink(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
pathAddr := args[0].Pointer()
|
||||
return 0, nil, unlinkat(t, linux.AT_FDCWD, pathAddr)
|
||||
}
|
||||
@@ -1121,7 +1121,7 @@ func unlinkat(t *kernel.Task, dirfd int32, pathAddr hostarch.Addr) error {
|
||||
}
|
||||
|
||||
// Unlinkat implements Linux syscall unlinkat(2).
|
||||
func Unlinkat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Unlinkat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
pathAddr := args[1].Pointer()
|
||||
flags := args[2].Int()
|
||||
@@ -1184,7 +1184,7 @@ func handleSetSizeError(t *kernel.Task, err error) error {
|
||||
}
|
||||
|
||||
// Truncate implements Linux syscall truncate(2).
|
||||
func Truncate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Truncate(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
length := args[1].Int64()
|
||||
|
||||
@@ -1208,7 +1208,7 @@ func Truncate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sysc
|
||||
}
|
||||
|
||||
// Ftruncate implements Linux syscall ftruncate(2).
|
||||
func Ftruncate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Ftruncate(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
length := args[1].Int64()
|
||||
|
||||
@@ -1236,14 +1236,14 @@ func Ftruncate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// Umask implements linux syscall umask(2).
|
||||
func Umask(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Umask(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
mask := args[0].ModeT()
|
||||
mask = t.FSContext().SwapUmask(mask & 0777)
|
||||
return uintptr(mask), nil, nil
|
||||
}
|
||||
|
||||
// Chown implements Linux syscall chown(2).
|
||||
func Chown(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Chown(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
pathAddr := args[0].Pointer()
|
||||
owner := args[1].Int()
|
||||
group := args[2].Int()
|
||||
@@ -1251,7 +1251,7 @@ func Chown(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscall
|
||||
}
|
||||
|
||||
// Lchown implements Linux syscall lchown(2).
|
||||
func Lchown(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Lchown(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
pathAddr := args[0].Pointer()
|
||||
owner := args[1].Int()
|
||||
group := args[2].Int()
|
||||
@@ -1259,7 +1259,7 @@ func Lchown(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
|
||||
}
|
||||
|
||||
// Fchownat implements Linux syscall fchownat(2).
|
||||
func Fchownat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Fchownat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
pathAddr := args[1].Pointer()
|
||||
owner := args[2].Int()
|
||||
@@ -1308,7 +1308,7 @@ func populateSetStatOptionsForChown(t *kernel.Task, owner, group int32, opts *vf
|
||||
}
|
||||
|
||||
// Fchown implements Linux syscall fchown(2).
|
||||
func Fchown(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Fchown(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
owner := args[1].Int()
|
||||
group := args[2].Int()
|
||||
@@ -1329,14 +1329,14 @@ func Fchown(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
|
||||
const chmodMask = 0777 | linux.S_ISUID | linux.S_ISGID | linux.S_ISVTX
|
||||
|
||||
// Chmod implements Linux syscall chmod(2).
|
||||
func Chmod(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Chmod(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
pathAddr := args[0].Pointer()
|
||||
mode := args[1].ModeT()
|
||||
return 0, nil, fchmodat(t, linux.AT_FDCWD, pathAddr, mode)
|
||||
}
|
||||
|
||||
// Fchmodat implements Linux syscall fchmodat(2).
|
||||
func Fchmodat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Fchmodat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
pathAddr := args[1].Pointer()
|
||||
mode := args[2].ModeT()
|
||||
@@ -1358,7 +1358,7 @@ func fchmodat(t *kernel.Task, dirfd int32, pathAddr hostarch.Addr, mode uint) er
|
||||
}
|
||||
|
||||
// Fchmod implements Linux syscall fchmod(2).
|
||||
func Fchmod(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Fchmod(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
mode := args[1].ModeT()
|
||||
|
||||
@@ -1377,7 +1377,7 @@ func Fchmod(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
|
||||
}
|
||||
|
||||
// Utime implements Linux syscall utime(2).
|
||||
func Utime(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Utime(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
pathAddr := args[0].Pointer()
|
||||
timesAddr := args[1].Pointer()
|
||||
|
||||
@@ -1407,7 +1407,7 @@ func Utime(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscall
|
||||
}
|
||||
|
||||
// Utimes implements Linux syscall utimes(2).
|
||||
func Utimes(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Utimes(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
pathAddr := args[0].Pointer()
|
||||
timesAddr := args[1].Pointer()
|
||||
|
||||
@@ -1425,7 +1425,7 @@ func Utimes(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscal
|
||||
}
|
||||
|
||||
// Futimesat implements Linux syscall futimesat(2).
|
||||
func Futimesat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Futimesat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
pathAddr := args[1].Pointer()
|
||||
timesAddr := args[2].Pointer()
|
||||
@@ -1479,7 +1479,7 @@ func populateSetStatOptionsForUtimes(t *kernel.Task, timesAddr hostarch.Addr, op
|
||||
}
|
||||
|
||||
// Utimensat implements Linux syscall utimensat(2).
|
||||
func Utimensat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Utimensat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
dirfd := args[0].Int()
|
||||
pathAddr := args[1].Pointer()
|
||||
timesAddr := args[2].Pointer()
|
||||
@@ -1551,14 +1551,14 @@ func populateSetStatOptionsForUtimens(t *kernel.Task, timesAddr hostarch.Addr, o
|
||||
}
|
||||
|
||||
// Rename implements Linux syscall rename(2).
|
||||
func Rename(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Rename(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
oldpathAddr := args[0].Pointer()
|
||||
newpathAddr := args[1].Pointer()
|
||||
return 0, nil, renameat(t, linux.AT_FDCWD, oldpathAddr, linux.AT_FDCWD, newpathAddr, 0 /* flags */)
|
||||
}
|
||||
|
||||
// Renameat implements Linux syscall renameat(2).
|
||||
func Renameat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Renameat(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
olddirfd := args[0].Int()
|
||||
oldpathAddr := args[1].Pointer()
|
||||
newdirfd := args[2].Int()
|
||||
@@ -1567,7 +1567,7 @@ func Renameat(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sysc
|
||||
}
|
||||
|
||||
// Renameat2 implements Linux syscall renameat2(2).
|
||||
func Renameat2(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Renameat2(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
olddirfd := args[0].Int()
|
||||
oldpathAddr := args[1].Pointer()
|
||||
newdirfd := args[2].Int()
|
||||
@@ -1604,7 +1604,7 @@ func renameat(t *kernel.Task, olddirfd int32, oldpathAddr hostarch.Addr, newdirf
|
||||
}
|
||||
|
||||
// Fallocate implements linux system call fallocate(2).
|
||||
func Fallocate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Fallocate(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
mode := args[1].Uint64()
|
||||
offset := args[2].Int64()
|
||||
@@ -1643,7 +1643,7 @@ func Fallocate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// Flock implements linux syscall flock(2).
|
||||
func Flock(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Flock(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
operation := args[1].Int()
|
||||
|
||||
@@ -1685,7 +1685,7 @@ const (
|
||||
)
|
||||
|
||||
// MemfdCreate implements the linux syscall memfd_create(2).
|
||||
func MemfdCreate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func MemfdCreate(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
flags := args[1].Uint()
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@ func tryLockPI(t *kernel.Task, addr hostarch.Addr, private bool) error {
|
||||
// Futex implements linux syscall futex(2).
|
||||
// It provides a method for a program to wait for a value at a given address to
|
||||
// change, and a method to wake up anyone waiting on a particular address.
|
||||
func Futex(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Futex(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
futexOp := args[1].Int()
|
||||
val := int(args[2].Int())
|
||||
@@ -278,7 +278,7 @@ func Futex(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscall
|
||||
return 0, nil, err
|
||||
|
||||
case linux.FUTEX_WAIT_REQUEUE_PI, linux.FUTEX_CMP_REQUEUE_PI:
|
||||
t.Kernel().EmitUnimplementedEvent(t)
|
||||
t.Kernel().EmitUnimplementedEvent(t, sysno)
|
||||
return 0, nil, linuxerr.ENOSYS
|
||||
|
||||
default:
|
||||
@@ -288,7 +288,7 @@ func Futex(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Syscall
|
||||
}
|
||||
|
||||
// SetRobustList implements linux syscall set_robust_list(2).
|
||||
func SetRobustList(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func SetRobustList(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
// Despite the syscall using the name 'pid' for this variable, it is
|
||||
// very much a tid.
|
||||
head := args[0].Pointer()
|
||||
@@ -302,7 +302,7 @@ func SetRobustList(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel
|
||||
}
|
||||
|
||||
// GetRobustList implements linux syscall get_robust_list(2).
|
||||
func GetRobustList(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func GetRobustList(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
// Despite the syscall using the name 'pid' for this variable, it is
|
||||
// very much a tid.
|
||||
tid := args[0].Int()
|
||||
|
||||
@@ -27,12 +27,12 @@ import (
|
||||
)
|
||||
|
||||
// Getdents implements Linux syscall getdents(2).
|
||||
func Getdents(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Getdents(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
return getdents(t, args, false /* isGetdents64 */)
|
||||
}
|
||||
|
||||
// Getdents64 implements Linux syscall getdents64(2).
|
||||
func Getdents64(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Getdents64(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
return getdents(t, args, true /* isGetdents64 */)
|
||||
}
|
||||
|
||||
|
||||
@@ -27,21 +27,21 @@ const (
|
||||
)
|
||||
|
||||
// Getuid implements the Linux syscall getuid.
|
||||
func Getuid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Getuid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
c := t.Credentials()
|
||||
ruid := c.RealKUID.In(c.UserNamespace).OrOverflow()
|
||||
return uintptr(ruid), nil, nil
|
||||
}
|
||||
|
||||
// Geteuid implements the Linux syscall geteuid.
|
||||
func Geteuid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Geteuid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
c := t.Credentials()
|
||||
euid := c.EffectiveKUID.In(c.UserNamespace).OrOverflow()
|
||||
return uintptr(euid), nil, nil
|
||||
}
|
||||
|
||||
// Getresuid implements the Linux syscall getresuid.
|
||||
func Getresuid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Getresuid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
ruidAddr := args[0].Pointer()
|
||||
euidAddr := args[1].Pointer()
|
||||
suidAddr := args[2].Pointer()
|
||||
@@ -62,21 +62,21 @@ func Getresuid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// Getgid implements the Linux syscall getgid.
|
||||
func Getgid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Getgid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
c := t.Credentials()
|
||||
rgid := c.RealKGID.In(c.UserNamespace).OrOverflow()
|
||||
return uintptr(rgid), nil, nil
|
||||
}
|
||||
|
||||
// Getegid implements the Linux syscall getegid.
|
||||
func Getegid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Getegid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
c := t.Credentials()
|
||||
egid := c.EffectiveKGID.In(c.UserNamespace).OrOverflow()
|
||||
return uintptr(egid), nil, nil
|
||||
}
|
||||
|
||||
// Getresgid implements the Linux syscall getresgid.
|
||||
func Getresgid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Getresgid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
rgidAddr := args[0].Pointer()
|
||||
egidAddr := args[1].Pointer()
|
||||
sgidAddr := args[2].Pointer()
|
||||
@@ -97,20 +97,20 @@ func Getresgid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// Setuid implements the Linux syscall setuid.
|
||||
func Setuid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Setuid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
uid := auth.UID(args[0].Int())
|
||||
return 0, nil, t.SetUID(uid)
|
||||
}
|
||||
|
||||
// Setreuid implements the Linux syscall setreuid.
|
||||
func Setreuid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Setreuid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
ruid := auth.UID(args[0].Int())
|
||||
euid := auth.UID(args[1].Int())
|
||||
return 0, nil, t.SetREUID(ruid, euid)
|
||||
}
|
||||
|
||||
// Setresuid implements the Linux syscall setreuid.
|
||||
func Setresuid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Setresuid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
ruid := auth.UID(args[0].Int())
|
||||
euid := auth.UID(args[1].Int())
|
||||
suid := auth.UID(args[2].Int())
|
||||
@@ -118,20 +118,20 @@ func Setresuid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// Setgid implements the Linux syscall setgid.
|
||||
func Setgid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Setgid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
gid := auth.GID(args[0].Int())
|
||||
return 0, nil, t.SetGID(gid)
|
||||
}
|
||||
|
||||
// Setregid implements the Linux syscall setregid.
|
||||
func Setregid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Setregid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
rgid := auth.GID(args[0].Int())
|
||||
egid := auth.GID(args[1].Int())
|
||||
return 0, nil, t.SetREGID(rgid, egid)
|
||||
}
|
||||
|
||||
// Setresgid implements the Linux syscall setregid.
|
||||
func Setresgid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Setresgid(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
rgid := auth.GID(args[0].Int())
|
||||
egid := auth.GID(args[1].Int())
|
||||
sgid := auth.GID(args[2].Int())
|
||||
@@ -139,7 +139,7 @@ func Setresgid(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// Getgroups implements the Linux syscall getgroups.
|
||||
func Getgroups(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Getgroups(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
size := int(args[0].Int())
|
||||
if size < 0 {
|
||||
return 0, nil, linuxerr.EINVAL
|
||||
@@ -164,7 +164,7 @@ func Getgroups(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||
}
|
||||
|
||||
// Setgroups implements the Linux syscall setgroups.
|
||||
func Setgroups(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Setgroups(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
size := args[0].Int()
|
||||
if size < 0 || size > maxNGroups {
|
||||
return 0, nil, linuxerr.EINVAL
|
||||
|
||||
@@ -25,7 +25,7 @@ import (
|
||||
const allFlags = linux.IN_NONBLOCK | linux.IN_CLOEXEC
|
||||
|
||||
// InotifyInit1 implements the inotify_init1() syscalls.
|
||||
func InotifyInit1(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func InotifyInit1(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
flags := args[0].Int()
|
||||
if flags&^allFlags != 0 {
|
||||
return 0, nil, linuxerr.EINVAL
|
||||
@@ -49,9 +49,9 @@ func InotifyInit1(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.
|
||||
}
|
||||
|
||||
// InotifyInit implements the inotify_init() syscalls.
|
||||
func InotifyInit(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func InotifyInit(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
args[0].Value = 0
|
||||
return InotifyInit1(t, args)
|
||||
return InotifyInit1(t, sysno, args)
|
||||
}
|
||||
|
||||
// fdToInotify resolves an fd to an inotify object. If successful, the file will
|
||||
@@ -74,7 +74,7 @@ func fdToInotify(t *kernel.Task, fd int32) (*vfs.Inotify, *vfs.FileDescription,
|
||||
}
|
||||
|
||||
// InotifyAddWatch implements the inotify_add_watch() syscall.
|
||||
func InotifyAddWatch(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func InotifyAddWatch(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
addr := args[1].Pointer()
|
||||
mask := args[2].Uint()
|
||||
@@ -120,7 +120,7 @@ func InotifyAddWatch(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kern
|
||||
}
|
||||
|
||||
// InotifyRmWatch implements the inotify_rm_watch() syscall.
|
||||
func InotifyRmWatch(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func InotifyRmWatch(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
fd := args[0].Int()
|
||||
wd := args[1].Int()
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ import (
|
||||
)
|
||||
|
||||
// IOUringSetup implements linux syscall io_uring_setup(2).
|
||||
func IOUringSetup(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func IOUringSetup(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
if !kernel.IOUringEnabled {
|
||||
return 0, nil, linuxerr.ENOSYS
|
||||
}
|
||||
@@ -80,7 +80,7 @@ func IOUringSetup(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.
|
||||
}
|
||||
|
||||
// IOUringEnter implements linux syscall io_uring_enter(2).
|
||||
func IOUringEnter(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func IOUringEnter(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
if !kernel.IOUringEnabled {
|
||||
return 0, nil, linuxerr.ENOSYS
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ import (
|
||||
)
|
||||
|
||||
// Membarrier implements syscall membarrier(2).
|
||||
func Membarrier(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Membarrier(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
cmd := args[0].Int()
|
||||
flags := args[1].Uint()
|
||||
|
||||
@@ -97,7 +97,7 @@ func Membarrier(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sy
|
||||
return 0, nil, nil
|
||||
default:
|
||||
// Probably a command we don't implement.
|
||||
t.Kernel().EmitUnimplementedEvent(t)
|
||||
t.Kernel().EmitUnimplementedEvent(t, sysno)
|
||||
return 0, nil, linuxerr.EINVAL
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ func copyOutNodemask(t *kernel.Task, addr hostarch.Addr, maxnode uint32, val uin
|
||||
}
|
||||
|
||||
// GetMempolicy implements the syscall get_mempolicy(2).
|
||||
func GetMempolicy(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func GetMempolicy(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
mode := args[0].Pointer()
|
||||
nodemask := args[1].Pointer()
|
||||
maxnode := args[2].Uint()
|
||||
@@ -216,7 +216,7 @@ func GetMempolicy(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.
|
||||
}
|
||||
|
||||
// SetMempolicy implements the syscall set_mempolicy(2).
|
||||
func SetMempolicy(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func SetMempolicy(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
modeWithFlags := linux.NumaPolicy(args[0].Int())
|
||||
nodemask := args[1].Pointer()
|
||||
maxnode := args[2].Uint()
|
||||
@@ -231,7 +231,7 @@ func SetMempolicy(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.
|
||||
}
|
||||
|
||||
// Mbind implements the syscall mbind(2).
|
||||
func Mbind(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
func Mbind(t *kernel.Task, sysno uintptr, args arch.SyscallArguments) (uintptr, *kernel.SyscallControl, error) {
|
||||
addr := args[0].Pointer()
|
||||
length := args[1].Uint64()
|
||||
mode := linux.NumaPolicy(args[2].Int())
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user