Handle adb sync with Bionic under /bionic
Background: We now have two sets of Bionic: the bootstrap Bionic which is at /system/{lib|bin}/bootstrap for early processes and the default Bionic which is from the runtime APEX for all the others. In order to give the same path for Bionic to both categories of processes, the init prepares two mount namespaces and bind-mount appropriate Bionic files onto the common mount points under /bionic. For example, /system/bin/bootstrap/linker is bind-mounted to /bionic/bin/linker for the early processes. Likewise, /apex/com.android.runtime/bin/linker is bind-mounted to the same path for rest of the processes. In addition, in order not to propagate mount events in one mount namespace to the other namespace, /bionic itself is created as a mount namespace (via self bind-mount) and its propagation type is set to private. Changes required: This however requires some adjustments to adb sync and remount mechanism. For remounting, /bionic path should also be re-mounted for RW, because it is a RO mount in the beginning. This remounting is done only for the system-as-root devices where entire / can be re-mounted as RW. For synching, the sync thread creates a temporary mount namespace where there is no bind-mount. This ensures that a path that the thread handles is pointing to the correct file that is expected from the client side. In addition, push operation to /bionic path is done without unlinking. This is required because the mount points under /bionic are gone in the current mount namespace but are still active in other mount namespaces. If unlinked, the existing mounts on the path are all silently removed. In order to prevent the unwanted situation, the moint points are not unlinked but truncated to 0. This however is not a significant problem because the files that serve as mount points do not carry any useful information (i.e. the content is meaningless). Bug: 879416 Test: adb sync adb push <random_file> /bionic/bin/linker64 adb push <random_file> /system/bin/bootstrap/bin/linker64 system/core/fs_mgr/tests/adb-remount-test.sh Change-Id: Id87dc9ee7ec5c43d06b54969b55e2cb394329317
Loading
Please register or sign in to comment