From 483a9cbc67c01f740bb259a7f11f6a2f99b63256 Mon Sep 17 00:00:00 2001 From: Alexey Perevalov Date: Fri, 1 Apr 2022 15:37:53 +0000 Subject: [PATCH] unix: add OpenTree on linux This syscall is not yet described in linux man pages (https://github.com/mkerrisk/man-pages.git) but it was attempts to do it (https://lwn.net/Articles/829496/) This syscall appeared in linux kernel v5.2 Change-Id: If44aa74c4ddd200831011c6c4bf4bd4fee440785 Reviewed-on: https://go-review.googlesource.com/c/sys/+/397094 Run-TryBot: Tobias Klauser TryBot-Result: Gopher Robot Reviewed-by: Tobias Klauser Reviewed-by: Ian Lance Taylor --- unix/linux/types.go | 3 +++ unix/syscall_linux.go | 1 + unix/zsyscall_linux.go | 16 ++++++++++++++++ unix/ztypes_linux.go | 3 +++ 4 files changed, 23 insertions(+) diff --git a/unix/linux/types.go b/unix/linux/types.go index d563a0cf..c8d176ef 100644 --- a/unix/linux/types.go +++ b/unix/linux/types.go @@ -902,6 +902,9 @@ const ( AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW AT_EACCESS = C.AT_EACCESS + + OPEN_TREE_CLONE = C.OPEN_TREE_CLONE + OPEN_TREE_CLOEXEC = C.OPEN_TREE_CLOEXEC ) type OpenHow C.struct_open_how diff --git a/unix/syscall_linux.go b/unix/syscall_linux.go index bda98498..298323eb 100644 --- a/unix/syscall_linux.go +++ b/unix/syscall_linux.go @@ -1860,6 +1860,7 @@ func Getpgrp() (pid int) { //sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys OpenTree(dfd int, fileName string, flags uint) (r int, err error) //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT //sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 diff --git a/unix/zsyscall_linux.go b/unix/zsyscall_linux.go index 78d74520..ca65ac82 100644 --- a/unix/zsyscall_linux.go +++ b/unix/zsyscall_linux.go @@ -1215,6 +1215,22 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func OpenTree(dfd int, fileName string, flags uint) (r int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fileName) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN_TREE, uintptr(dfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + r = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) fd = int(r0) diff --git a/unix/ztypes_linux.go b/unix/ztypes_linux.go index 2c26466e..41b0cd09 100644 --- a/unix/ztypes_linux.go +++ b/unix/ztypes_linux.go @@ -750,6 +750,9 @@ const ( AT_RECURSIVE = 0x8000 + OPEN_TREE_CLONE = 0x1 + OPEN_TREE_CLOEXEC = 0x80000 + AT_SYMLINK_FOLLOW = 0x400 AT_SYMLINK_NOFOLLOW = 0x100