Merge "adb-remount-test: Refactor raw remount & remount from scratch test" am: 78430afca4 am: 6013e1cd3d
Original change: https://android-review.googlesource.com/c/platform/system/core/+/2199115 Change-Id: I4131cd8207ec348088c61927bb8aa6eca62e6909 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
883ec23f32
1 changed files with 92 additions and 92 deletions
|
|
@ -760,9 +760,11 @@ surgically_wipe_overlayfs() {
|
||||||
${wiped_anything}
|
${wiped_anything}
|
||||||
}
|
}
|
||||||
|
|
||||||
[ "USAGE: is_overlayfs_mounted
|
[ "USAGE: is_overlayfs_mounted [mountpoint]
|
||||||
|
|
||||||
Returns: true if overlayfs is mounted" ]
|
Diagnostic output of overlayfs df lines to stderr.
|
||||||
|
|
||||||
|
Returns: true if overlayfs is mounted [on mountpoint]" ]
|
||||||
is_overlayfs_mounted() {
|
is_overlayfs_mounted() {
|
||||||
local df_output=$(adb_su df -k </dev/null)
|
local df_output=$(adb_su df -k </dev/null)
|
||||||
local df_header_line=$(echo "${df_output}" | head -1)
|
local df_header_line=$(echo "${df_output}" | head -1)
|
||||||
|
|
@ -775,6 +777,9 @@ is_overlayfs_mounted() {
|
||||||
( echo "${df_header_line}"
|
( echo "${df_header_line}"
|
||||||
echo "${overlay_mounts}"
|
echo "${overlay_mounts}"
|
||||||
) >&2
|
) >&2
|
||||||
|
if [ "${#}" -gt 0 ] && ! ( echo "${overlay_mounts}" | grep -qE " ${1}\$" ); then
|
||||||
|
return 1
|
||||||
|
fi >/dev/null 2>/dev/null
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1123,14 +1128,47 @@ if [ "2" = "$(get_property partition.system.verified)" ]; then
|
||||||
fi
|
fi
|
||||||
if ${overlayfs_needed}; then
|
if ${overlayfs_needed}; then
|
||||||
is_overlayfs_mounted ||
|
is_overlayfs_mounted ||
|
||||||
die "no overlay takeover after adb disable-verity -R"
|
die -d "no overlay takeover after adb disable-verity -R"
|
||||||
LOG OK "overlay takeover after adb disable-verity -R"
|
LOG OK "overlay takeover after adb disable-verity -R"
|
||||||
fi
|
fi
|
||||||
LOG OK "adb disable-verity -R"
|
LOG OK "adb disable-verity -R"
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Precondition is a verity-disabled device with overlayfs already setup.
|
||||||
|
LOG RUN "Testing raw remount commands"
|
||||||
|
|
||||||
LOG RUN "Testing adb remount -R"
|
adb_sh grep -qE " (/system|/) [^ ]* rw," /proc/mounts </dev/null &&
|
||||||
|
die "/system is not RO"
|
||||||
|
adb_sh grep -q " /vendor [^ ]* rw," /proc/mounts </dev/null &&
|
||||||
|
die "/vendor is not RO"
|
||||||
|
|
||||||
|
T=$(adb_date)
|
||||||
|
adb_su mount -o remount,rw /vendor ||
|
||||||
|
die -t "${T}" "mount -o remount,rw /vendor"
|
||||||
|
adb_sh grep -q " /vendor [^ ]* rw," /proc/mounts </dev/null ||
|
||||||
|
die "/vendor is not RW after mount -o remount,rw"
|
||||||
|
LOG OK "mount -o remount,rw"
|
||||||
|
|
||||||
|
T=$(adb_date)
|
||||||
|
adb_su mount -o remount,ro /vendor ||
|
||||||
|
die -t "${T}" "mount -o remount,ro /vendor"
|
||||||
|
adb_sh grep -q " /vendor [^ ]* rw," /proc/mounts </dev/null &&
|
||||||
|
die "/vendor is not RO after mount -o remount,ro"
|
||||||
|
LOG OK "mount -o remount,ro"
|
||||||
|
|
||||||
|
T=$(adb_date)
|
||||||
|
adb_su remount vendor >&2 ||
|
||||||
|
die -t "${T}" "adb remount vendor"
|
||||||
|
adb_sh grep -q " /vendor [^ ]* rw," /proc/mounts </dev/null ||
|
||||||
|
die -t "${T}" "/vendor is not RW after adb remount vendor"
|
||||||
|
adb_sh grep -qE " (/system|/) [^ ]* rw," /proc/mounts </dev/null &&
|
||||||
|
die -t "${T}" "/system is not RO after adb remount vendor"
|
||||||
|
LOG OK "adb remount vendor"
|
||||||
|
|
||||||
|
LOG INFO "Restoring device RO state and destroying overlayfs"
|
||||||
|
T=$(adb_date)
|
||||||
|
adb_su mount -o remount,ro /vendor ||
|
||||||
|
die -t "${T}" "mount -o remount,ro /vendor"
|
||||||
if surgically_wipe_overlayfs; then
|
if surgically_wipe_overlayfs; then
|
||||||
adb_reboot &&
|
adb_reboot &&
|
||||||
adb_wait "${ADB_WAIT}" ||
|
adb_wait "${ADB_WAIT}" ||
|
||||||
|
|
@ -1139,6 +1177,31 @@ fi
|
||||||
is_overlayfs_mounted &&
|
is_overlayfs_mounted &&
|
||||||
die "overlay takeover unexpected at this phase"
|
die "overlay takeover unexpected at this phase"
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Precondition is a verity-disabled device with overlayfs *not* setup.
|
||||||
|
LOG RUN "Testing adb remount performs overlayfs setup from scratch"
|
||||||
|
|
||||||
|
adb_sh grep -q " /vendor [^ ]* rw," /proc/mounts </dev/null &&
|
||||||
|
die "/vendor is not RO"
|
||||||
|
T=$(adb_date)
|
||||||
|
adb_su remount vendor >&2 ||
|
||||||
|
die -t "${T}" "adb remount vendor from scratch"
|
||||||
|
if ${overlayfs_needed}; then
|
||||||
|
is_overlayfs_mounted /vendor ||
|
||||||
|
die -t "${T}" "expected overlay takeover /vendor"
|
||||||
|
is_overlayfs_mounted /system 2>/dev/null &&
|
||||||
|
die -t "${T}" "unexpected overlay takeover /system"
|
||||||
|
fi
|
||||||
|
adb_sh grep -q " /vendor [^ ]* rw," /proc/mounts </dev/null ||
|
||||||
|
die -t "${T}" "/vendor is not RW after adb remount vendor"
|
||||||
|
adb_sh grep -qE " (/system|/) [^ ]* rw," /proc/mounts </dev/null &&
|
||||||
|
die -t "${T}" "/system is not RO after adb remount vendor"
|
||||||
|
LOG OK "adb remount from scratch"
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Precondition is overlayfs partially setup by previous test.
|
||||||
|
LOG RUN "Testing adb remount -R"
|
||||||
|
|
||||||
T=$(adb_date)
|
T=$(adb_date)
|
||||||
adb_su remount -R </dev/null >&2 ||
|
adb_su remount -R </dev/null >&2 ||
|
||||||
die -t "${T}" "adb remount -R failed"
|
die -t "${T}" "adb remount -R failed"
|
||||||
|
|
@ -1151,16 +1214,16 @@ if [ "2" = "$(get_property partition.system.verified)" ]; then
|
||||||
die "verity not disabled after adb remount -R"
|
die "verity not disabled after adb remount -R"
|
||||||
fi
|
fi
|
||||||
if ${overlayfs_needed}; then
|
if ${overlayfs_needed}; then
|
||||||
is_overlayfs_mounted ||
|
is_overlayfs_mounted /system ||
|
||||||
die "no overlay takeover after adb remount -R"
|
die -d "expected overlay takeover /system"
|
||||||
|
is_overlayfs_mounted /vendor 2>/dev/null ||
|
||||||
|
die -d "expected overlay takeover /vendor"
|
||||||
LOG OK "overlay takeover after adb remount -R"
|
LOG OK "overlay takeover after adb remount -R"
|
||||||
fi
|
fi
|
||||||
LOG OK "adb remount -R"
|
LOG OK "adb remount -R"
|
||||||
|
|
||||||
################################################################################
|
# For devices using overlayfs, remount -R should reboot after overlayfs setup.
|
||||||
# Precondition is a verity-disabled device with overlayfs already setup.
|
# For legacy device, manual reboot to ensure device clean state.
|
||||||
LOG RUN "Testing adb remount RW"
|
|
||||||
|
|
||||||
if ! ${overlayfs_needed}; then
|
if ! ${overlayfs_needed}; then
|
||||||
LOG WARNING "Reboot to RO (device doesn't use overlayfs)"
|
LOG WARNING "Reboot to RO (device doesn't use overlayfs)"
|
||||||
adb_reboot &&
|
adb_reboot &&
|
||||||
|
|
@ -1168,35 +1231,32 @@ if ! ${overlayfs_needed}; then
|
||||||
die "lost device after reboot to RO $(usb_status)"
|
die "lost device after reboot to RO $(usb_status)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Precondition is a verity-disabled device with overlayfs already setup.
|
||||||
|
LOG RUN "Testing adb remount RW"
|
||||||
|
|
||||||
# Feed log with selinux denials as baseline before overlays
|
# Feed log with selinux denials as baseline before overlays
|
||||||
adb_unroot
|
adb_unroot
|
||||||
adb_sh find ${MOUNTS} </dev/null >/dev/null 2>/dev/null || true
|
adb_sh find ${MOUNTS} </dev/null >/dev/null 2>/dev/null || true
|
||||||
adb_root
|
adb_root
|
||||||
|
|
||||||
adb_sh grep -q " /vendor [^ ]* rw," /proc/mounts </dev/null &&
|
|
||||||
die "/vendor is not RO"
|
|
||||||
T=$(adb_date)
|
|
||||||
adb remount vendor >&2 ||
|
|
||||||
die -t "${T}" "adb remount vendor"
|
|
||||||
adb_sh grep -q " /vendor [^ ]* rw," /proc/mounts </dev/null ||
|
|
||||||
die "/vendor is not RW"
|
|
||||||
|
|
||||||
adb_sh grep -qE " (/system|/) [^ ]* rw," /proc/mounts </dev/null &&
|
adb_sh grep -qE " (/system|/) [^ ]* rw," /proc/mounts </dev/null &&
|
||||||
die "/system is not RO"
|
die "/system is not RO"
|
||||||
|
adb_sh grep -q " /vendor [^ ]* rw," /proc/mounts </dev/null &&
|
||||||
|
die "/vendor is not RO"
|
||||||
|
|
||||||
T=$(adb_date)
|
T=$(adb_date)
|
||||||
adb remount >&2 ||
|
adb remount >&2 ||
|
||||||
die -t "${T}" "adb remount"
|
die -t "${T}" "adb remount"
|
||||||
adb_sh grep -qE " (/system|/) [^ ]* rw," /proc/mounts </dev/null ||
|
adb_sh grep -qE " (/system|/) [^ ]* rw," /proc/mounts </dev/null ||
|
||||||
die "/system is not RW"
|
die -t "${T}" "/system is not RW"
|
||||||
|
adb_sh grep -q " /vendor [^ ]* rw," /proc/mounts </dev/null ||
|
||||||
|
die -t "${T}" "/vendor is not RW"
|
||||||
|
|
||||||
D=$(adb_sh df -k </dev/null)
|
if ${overlayfs_needed}; then
|
||||||
H=$(echo "${D}" | head -1)
|
is_overlayfs_mounted || die -t "${T}" "expected overlay takeover"
|
||||||
D=$(echo "${D}" | skip_unrelated_mounts | grep "^overlay ")
|
else
|
||||||
if [ -n "${D}" ] && ! ${overlayfs_needed}; then
|
is_overlayfs_mounted && die -t "${T}" "unexpected overlay takeover"
|
||||||
die -t "${T}" "unexpected overlay takeover"
|
|
||||||
fi
|
|
||||||
if [ -z "${D}" ] && ${overlayfs_needed}; then
|
|
||||||
die -t "${T}" "expected overlay takeover"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If scratch_partition && uses_dynamic_scratch, then scratch is on super.
|
# If scratch_partition && uses_dynamic_scratch, then scratch is on super.
|
||||||
|
|
@ -1234,10 +1294,7 @@ if ${overlayfs_needed}; then
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
( echo "${H}"
|
is_overlayfs_mounted /system 2>/dev/null ||
|
||||||
echo "${D}"
|
|
||||||
) >&2
|
|
||||||
echo "${D}" | grep ' /system$' >/dev/null ||
|
|
||||||
die -t "${T}" "expected overlay to takeover /system after remount"
|
die -t "${T}" "expected overlay to takeover /system after remount"
|
||||||
adb_sh grep "^overlay " /proc/mounts </dev/null |
|
adb_sh grep "^overlay " /proc/mounts </dev/null |
|
||||||
skip_unrelated_mounts |
|
skip_unrelated_mounts |
|
||||||
|
|
@ -1325,9 +1382,7 @@ adb_reboot &&
|
||||||
die "reboot after override content added failed `usb_status`"
|
die "reboot after override content added failed `usb_status`"
|
||||||
|
|
||||||
if ${overlayfs_needed}; then
|
if ${overlayfs_needed}; then
|
||||||
D=`adb_su df -k </dev/null` &&
|
is_overlayfs_mounted ||
|
||||||
H=`echo "${D}" | head -1` &&
|
|
||||||
D=`echo "${D}" | grep -v " /vendor/..*$" | grep "^overlay "` ||
|
|
||||||
die -d "overlay takeover failed after reboot"
|
die -d "overlay takeover failed after reboot"
|
||||||
|
|
||||||
adb_su sed -n '1,/overlay \/system/p' /proc/mounts </dev/null |
|
adb_su sed -n '1,/overlay \/system/p' /proc/mounts </dev/null |
|
||||||
|
|
@ -1449,22 +1504,16 @@ else
|
||||||
fixup_from_recovery ||
|
fixup_from_recovery ||
|
||||||
die "cannot reboot after flash vendor $(usb_status)"
|
die "cannot reboot after flash vendor $(usb_status)"
|
||||||
if ${overlayfs_needed}; then
|
if ${overlayfs_needed}; then
|
||||||
adb_root &&
|
is_overlayfs_mounted /system ||
|
||||||
D=`adb_sh df -k </dev/null` &&
|
|
||||||
H=`echo "${D}" | head -1` &&
|
|
||||||
D=`echo "${D}" | skip_unrelated_mounts | grep "^overlay "` &&
|
|
||||||
( echo "${H}" &&
|
|
||||||
echo "${D}"
|
|
||||||
) >&2 &&
|
|
||||||
echo "${D}" | grep "^overlay .* /system\$" >/dev/null ||
|
|
||||||
die "overlay /system takeover after flash vendor"
|
die "overlay /system takeover after flash vendor"
|
||||||
echo "${D}" | grep "^overlay .* /vendor\$" >/dev/null &&
|
if is_overlayfs_mounted /vendor 2>/dev/null; then
|
||||||
if ${is_userspace_fastboot}; then
|
if ${is_userspace_fastboot}; then
|
||||||
die "overlay supposed to be minus /vendor takeover after flash vendor"
|
die "overlay supposed to be minus /vendor takeover after flash vendor"
|
||||||
else
|
else
|
||||||
LOG WARNING "fastbootd missing required to invalidate, ignoring a failure"
|
LOG WARNING "fastbootd missing required to invalidate, ignoring a failure"
|
||||||
LOG WARNING "overlay supposed to be minus /vendor takeover after flash vendor"
|
LOG WARNING "overlay supposed to be minus /vendor takeover after flash vendor"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
check_eq "${A}" "$(adb_cat /system/hello)" "/system content after flash vendor"
|
check_eq "${A}" "$(adb_cat /system/hello)" "/system content after flash vendor"
|
||||||
check_eq "${SYSTEM_INO}" "$(adb_sh stat --format=%i /system/hello </dev/null)" "system inode after flash vendor"
|
check_eq "${SYSTEM_INO}" "$(adb_sh stat --format=%i /system/hello </dev/null)" "system inode after flash vendor"
|
||||||
|
|
@ -1566,54 +1615,5 @@ if ${is_bootloader_fastboot} && [ -n "${scratch_partition}" ]; then
|
||||||
die -t ${T} "remount failed"
|
die -t ${T} "remount failed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
LOG RUN "test raw remount commands"
|
|
||||||
|
|
||||||
fixup_from_fastboot() {
|
|
||||||
inFastboot || return 1
|
|
||||||
if [ -n "${ACTIVE_SLOT}" ]; then
|
|
||||||
local active_slot=`get_active_slot`
|
|
||||||
if [ X"${ACTIVE_SLOT}" != X"${active_slot}" ]; then
|
|
||||||
LOG WARNING "Active slot changed from ${ACTIVE_SLOT} to ${active_slot}"
|
|
||||||
else
|
|
||||||
LOG WARNING "Active slot to be set to ${ACTIVE_SLOT}"
|
|
||||||
fi
|
|
||||||
fastboot --set-active=${ACTIVE_SLOT}
|
|
||||||
fi
|
|
||||||
fastboot reboot
|
|
||||||
adb_wait ${ADB_WAIT}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Prerequisite is a prepped device from above.
|
|
||||||
adb_reboot &&
|
|
||||||
adb_wait ${ADB_WAIT} ||
|
|
||||||
fixup_from_fastboot ||
|
|
||||||
die "lost device after reboot to ro state `usb_status`"
|
|
||||||
adb_sh grep " /vendor .* rw," /proc/mounts >/dev/null </dev/null &&
|
|
||||||
die "/vendor is not read-only"
|
|
||||||
adb_su mount -o rw,remount /vendor </dev/null ||
|
|
||||||
die "remount command"
|
|
||||||
adb_sh grep " /vendor .* rw," /proc/mounts >/dev/null </dev/null ||
|
|
||||||
die "/vendor is not read-write"
|
|
||||||
LOG OK "mount -o rw,remount command works"
|
|
||||||
|
|
||||||
# Prerequisite is an overlayfs deconstructed device but with verity disabled.
|
|
||||||
# This also saves a lot of 'noise' from the command doing a mkfs on backing
|
|
||||||
# storage and all the related tuning and adjustment.
|
|
||||||
surgically_wipe_overlayfs || true
|
|
||||||
adb_reboot &&
|
|
||||||
adb_wait ${ADB_WAIT} ||
|
|
||||||
fixup_from_fastboot ||
|
|
||||||
die "lost device after reboot after wipe `usb_status`"
|
|
||||||
adb_sh grep " /vendor .* rw," /proc/mounts >/dev/null </dev/null &&
|
|
||||||
die "/vendor is not read-only"
|
|
||||||
adb_su remount vendor </dev/null ||
|
|
||||||
die "remount command"
|
|
||||||
adb_su df -k </dev/null | skip_unrelated_mounts >&2
|
|
||||||
adb_sh grep " /vendor .* rw," /proc/mounts >/dev/null </dev/null ||
|
|
||||||
die "/vendor is not read-write"
|
|
||||||
adb_sh grep " \(/system\|/\) .* rw," /proc/mounts >/dev/null </dev/null &&
|
|
||||||
die "/system is not read-only"
|
|
||||||
LOG OK "remount command works from scratch"
|
|
||||||
|
|
||||||
|
|
||||||
LOG PASSED "adb remount test"
|
LOG PASSED "adb remount test"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue