summaryrefslogtreecommitdiff
path: root/libutils/ProcessCallStack_fuzz.cpp
diff options
context:
space:
mode:
authorTom Cherry <tomcherry@google.com>2019-09-24 18:58:38 -0700
committerTom Cherry <tomcherry@google.com>2019-09-25 12:59:52 -0700
commit013289364e7c63c38cd5fa2a4257c50c65928064 (patch)
tree9d662459428bddbf55b5a0cb6dfa448a83032643 /libutils/ProcessCallStack_fuzz.cpp
parent03642ad8b88a48fc22d714c9d0e4f2a368d356ac (diff)
logwrapper: open child_ptty in child process and remove ignore_int_quit
Opening child_ptty before fork() means that the parent process will use child_ptty as the controlling terminal if it doesn't already have one. This is a problem, because when the parent_ptty closes, SIGHUP will be sent to the parent process, since its controlling terminal has closed. It's better to have the child process start its own session and then open child_ptty as its controlling terminal. In this case, the child process will get SIGHUP if the parent process exits, but the parent process avoids the original issue. There is a concern that the child_ptty will never be opened and POLLHUP will never be generated, but there is a work-around in place with a timeout to handle that extremely rare situation. Secondly, remove the ignore_int_quit logic. It is described to totally ignore these signals, similar to `nohup` which should be preferred. However, it regressed shortly after being introduced in 2013 and serves essentially no purpose currently. Thirdly, add a forward_signals option that does what we should have done the whole time with signals: it forwards SIGHUP, SIGQUIT, and SIGINT to the child process and let that process handle them. This only needs to be enabled in the `logwrapper` case itself. Other processes should not need to change any signals. This fixes case 3) below. Lastly, add O_CLOEXEC where appropriate. Test: launch process as `adb shell logwrapper yes` 1) The both processes exit when given SIGINT 2) The process prints when abbreviated is not enabled 3) The process does print when abbreviated is enabled; this was previously broken Test: launch process as `adb shell` then `logwrapper yes` 4) The both processes exit when given SIGINT 5) The process prints if abbreviated is enabled or not. 6) Ctrl-c then Ctrl-c again rapidly and observe that the logwrapper process is terminated by the second Ctrl-c. Test: simulate a failure in child() before opening child_tty and observe logwrapper and the child exiting appropriately. Change-Id: Ia76cd17e16535500170d8f5e2183b3bbbf843df7
Diffstat (limited to 'libutils/ProcessCallStack_fuzz.cpp')
0 files changed, 0 insertions, 0 deletions