No description
Find a file
David Anderson f57fd97df3 libsnapshot: Add support for first-to-second-stage transitions of snapuserd.
This patch introduces the fundamentals needed to support booting off
dm-user. First, a method has been added to start snapuserd in
first-stage init. It simply forks and execs, creates a specially named
first-stage socket, then waits for requests.

Next, a new method has been added to SnapshotManager to perform a
second-stage handoff. This works by first launching a second copy of
snapuserd using init's normal service management functionality. The new
snapuserd runs alongside the original, but has correct privileges and a
correct selinux context. Next, we inspect each COW device, and if its
table uses dm-user, we replace the table with a renamed control
device. The new control device is bound to the new snapuserd.

device-mapper guarantees that such a table swap is safe. It flushes I/O
to the old table and then replaces it with the new table. Once the new
table is in place, the old dm-user control devices are automatically
destroyed. Thus, once all dm-user devices has been transitioned, the
first-stage daemon is idle and can gracefully exit.

This patch does not modify init. A few changes will be needed on top of
this patch:

(1) CreateLogicalAndSnapshotPartitions will need further changes to
start the first-stage daemon and track its pid. Additionally, it will
need to ensure the named socket file is deleted, so there is no further
IPC allowed after partitions are completed.
(2) init will need to propagate the pid to second-stage init so the
process can be killed (or signalled).
(3) first-stage snapuserd will need to gracefully exit once it has no
active handler threads.
(4) second-stage init will need to invoke the transition helper on
SnapshotMaanager, ideally as soon as feasible.

