diff --git a/tools/acrn-manager/acrnctl.c b/tools/acrn-manager/acrnctl.c index ccc60eed2..5e0be864a 100644 --- a/tools/acrn-manager/acrnctl.c +++ b/tools/acrn-manager/acrnctl.c @@ -145,6 +145,7 @@ static void vmm_update(void) char *vmname; char *pvmname = NULL; struct vmm_struct *s; + size_t len = sizeof(cmd_out); snprintf(cmd, sizeof(cmd), "find %s/add/ -name \"*.sh\" | " @@ -152,6 +153,9 @@ static void vmm_update(void) "sed \"s/.sh//g\"", ACRNCTL_OPT_ROOT); shell_cmd(cmd, cmd_out, sizeof(cmd_out)); + /* Properly null-terminate cmd_out */ + cmd_out[len - 1] = '\0'; + vmname = strtok_r(cmd_out, "\n", &pvmname); while (vmname) { s = vmm_list_add(vmname); @@ -169,6 +173,9 @@ static void vmm_update(void) "sed \"s/-monitor.socket//g\"", ACRN_DM_SOCK_ROOT); shell_cmd(cmd, cmd_out, sizeof(cmd_out)); + /* Properly null-terminate cmd_out */ + cmd_out[len - 1] = '\0'; + vmname = strtok_r(cmd_out, "\n", &pvmname); while (vmname) { s = vmm_find(vmname); @@ -314,6 +321,7 @@ static int acrnctl_do_add(int argc, char *argv[]) int p, i; char cmd_out[256]; char vmname[128]; + size_t len = sizeof(cmd_out); if (argc < 2) { acrnctl_add_help(); @@ -375,6 +383,9 @@ static int acrnctl_do_add(int argc, char *argv[]) find_acrn_dm = 0; + /* Properly null-terminate buf */ + buf[MAX_FILE_SIZE - 1] = '\0'; + line = strtok_r(buf, "\n", &line_p); while (line) { word_p = NULL; @@ -423,6 +434,10 @@ static int acrnctl_do_add(int argc, char *argv[]) ret = -1; snprintf(cmd, sizeof(cmd), "cat ./%s.result", argv[1]); shell_cmd(cmd, cmd_out, sizeof(cmd_out)); + + /* Properly null-terminate cmd_out */ + cmd_out[len - 1] = '\0'; + printf("%s can't reach acrn-dm, " "please try again when you make sure it can launch an UOS\n" "result:\n%s\n", argv[1], cmd_out);