Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38a17f0d authored by Mark Salyzyn's avatar Mark Salyzyn
Browse files

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
parent 17d41711
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -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*").
+25 −22
Original line number Diff line number Diff line
@@ -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