Bug: 168259959
Test: manual test
Change-Id: I54dec2edf85ed95f11ab4518eb3d7dbaf0bdcbfd
2020-11-02 13:24:05 -08:00
bootstat Merge Android R (rvc-dev-plus-aosp-without-vendor@6692709) 2020-08-29 01:42:13 -07:00
cli-test cli-test: support checking exit status. 2020-09-25 16:43:35 -07:00
code_coverage extend syscall minijail for clang code coverage 2020-07-13 13:39:05 -07:00
cpio Remove EXCLUDE_FS_CONFIG_STRUCTURES 2020-03-04 15:34:09 -08:00
debuggerd Start tombstoned early in post-fs-data. 2020-10-01 14:25:36 -07:00
deprecated-adf remove deprecated bp 'subdirs' 2020-01-14 12:18:40 -08:00
diagnose_usb Make the udev vs plugdev distinction a bit clearer. 2020-07-31 15:09:35 -07:00
fastboot libsnapshot: Partially implement OpenSnapshotWriter. 2020-10-14 21:41:36 -07:00
fs_mgr libsnapshot: Add support for first-to-second-stage transitions of snapuserd. 2020-11-02 13:24:05 -08:00
gatekeeperd Chanage uid to userId where it denotes an Android user id. 2020-09-23 18:01:37 -07:00
healthd Merge "health: Add CAP_BLOCK_SUSPEND" 2020-10-15 20:24:17 +00:00
include Remove include/backtrace symlink. 2020-10-20 12:46:14 -07:00
init Merge "Revert "Always create ramdisk/first_stage_ramdisk."" 2020-10-28 21:21:36 +00:00
janitors Add the two best build system janitors. 2019-03-25 10:25:13 -07:00
libappfuse Fix Deadlock Issue On AppFuseBridge 2020-02-18 04:33:06 +00:00
libasyncio Revert "Revert "Set apex_available property"" 2020-03-26 00:23:56 +00:00
libbinderwrapper Make libbinderwrapper available in /vendor partition 2018-04-06 08:41:21 +09:00
libcrypto_utils libcrypto_utils: switch to C++. 2020-08-21 10:34:56 -07:00
libcutils libcutils: API to disable memory mitigations 2020-10-10 00:16:24 +00:00
libdiskconfig Rename target.linux[_x86[_64]] to target.linux_glibc[_x86[_64]] 2017-10-02 10:44:29 -07:00
libgrallocusage gralloc: Set min_sdk_version 2020-04-23 23:50:08 +09:00
libkeyutils Update language to comply with Android's inclusive language guidance 2020-07-31 16:36:06 -06:00
libmodprobe libmodprobe: Fail when modules.dep lacks colon 2020-10-19 12:00:08 +01:00
libnetutils Add a libipchecksum that contains the C IP checksum code. 2020-07-09 16:35:47 +09:00
libpackagelistparser Add require_root to adbd_test and libpackagelistparser_test 2019-09-24 09:13:32 -07:00
libprocessgroup Make the connection between implementation and llndk_library explicit 2020-10-19 13:38:05 -07:00
libqtaguid Redirect qtaguid native call to netd fwmark client 2017-11-09 18:02:22 -08:00
libsparse Make libsparse vendor_available 2020-09-03 08:43:46 -07:00
libstats Use libcutils_headers for android_filesystem_config.h 2020-09-18 22:48:42 +00:00
libsuspend Remove libsuspend from VNDK. 2018-08-14 13:39:55 -07:00
libsync Make the connection between implementation and llndk_library explicit 2020-10-19 13:38:05 -07:00
libsystem Set min_sdk_version to be part of mainline modules 2020-05-13 08:18:06 +09:00
libsysutils SocketClient: don't ignore SIGPIPE 2020-07-31 15:53:18 -07:00
libusbhost Prevent infinite loop on zero length USB descriptors 2020-02-21 11:11:02 -08:00
libutils Remove unused utf8_length(). 2020-10-26 13:14:47 -07:00
libvndksupport Make the connection between implementation and llndk_library explicit 2020-10-19 13:38:05 -07:00
llkd llkd: Use more inclusive language 2020-06-19 06:51:59 -07:00
property_service Cleanup for #inclusivefixit. 2020-07-27 11:37:19 -07:00
qemu_pipe Use more inclusive language for #inclusivefixit 2020-07-28 00:22:59 +00:00
reboot adb: replace reboot service with exec of /system/bin/reboot. 2019-10-23 14:33:36 -07:00
rootdir init/service_parser: Add arguments window' and target' for `critical' 2020-10-26 11:38:01 +08:00
run-as Use libcutils_headers for android_filesystem_config.h 2020-09-18 22:48:42 +00:00
sdcard Move layout_version to /data/misc/installd 2019-08-21 10:12:18 -07:00
set-verity-state set-verity-state: Link to libfs_mgr_binder. 2019-12-30 13:42:57 -08:00
shell_and_utilities Use the "marketing names" for Q and R. 2020-10-21 16:36:14 -07:00
storaged storaged: ignore SIGPIPE 2020-03-17 09:31:01 -07:00
toolbox Merge "toolbox: make all janitors the owners." am: 5f33339b2f am: 459b5d6350 2020-07-13 18:10:13 +00:00
trusty Merge "rpmb_dev: Switch to RPMB provisioning scheme" 2020-10-10 05:06:56 +00:00
usbd Remove libhwbinder/libhidltransport deps 2019-09-05 14:17:42 -07:00
watchdogd Move watchdogd out of init 2018-08-02 12:25:58 -07:00
.clang-format Add a 2 width option of clang format. 2017-03-10 13:01:39 -08:00
.clang-format-2 Move clang-formats to build. 2019-01-18 14:26:33 -08:00
.clang-format-4 Move clang-formats to build. 2019-01-18 14:26:33 -08:00
.gitignore Ignore adb/*.pyc files 2015-08-11 12:59:58 -07:00
CleanSpec.mk snapshotctl don't auto-merge. 2020-03-03 13:19:49 -08:00
libbacktrace Remove libprocinfo, libbacktrace, libunwindstack 2020-10-16 15:46:24 +00:00
liblog Add symlinks to satisfy include paths. 2020-10-08 23:19:43 +00:00
libprocinfo Remove libprocinfo, libbacktrace, libunwindstack 2020-10-16 15:46:24 +00:00
libunwindstack Remove libprocinfo, libbacktrace, libunwindstack 2020-10-16 15:46:24 +00:00
METADATA Add METADATA to system/core: Apache2+BSD=NOTICE 2020-04-29 13:16:41 -07:00
MODULE_LICENSE_APACHE2 auto import from //depot/cupcake/@135843 2013-07-30 13:56:49 -07:00
NOTICE Fix omission in NOTICE file. 2013-07-30 13:56:55 -07:00
OWNERS Remove baligh@ from owners. CodeShuffle done. 2020-10-17 00:28:10 +00:00
PREUPLOAD.cfg Add AOSP preupload hook. 2020-04-23 11:02:00 -07:00
TEST_MAPPING Run liblog and logd CTS tests in presubmit 2020-07-29 08:02:52 -07:00