xref: /aosp_15_r20/external/libcap/go/psx-fd.go (revision 2810ac1b38eead2603277920c78344c84ddf3aff)
1*2810ac1bSKiyoung Kimpackage main
2*2810ac1bSKiyoung Kim
3*2810ac1bSKiyoung Kimimport (
4*2810ac1bSKiyoung Kim	"log"
5*2810ac1bSKiyoung Kim	"os"
6*2810ac1bSKiyoung Kim	"syscall"
7*2810ac1bSKiyoung Kim	"time"
8*2810ac1bSKiyoung Kim
9*2810ac1bSKiyoung Kim	"kernel.org/pub/linux/libs/security/libcap/psx"
10*2810ac1bSKiyoung Kim)
11*2810ac1bSKiyoung Kim
12*2810ac1bSKiyoung Kimconst prSetKeepCaps = 8
13*2810ac1bSKiyoung Kim
14*2810ac1bSKiyoung Kimfunc main() {
15*2810ac1bSKiyoung Kim	r, w, err := os.Pipe()
16*2810ac1bSKiyoung Kim	if err != nil {
17*2810ac1bSKiyoung Kim		log.Fatalf("failed to obtain pipe: %v", err)
18*2810ac1bSKiyoung Kim	}
19*2810ac1bSKiyoung Kim	data := make([]byte, 2+r.Fd())
20*2810ac1bSKiyoung Kim	go r.Read(data)
21*2810ac1bSKiyoung Kim	time.Sleep(500 * time.Millisecond)
22*2810ac1bSKiyoung Kim	psx.Syscall3(syscall.SYS_PRCTL, prSetKeepCaps, 1, 0)
23*2810ac1bSKiyoung Kim	w.Close()
24*2810ac1bSKiyoung Kim	r.Close()
25*2810ac1bSKiyoung Kim}
26