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