summaryrefslogtreecommitdiff
path: root/init/sigchld_handler.cpp
AgeCommit message (Collapse)Author
2020-03-16Revert "init: handle property service callbacks asynchronously"Tom Cherry
This is apparently causing problems with reboot. This reverts commit d2dab830d3ec260ccd982d147d4eb0ef74071261. Bug: 150863651 Test: build Merged-In: Ib8a4835cdc8358a54c7acdebc5c95038963a0419 Change-Id: Ib8a4835cdc8358a54c7acdebc5c95038963a0419
2020-03-02init: handle property service callbacks asynchronouslyTom Cherry
A previous change moved property_service into its own thread, since there was otherwise a deadlock whenever a process called by init would try to set a property. This new thread, however, would send a message via a blocking socket to init for each property that it received, since init may need to take action depending on which property it is. Unfortunately, this means that the deadlock is still possible, the only difference is the socket's buffer must be filled before init deadlocks. There are possible partial solutions here: the socket's buffer may be increased or property_service may only send messages for the properties that init will take action on, however all of these solutions still lead to eventual deadlock. The only complete solution is to handle these messages asynchronously. This change, therefore, adds the following: 1) A lock for instructing init to reboot 2) A lock for waiting on properties 3) A lock for queueing new properties 4) A lock for any actions with ServiceList or any Services, enforced through thread annotations, particularly since this code was not designed with the intention of being multi-threaded. Bug: 146877356 Bug: 148236233 Test: boot Test: kill hwservicemanager without deadlock Merged-In: I84108e54217866205a48c45e8b59355012c32ea8 Change-Id: I84108e54217866205a48c45e8b59355012c32ea8 (cherry picked from commit 7205c6293341c82701e849fa29cfab66916d1052)
2019-10-10userspace reboot: stop post-data services and wait for them to be killedNikita Ioffe
* Refactored code around stopping services a little bit to reuse it between full reboot and userspace reboot. * Add a scope_guard to fallback to full reboot in case userspace reboot fails. * In case of userspace reboot init will also wait for services to be terminated/killed and log the ones that didn't react to SIGTERM/SIGKILL in time. * If some of the services didn't react to SIGKILL, fail userspace reboot. Test: adb reboot userspace Bug: 135984674 Change-Id: I820c7bc406169333b0f929f0eea028d8384eb2ac
2019-07-31init: add timing log for oneshot and exec_background servicesWei Wang
Bug: 136523746 Bug: 138732985 Test: boot Change-Id: I713edd2ba8a391d5afbea796c6d58ffac9477436
2019-06-26Split out ServiceList and ServiceParser from service.cpp/.hTom Cherry
These always should have been in their own files. Test: build Change-Id: I201109b5ee63016e78901bbfd404846d45e1d4e6
2019-04-24init: simplify async restoreconTom Cherry
In the future, property service may run in its own thread or process, which means that PropertyChildReap() needs to be refactored to not run as part of the init signal handler. The new method spawns a new thread that handles the queue of paths that require restorecon. It then communicates back to property service via android::base::SetProperty(). Property service distinguishes the thread from other callers of SetProperty() by checking the pid in the credentials for the socket connection, thus avoiding dependencies on the rest of init. The new method also drops the genericness, since restorecon is the only function that we should ever need to run asynchronously Test: async restorecon works, including with queued requests Change-Id: I2ca00459969e77b1820776dac23d0a0d974e330b
2018-04-17Re-land "If enablefilecrypto or init_user0 fails, reboot into recovery."Paul Crowley
An earlier such change was reverted in commit e242a97db547dc73efea1b5287536be66637dc33. Bug: 70487538 Test: ensure that angler can boot Merged-In: Id5f57fce1c9b817a2650e0c848143d8a0d286bf0 Change-Id: Id5f57fce1c9b817a2650e0c848143d8a0d286bf0
2018-04-12init: use signalfd to catch SIGCHLDRyan Prichard
Previously, if init received too many SIGCHLD signals, then the write to signal_write_fd could fail with EAGAIN. The handler tried to log the EAGAIN error, and init deadlocked if the interrupted init process had already acquired a logging-related lock. Bug: b/77867680 Test: manual Change-Id: Ief0b5e94d8517827a5a7d03773391ba3ba9447c4
2018-03-01Revert "If enablefilecrypto or init_user0 fails, reboot into recovery."Paul Crowley
This reverts commit 959b05553576ffc15da4334a5917ce763611ab82. Reason for revert: b/73968735 Bug: 73968735 Test: b/73968735#comment5 Change-Id: Ifce4c029bab7380c60e20cc2b2885beb4a097456
2018-02-15If enablefilecrypto or init_user0 fails, reboot into recovery.Paul Crowley
Test: Roll back PLATFORM_SECURITY_PATCH, ensure recovery dialog is seen Bug: 70487538 Change-Id: Iceb6af3f9d6aea6bc646dbb4b5d29dffcb284736
2017-09-29init: run vendor commands in a separate SELinux contextTom Cherry
One of the major aspects of treble is the compartmentalization of system and vendor components, however init leaves a huge gap here, as vendor init scripts run in the same context as system init scripts and thus can access and modify the same properties, files, etc as the system can. This change is meant to close that gap. It forks a separate 'subcontext' init that runs in a different SELinux context with permissions that match what vendors should have access to. Commands get sent over a socket to this 'subcontext' init that then runs them in this SELinux context and returns the result. Note that not all commands run in the subcontext; some commands such as those dealing with services only make sense in the context of the main init process. Bug: 62875318 Test: init unit tests, boot bullhead, boot sailfish Change-Id: Idf4a4ebf98842d27b8627f901f961ab9eb412aee
2017-09-26init: cleanup exit() usesTom Cherry
Primarily, this fixes a bug where a forked child of property service uses exit() instead of _exit, which has the unintended consequences of running the global destructors of init proper, which leads to unintended cleanup. Secondly, this replaces the remaining calls of exit() that really should be LOG(FATAL). Test: boot sailfish Change-Id: I779228e7d44a73186bc7685bb723c4b9278a0a2d
2017-09-07init: Allow clean system shutdown upon SIGTERMLuis Hector Chavez
This allows Android to cleanly shutdown when running in a PID namespace in a way that does not rely on adbd running. This is useful to allow Android to be running in a container and its lifetime managed by an OCI-compliant tool. Bug: 65415372 Test: `kill -TERM 1` as root is correctly dropped. Test: `kill -TERM 1` from the init PID namespace causes init to cleanly shutdown. Change-Id: Ia66ebdb436221919081bc4723337c0c7f1e53b09