am 96e4409e
: Merge "Installd: Disallow relocation for decryption"
* commit '96e4409e8c38b1d79285eca9886d44ff850b5748': Installd: Disallow relocation for decryption
This commit is contained in:
commit
ee7ed02077
@ -641,7 +641,7 @@ static int split_count(const char *str)
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int split(char *buf, char **argv)
|
static int split(char *buf, const char **argv)
|
||||||
{
|
{
|
||||||
char *ctx;
|
char *ctx;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
@ -733,6 +733,9 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
|||||||
bool have_dex2oat_isa_variant = property_get(dex2oat_isa_variant_key,
|
bool have_dex2oat_isa_variant = property_get(dex2oat_isa_variant_key,
|
||||||
dex2oat_isa_variant, NULL) > 0;
|
dex2oat_isa_variant, NULL) > 0;
|
||||||
|
|
||||||
|
const char *dex2oat_norelocation = "-Xnorelocate";
|
||||||
|
bool have_dex2oat_relocation_skip_flag = false;
|
||||||
|
|
||||||
char dex2oat_flags[PROPERTY_VALUE_MAX];
|
char dex2oat_flags[PROPERTY_VALUE_MAX];
|
||||||
int dex2oat_flags_count = property_get("dalvik.vm.dex2oat-flags",
|
int dex2oat_flags_count = property_get("dalvik.vm.dex2oat-flags",
|
||||||
dex2oat_flags, NULL) <= 0 ? 0 : split_count(dex2oat_flags);
|
dex2oat_flags, NULL) <= 0 ? 0 : split_count(dex2oat_flags);
|
||||||
@ -805,6 +808,7 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
|||||||
if (skip_compilation) {
|
if (skip_compilation) {
|
||||||
strcpy(dex2oat_compiler_filter_arg, "--compiler-filter=verify-none");
|
strcpy(dex2oat_compiler_filter_arg, "--compiler-filter=verify-none");
|
||||||
have_dex2oat_compiler_filter_flag = true;
|
have_dex2oat_compiler_filter_flag = true;
|
||||||
|
have_dex2oat_relocation_skip_flag = true;
|
||||||
} else if (vm_safe_mode) {
|
} else if (vm_safe_mode) {
|
||||||
strcpy(dex2oat_compiler_filter_arg, "--compiler-filter=interpret-only");
|
strcpy(dex2oat_compiler_filter_arg, "--compiler-filter=interpret-only");
|
||||||
have_dex2oat_compiler_filter_flag = true;
|
have_dex2oat_compiler_filter_flag = true;
|
||||||
@ -814,18 +818,19 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
|||||||
|
|
||||||
ALOGV("Running %s in=%s out=%s\n", DEX2OAT_BIN, input_file_name, output_file_name);
|
ALOGV("Running %s in=%s out=%s\n", DEX2OAT_BIN, input_file_name, output_file_name);
|
||||||
|
|
||||||
char* argv[7 // program name, mandatory arguments and the final NULL
|
const char* argv[7 // program name, mandatory arguments and the final NULL
|
||||||
+ (have_dex2oat_isa_variant ? 1 : 0)
|
+ (have_dex2oat_isa_variant ? 1 : 0)
|
||||||
+ (have_dex2oat_isa_features ? 1 : 0)
|
+ (have_dex2oat_isa_features ? 1 : 0)
|
||||||
+ (have_profile_file ? 1 : 0)
|
+ (have_profile_file ? 1 : 0)
|
||||||
+ (have_top_k_profile_threshold ? 1 : 0)
|
+ (have_top_k_profile_threshold ? 1 : 0)
|
||||||
+ (have_dex2oat_Xms_flag ? 2 : 0)
|
+ (have_dex2oat_Xms_flag ? 2 : 0)
|
||||||
+ (have_dex2oat_Xmx_flag ? 2 : 0)
|
+ (have_dex2oat_Xmx_flag ? 2 : 0)
|
||||||
+ (have_dex2oat_compiler_filter_flag ? 1 : 0)
|
+ (have_dex2oat_compiler_filter_flag ? 1 : 0)
|
||||||
+ (have_dex2oat_swap_fd ? 1 : 0)
|
+ (have_dex2oat_swap_fd ? 1 : 0)
|
||||||
+ dex2oat_flags_count];
|
+ (have_dex2oat_relocation_skip_flag ? 2 : 0)
|
||||||
|
+ dex2oat_flags_count];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
argv[i++] = (char*)DEX2OAT_BIN;
|
argv[i++] = DEX2OAT_BIN;
|
||||||
argv[i++] = zip_fd_arg;
|
argv[i++] = zip_fd_arg;
|
||||||
argv[i++] = zip_location_arg;
|
argv[i++] = zip_location_arg;
|
||||||
argv[i++] = oat_fd_arg;
|
argv[i++] = oat_fd_arg;
|
||||||
@ -844,11 +849,11 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
|||||||
argv[i++] = top_k_profile_threshold_arg;
|
argv[i++] = top_k_profile_threshold_arg;
|
||||||
}
|
}
|
||||||
if (have_dex2oat_Xms_flag) {
|
if (have_dex2oat_Xms_flag) {
|
||||||
argv[i++] = (char*)RUNTIME_ARG;
|
argv[i++] = RUNTIME_ARG;
|
||||||
argv[i++] = dex2oat_Xms_arg;
|
argv[i++] = dex2oat_Xms_arg;
|
||||||
}
|
}
|
||||||
if (have_dex2oat_Xmx_flag) {
|
if (have_dex2oat_Xmx_flag) {
|
||||||
argv[i++] = (char*)RUNTIME_ARG;
|
argv[i++] = RUNTIME_ARG;
|
||||||
argv[i++] = dex2oat_Xmx_arg;
|
argv[i++] = dex2oat_Xmx_arg;
|
||||||
}
|
}
|
||||||
if (have_dex2oat_compiler_filter_flag) {
|
if (have_dex2oat_compiler_filter_flag) {
|
||||||
@ -860,10 +865,14 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
|||||||
if (dex2oat_flags_count) {
|
if (dex2oat_flags_count) {
|
||||||
i += split(dex2oat_flags, argv + i);
|
i += split(dex2oat_flags, argv + i);
|
||||||
}
|
}
|
||||||
|
if (have_dex2oat_relocation_skip_flag) {
|
||||||
|
argv[i++] = RUNTIME_ARG;
|
||||||
|
argv[i++] = dex2oat_norelocation;
|
||||||
|
}
|
||||||
// Do not add after dex2oat_flags, they should override others for debugging.
|
// Do not add after dex2oat_flags, they should override others for debugging.
|
||||||
argv[i] = NULL;
|
argv[i] = NULL;
|
||||||
|
|
||||||
execv(DEX2OAT_BIN, (char* const *)argv);
|
execv(DEX2OAT_BIN, (char * const *)argv);
|
||||||
ALOGE("execv(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno));
|
ALOGE("execv(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user