Hello, I'm trying the systemtap approach and it looks promising. The script is annotating strace-like output with capability, device access and RLIMIT information. In the end there's a summary. Here's sample output from wpa_supplicant run: mprotect(0x7efebf140000, 16384, PROT_READ) = 0 [DATA 548864 -> 573440] [AS 44986368 -> 45002752] brk(0x55d9611f8000) = 94392125718528 missing [Capabilities=CAP_SYS_ADMIN] [AS 45002752 -> 45010944] open(0x55d960716462, O_RDWR) = 3 [DeviceAllow=/dev/char/1:3 rw ] open("/dev/random", O_RDONLY|O_NONBLOCK) = 3 [DeviceAllow=/dev/char/1:8 r ] socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC, 0) = 4 [RestrictAddressFamilies=AF_UNIX] [NOFILE 3 -> 4] open("/etc/wpa_supplicant.conf", O_RDONLY) = 5 [NOFILE 4 -> 5] socket(PF_NETLINK, SOCK_RAW, 0) = 5 [RestrictAddressFamilies=AF_NETLINK] socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, 16) = 6 [RestrictAddressFamilies=AF_NETLINK] [NOFILE 5 -> 6] socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, 16) = 7 [RestrictAddressFamilies=AF_NETLINK] [NOFILE 6 -> 7] socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 8 [RestrictAddressFamilies=AF_INET] [NOFILE 7 -> 8] open("/dev/rfkill", O_RDONLY) = 9 [DeviceAllow=/dev/char/10:58 r ] [NOFILE 8 -> 9] socket(PF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 10 [RestrictAddressFamilies=AF_UNIX] [NOFILE 9 -> 10] sendmsg(6, 0x7ffc778f35b0, 0x0) = 36 [Capabilities=CAP_NET_ADMIN] Summary: CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW Consider also missing CapabilityBoundingSet=CAP_SYS_ADMIN DeviceAllow=/dev/char/1:3 rw DeviceAllow=/dev/char/1:8 r DeviceAllow=/dev/char/10:58 r DeviceAllow=/dev/char/1:9 r LimitFSIZE=0 LimitDATA=577536 LimitSTACK=139264 LimitCORE=0 LimitNOFILE=15 LimitAS=45146112 LimitNPROC=171 LimitMEMLOCK=0 LimitSIGPENDING=0 LimitMSGQUEUE=0 LimitNICE=0 LimitRTPRIO=0 RestrictAddressFamilies=AF_UNIX AF_INET AF_NETLINK AF_PACKET MemoryDenyWriteExecute=true Some values are not correct. NPROC is wrong because staprun needs to be run as root instead of the separate privileged user for wpa_supplicant and that messes user process count. DATA/AS/STACK seems to be a bit off. I can easily use this as systemd service configuration drop-in otherwise. Now, the relevant part for the kernel is that I'd like to analyze error paths better, so the system calls would be also annotated when there's a failure when a RLIMIT is too tight. It would be easier to insert probes if there was only one path for RLIMIT checks. Would it be OK to make the function task_rlimit() a full check against the limit and also make it a non-inlined function, just for improved probing purposes? There's already error analysis for the capabilities, but there are some false positive hits (like brk() complaining about missing CAP_SYS_ADMIN above). -Topi