Remove code_cache info from parent's inode when code_cache is removed
Symptom:
After FOTA, shared_prefs directory of app is cleared.
Root cause:
PackageManager clears code_cache directory of all apps during first
boot after FOTA.
PackageManager saves inode number of code_cache directory to xattr of
app data directory in advance and accesses to code_cache directory by
saved inode number because app data stored in CE directory are encrypted
during boot for FBE.
However before FOTA, code_cache directory was deleted and shared_prefs
directory which has the same inode number as deleted code_cache
directory was created.
As a result PackageManager clears shared_prefs directory which has
inode number of code_cache directory.
Solution:
Remove inode number from xattr of app data directory when clear app
data.
Bug: 67140392
Change-Id: Ic7a6268a417aa41e2712499f397e6ec217b7cb3e
diff --git a/cmds/installd/utils.cpp b/cmds/installd/utils.cpp
index 7c05417..8a0e137 100644
--- a/cmds/installd/utils.cpp
+++ b/cmds/installd/utils.cpp
@@ -733,6 +733,12 @@
}
}
+void remove_path_xattr(const std::string& path, const char* inode_xattr) {
+ if (removexattr(path.c_str(), inode_xattr) && errno != ENODATA) {
+ PLOG(ERROR) << "Failed to remove xattr " << inode_xattr << " at " << path;
+ }
+}
+
/**
* Validate that the path is valid in the context of the provided directory.
* The path is allowed to have at most one subdirectory and no indirections