in pkg/kprobe/kprobe.go [235:275]
func probeDetach(eventName string, perfFD int, kretProbe bool) error {
log.Infof("Calling Detach on %s", eventName)
if _, _, err := unix.Syscall(unix.SYS_IOCTL, uintptr(int(perfFD)), uintptr(uint(unix.PERF_EVENT_IOC_DISABLE)), 0); err != 0 {
log.Errorf("error enabling perf event: %v", err)
return err
}
unix.Close(perfFD)
eventEnable := constdef.KPROBE_SYS_DEBUG + "/" + eventName + "/enable"
if kretProbe {
eventEnable = constdef.KRETPROBE_SYS_DEBUG + "/" + eventName + "/enable"
}
setEnable := []byte("0")
err := ioutil.WriteFile(eventEnable, setEnable, os.ModePerm)
if err != nil {
return err
}
file, err := os.OpenFile(constdef.KPROBE_SYS_EVENTS, os.O_APPEND|os.O_WRONLY, 0)
if err != nil {
log.Errorf("cannot open probe events: %v", err)
return err
}
defer file.Close()
eventString := fmt.Sprintf("-:%s\n", eventName)
if _, err = file.WriteString(eventString); err != nil {
pathErr, ok := err.(*os.PathError)
if ok && pathErr.Err == syscall.ENOENT {
log.Infof("File is already cleanedup, maybe some other process?")
return nil
}
log.Errorf("cannot update the probe events %v", err)
return err
}
log.Infof("probe Detach done!!!")
return nil
}