Loading cmds/installd/commands.c +26 −5 Original line number Diff line number Diff line Loading @@ -1384,10 +1384,11 @@ int restorecon_data(const char* pkgName, const char* seinfo, uid_t uid) static int prune_dex_exclusion_predicate(const char *file_name, const int is_dir) { // Don't exclude any directories, we want to inspect them // recusively for files. // Exclude all directories. The top level command will be // given a list of ISA specific directories that are assumed // to be flat. if (is_dir) { return 0; return 1; } Loading @@ -1405,6 +1406,26 @@ static int prune_dex_exclusion_predicate(const char *file_name, const int is_dir return 1; } int prune_dex_cache() { int prune_dex_cache(const char* subdir) { // "." is handled as a special case, and refers to // DALVIK_CACHE_PREFIX (usually /data/dalvik-cache). const bool is_dalvik_cache_root = !strcmp(subdir, "."); // Don't allow the path to contain "." or ".." except for the // special case above. This is much stricter than we need to be, // but there's no good reason to support them. if (strchr(subdir, '.' ) != NULL && !is_dalvik_cache_root) { return -1; } if (!is_dalvik_cache_root) { char full_path[PKG_PATH_MAX]; snprintf(full_path, sizeof(full_path), "%s%s", DALVIK_CACHE_PREFIX, subdir); return delete_dir_contents(full_path, 0, &prune_dex_exclusion_predicate); } // When subdir == ".", clean the contents of the top level // dalvik-cache directory. return delete_dir_contents(DALVIK_CACHE_PREFIX, 0, &prune_dex_exclusion_predicate); } cmds/installd/installd.c +2 −2 Original line number Diff line number Diff line Loading @@ -143,7 +143,7 @@ static int do_restorecon_data(char **arg, char reply[REPLY_MAX] __attribute__((u static int do_prune_dex_cache(char **arg __attribute__((unused)), char reply[REPLY_MAX] __attribute__((unused))) { return prune_dex_cache(); return prune_dex_cache(arg[0] /* subdirectory name */); } struct cmdinfo { Loading Loading @@ -172,7 +172,7 @@ struct cmdinfo cmds[] = { { "rmuser", 1, do_rm_user }, { "idmap", 3, do_idmap }, { "restorecondata", 3, do_restorecon_data }, { "prunedexcache", 0, do_prune_dex_cache }, { "prunedexcache", 1, do_prune_dex_cache }, }; static int readx(int s, void *_buf, int count) Loading cmds/installd/installd.h +1 −1 Original line number Diff line number Diff line Loading @@ -220,4 +220,4 @@ int movefiles(); int linklib(const char* target, const char* source, int userId); int idmap(const char *target_path, const char *overlay_path, uid_t uid); int restorecon_data(); int prune_dex_cache(); int prune_dex_cache(const char* subdir); Loading
cmds/installd/commands.c +26 −5 Original line number Diff line number Diff line Loading @@ -1384,10 +1384,11 @@ int restorecon_data(const char* pkgName, const char* seinfo, uid_t uid) static int prune_dex_exclusion_predicate(const char *file_name, const int is_dir) { // Don't exclude any directories, we want to inspect them // recusively for files. // Exclude all directories. The top level command will be // given a list of ISA specific directories that are assumed // to be flat. if (is_dir) { return 0; return 1; } Loading @@ -1405,6 +1406,26 @@ static int prune_dex_exclusion_predicate(const char *file_name, const int is_dir return 1; } int prune_dex_cache() { int prune_dex_cache(const char* subdir) { // "." is handled as a special case, and refers to // DALVIK_CACHE_PREFIX (usually /data/dalvik-cache). const bool is_dalvik_cache_root = !strcmp(subdir, "."); // Don't allow the path to contain "." or ".." except for the // special case above. This is much stricter than we need to be, // but there's no good reason to support them. if (strchr(subdir, '.' ) != NULL && !is_dalvik_cache_root) { return -1; } if (!is_dalvik_cache_root) { char full_path[PKG_PATH_MAX]; snprintf(full_path, sizeof(full_path), "%s%s", DALVIK_CACHE_PREFIX, subdir); return delete_dir_contents(full_path, 0, &prune_dex_exclusion_predicate); } // When subdir == ".", clean the contents of the top level // dalvik-cache directory. return delete_dir_contents(DALVIK_CACHE_PREFIX, 0, &prune_dex_exclusion_predicate); }
cmds/installd/installd.c +2 −2 Original line number Diff line number Diff line Loading @@ -143,7 +143,7 @@ static int do_restorecon_data(char **arg, char reply[REPLY_MAX] __attribute__((u static int do_prune_dex_cache(char **arg __attribute__((unused)), char reply[REPLY_MAX] __attribute__((unused))) { return prune_dex_cache(); return prune_dex_cache(arg[0] /* subdirectory name */); } struct cmdinfo { Loading Loading @@ -172,7 +172,7 @@ struct cmdinfo cmds[] = { { "rmuser", 1, do_rm_user }, { "idmap", 3, do_idmap }, { "restorecondata", 3, do_restorecon_data }, { "prunedexcache", 0, do_prune_dex_cache }, { "prunedexcache", 1, do_prune_dex_cache }, }; static int readx(int s, void *_buf, int count) Loading
cmds/installd/installd.h +1 −1 Original line number Diff line number Diff line Loading @@ -220,4 +220,4 @@ int movefiles(); int linklib(const char* target, const char* source, int userId); int idmap(const char *target_path, const char *overlay_path, uid_t uid); int restorecon_data(); int prune_dex_cache(); int prune_dex_cache(const char* subdir);