67f7b43136
It's best practice to run as little code as possible as root (especially when listening to network ports). When not itself running as root already, remote-fw-service.py has always tried to invoke cavstool.py with "sudo". Unfortunately this looks like it never worked; at least not on Ubuntu 22 where this commit was tested. Moreover it did not fail immediately but mysteriously timed out without any useful error message. - The first, most obvious bug was that "sudo" does not propagate SIGKILL (and a few other signals), see "man sudo". Compare: ``` $ sudo sleep 30 & $ kill $! # sudo propagates the TERM signal and sleep is terminated $ sudo sleep 30 & sudoPID=$! $ kill -KILL $sudoPID $ ps xfao pid,ppid,pgid,sid,comm | grep -C 5 -e PID -e sleep -e sudo ``` Fix this by invoking proc.terminate() first before proc.kill(). proc.terminate() is more "polite" with cavstool even when not using sudo. - Second issue: when signals are sent to sudo, strace shows that its signal handler invokes `getpgid()` and then ignores signals coming from its own process group. `man sudo` states: "sudo will not relay signals that were sent by the command it is running...", which seems related. `start_new_session=True` option moves sudo to a different PGID which stops sudo from ignoring signals from its remote-fw-service.py parent. Signed-off-by: Marc Herbert <marc.herbert@intel.com> |
||
---|---|---|
.. | ||
arc | ||
arm | ||
arm64 | ||
mips | ||
nios2 | ||
posix | ||
riscv | ||
sparc | ||
x86 | ||
xtensa | ||
Kconfig |