summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuyang Huang <yuyanghuang@google.com>2024-05-24 23:54:35 +0900
committerYuyang Huang <yuyanghuang@google.com>2024-05-24 23:55:22 +0900
commitc01aa55db9a69cf4776396f665cb7bffb6f08455 (patch)
tree113f1762da493579eaa4209619949d644c31e8d0
parente0ffcb902ce7153e7d43397cd041c7a2a1ff5dc4 (diff)
downloadapf-master.tar.gz
Enforce minimum 20-byte, 4-byte aligned APF ram for apf_runHEADmastermain
Test: TH Change-Id: I1032ea432a93fd2846aa6d4e6f6a1836c8e3b6d4
-rw-r--r--apf_run.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/apf_run.c b/apf_run.c
index 4c63767..c2df5c1 100644
--- a/apf_run.c
+++ b/apf_run.c
@@ -365,14 +365,19 @@ int main(int argc, char* argv[]) {
}
// Combine the program and data into the unified APF buffer.
+ uint32_t ram_len = program_len + data_len;
+ if (use_apf_v6_interpreter) {
+ ram_len += 3;
+ ram_len &= ~3;
+ if (data_len < 20) ram_len += 20;
+ }
+
if (data) {
- program = realloc(program, program_len + data_len);
- memcpy(program + program_len, data, data_len);
+ program = realloc(program, ram_len);
+ memcpy(program + ram_len - data_len, data, data_len);
free(data);
}
- uint32_t ram_len = program_len + data_len;
-
if (filename)
file_handler(use_apf_v6_interpreter, program, program_len, ram_len,
filename, filter_age);
@@ -382,11 +387,11 @@ int main(int argc, char* argv[]) {
if (data_len) {
printf("Data: ");
- print_hex(program + program_len, data_len);
+ print_hex(program + ram_len - data_len, data_len);
printf("\n");
if (print_counter_enabled) {
printf("APF packet counters: \n");
- print_counter(program + program_len, data_len);
+ print_counter(program + ram_len - data_len, data_len);
}
}