fs_mgr: overlayfs: test issues with single super device

Cleanup test issues with single super device.  Indicate mount point
instead of partitions as that can lead to confusion when referencing
the partition when there is none.  For example root (/) partition
uses overlay on /system.  Resolve a script syntax error when there
are no devices.  Fix script logic surrounding detection of overlayfs
takeover and handling of reboot device request from
adb disable-verity.

In README.overlayfs.md discuss
BOARD_<partitiion>IMAGE_PARTITION_RESERVED_SIZE and its negative
impact on right sizing.

Soften README.overlayfs.md wording with respect to update_engine
to match changes in handling.

Test: adb-remount-test.sh
Bug: 120536582
Bug: 109821005
Change-Id: Iad7e19a436322ff9c3bdc597f4545028be112ff5
This commit is contained in:
Mark Salyzyn 2018-12-06 08:39:11 -08:00
parent 17d41711c6
commit 38a17f0d76
2 changed files with 32 additions and 28 deletions

View File

@ -83,18 +83,19 @@ Caveats
-------
- Space used in the backing storage is on a file by file basis
and will require more space than if updated in place.
and will require more space than if updated in place. As such
it is important to be mindful of any wasted space, for instance
**BOARD_<partition>IMAGE_PARTITION_RESERVED_SIZE** being defined
will have a negative impact on the overall right-sizing of images
and thus free dynamic partition space.
- Kernel must have CONFIG_OVERLAY_FS=y and will need to be patched
with "*overlayfs: override_creds=off option bypass creator_cred*"
if higher than 4.6.
- *adb enable-verity* will free up overlayfs and as a bonus the
device will be reverted pristine to before any content was updated.
Update engine does not take advantage of this, will perform a full OTA.
- Update engine will not run if *fs_mgr_overlayfs_is_setup*() reports
true as adb remount overrides are incompatable with an OTA for
multiple reasons.
NB: This is not a problem for fastbootd or recovery as overrides are
disabled for those special boot scenarios.
- Update engine may not run if *fs_mgr_overlayfs_is_setup*() reports
true as adb remount overrides are incompatable with an OTA resources.
- For implementation simplicity on retrofit dynamic partition devices,
take the whole alternate super (eg: if "*a*" slot, then the whole of
"*system_b*").

View File

