Enable searching for mounted public volumes under any user

Currently, InstalldNativeServices when collecting mounted storage to
invalidate, only looks for mounts under /mnt/pass_through/0. This means
that public volumes mounted under users that aren't user 0 are never
collected. This change ensures that all of these public volumes are
collected by checking for /mnt/pass_through/0/emulated and for
/mnt/pass_through/x/UUID, where x is an integer greater than or equal to
0 and UUID is of the format HHHH-HHHH, H being any uppercase
letter or a digit. In this change, the regex checks for /emulated only
under user 0 because /mnt/pass_through/x/emulated/10 points to the same
thing regardless of the value of x, so only checking under user 0, which
is always mounted, prevents killing the same mount twice.

Test: atest ExternalStorageHostTest
Fixes: 299996244
Flag: EXEMPT refactor

Change-Id: Icb4fca7213f9e656594625a83ba16a7ffc8251fe
diff --git a/cmds/installd/InstalldNativeService.cpp b/cmds/installd/InstalldNativeService.cpp
index 4486bd6..db56551 100644
--- a/cmds/installd/InstalldNativeService.cpp
+++ b/cmds/installd/InstalldNativeService.cpp
@@ -119,7 +119,6 @@
  */
 static constexpr const char* kAppDataIsolationEnabledProperty = "persist.zygote.app_data_isolation";
 static constexpr const char* kMntSdcardfs = "/mnt/runtime/default/";
-static constexpr const char* kMntFuse = "/mnt/pass_through/0/";
 
 static std::atomic<bool> sAppDataIsolationEnabled(false);
 
@@ -3697,7 +3696,9 @@
         std::getline(in, ignored);
 
         if (android::base::GetBoolProperty(kFuseProp, false)) {
-            if (target.find(kMntFuse) == 0) {
+            const std::regex kMntFuseRe =
+                    std::regex(R"(^/mnt/pass_through/(0|[0-9]+/[A-Z0-9]{4}-[A-Z0-9]{4}).*)");
+            if (std::regex_match(target, kMntFuseRe)) {
                 LOG(DEBUG) << "Found storage mount " << source << " at " << target;
                 mStorageMounts[source] = target;
             }