@ -92,7 +92,7 @@ get_property() {
Returns: true if device is (likely) a debug build" ]
isDebuggable() {
if inAdb && [ 1 -ne `get_property ro.debuggable` ]; then
if inAdb && [ 1 -ne "`get_property ro.debuggable`" ]; then
false
fi
}
@ -389,16 +389,16 @@ if [ ${err} != 0 ]; then
die -t "${T}" "disable-verity"
fi
rebooted=false
if [ X"${D}" != X"${H}" -a X"${D}" = X"${D##*using overlayfs}" ]; then
if [ X"${D}" != X"${H}" ]; then
echo "${H}"
if [ X"${D}" != X"${D##*setup failed}" ]; then
echo "${ORANGE}[ WARNING ]${NORMAL} overlayfs setup whined" >&2
fi
D=`adb_sh df -k </dev/null` &&
H=`echo "${D}" | head -1` &&
D=`echo "${D}" | grep "^overlay "` &&
[ -n "${D}" ] &&
( echo "${H}" && echo "${D}" ) &&
D=`echo "${D}" | grep "^overlay " || true` &&
[ -z "${D}" ] ||
( echo "${H}" && echo "${D}" && false ) ||
die -t ${T} "overlay takeover unexpected at this phase"
echo "${GREEN}[ INFO ]${NORMAL} rebooting as requested" >&2
L=`adb_logcat -b all -v nsec -t ${T} 2>&1`
@ -426,12 +426,12 @@ if ${overlayfs_supported} && ${overlayfs_needed} && [ X"${D}" != X"${D##*setup f
die -t "${T}" "setup for overlay"
fi
if [ X"${D}" != X"${D##*Successfully disabled verity}" ]; then
echo "${D}"
echo "${H}"
D=`adb_sh df -k </dev/null` &&
H=`echo "${D}" | head -1` &&
D=`echo "${D}" | grep "^overlay " | true` &&
[ -n "${D}" ] &&
( echo "${H}" && echo "${D}" ) &&
D=`echo "${D}" | grep "^overlay " || true` &&
[ -z "${D}" ] ||
( echo "${H}" && echo "${D}" && false ) ||
( [ -n "${L}" ] && echo "${L}" && false ) ||
die -t "${T}" "overlay takeover unexpected"
[ -n "${L}" ] && echo "${L}"
@ -504,17 +504,17 @@ fi
# Check something
echo "${GREEN}[ RUN ]${NORMAL} push content to system and vendor" >&2
echo "${GREEN}[ RUN ]${NORMAL} push content to /system and /vendor" >&2
A="Hello World! $(date)"
echo "${A}" | adb_sh "cat - > /system/hello"
echo "${A}" | adb_sh "cat - > /vendor/hello"
B="`adb_cat /system/hello`" ||
die "sytem hello"
check_eq "${A}" "${B}" system before reboot
check_eq "${A}" "${B}" /system before reboot
B="`adb_cat /vendor/hello`" ||
die "vendor hello"
check_eq "${A}" "${B}" vendor before reboot
check_eq "${A}" "${B}" /vendor before reboot
echo "${GREEN}[ RUN ]${NORMAL} reboot to confirm content persistent" >&2
@ -537,18 +537,21 @@ if ${overlayfs_needed}; then
fi
B="`adb_cat /system/hello`" ||
die "re-read system hello after reboot"
check_eq "${A}" "${B}" system after reboot
die "re-read /system/hello after reboot"
check_eq "${A}" "${B}" /system after reboot
echo "${GREEN}[ OK ]${NORMAL} /system content remains after reboot" >&2
# Only root can read vendor if sepolicy permissions are as expected
if ${enforcing}; then
B="`adb_cat /vendor/hello`" &&
die "re-read vendor hello after reboot w/o root"
die "re-read /vendor/hello after reboot w/o root"
check_eq "cat: /vendor/hello: Permission denied" "${B}" vendor after reboot w/o root
echo "${GREEN}[ OK ]${NORMAL} /vendor content correct MAC after reboot" >&2
fi
adb_root &&
B="`adb_cat /vendor/hello`" ||
die "re-read vendor hello after reboot"
die "re-read /vendor/hello after reboot"
check_eq "${A}" "${B}" vendor after reboot
echo "${GREEN}[ OK ]${NORMAL} /vendor content remains after reboot" >&2
echo "${GREEN}[ RUN ]${NORMAL} flash vendor, confirm its content disappears" >&2
@ -608,17 +611,17 @@ else
echo "${H}" &&
echo "${D}" &&
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 &&
die "overlay minus vendor takeover after flash vendor"
die "overlay supposed to be minus /vendor takeover after flash vendor"
fi
B="`adb_cat /system/hello`" ||
die "re-read system hello after flash vendor"
die "re-read /system/hello after flash vendor"
check_eq "${A}" "${B}" system after flash vendor
adb_root ||
die "adb root"
B="`adb_cat /vendor/hello`" &&
die "re-read vendor hello after flash vendor"
die "re-read /vendor/hello after flash vendor"
check_eq "cat: /vendor/hello: No such file or directory" "${B}" vendor after flash vendor
fi
@ -630,10 +633,10 @@ adb remount &&
adb_sh rm /system/hello </dev/null ||
die -t ${T} "cleanup hello"
B="`adb_cat /system/hello`" &&
die "re-read system hello after rm"
die "re-read /system/hello after rm"
check_eq "cat: /system/hello: No such file or directory" "${B}" after flash rm
B="`adb_cat /vendor/hello`" &&
die "re-read vendor hello after rm"
die "re-read /vendor/hello after rm"
check_eq "cat: /vendor/hello: No such file or directory" "${B}" after flash rm
if [ -n "${scratch_partition}" ]; then