Skip to content

Commit 5a7be9b

Browse files
taoyuhongwenlingz
authored andcommitted
tools: acrnctl fix cmd buffer is truncated when vmname too long
'acrnctl start vmname' use a cmd buffer with a sizeof 128 bytes, cmd[128] buffer will be truncated, when vmnane size is bigger than 29 bytes. In that situation, vmnane size still smaller than MAX_VM_OS_NAME_LEN, so it should be fixed. Macro PATH_LEN is useful to determine the cmd[] buffer length, so move it from acrn_mngr.c into acrn_mngr.h Tracked-On: #2851 Signed-off-by: Tao Yuhong <yuhong.tao@intel.com> Reviewed-by: Yan Like <like.yan@intel.com> Acked-by: Yin Fengwei <fengwei.yin@intel.com>
1 parent b2f2d95 commit 5a7be9b

File tree

4 files changed

+17
-18
lines changed

4 files changed

+17
-18
lines changed

tools/acrn-manager/acrn_mngr.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ static int check_dir(const char *path)
4040
#define MNGR_SOCK_FMT "/run/acrn/mngr/%s.%d.socket"
4141
#define MNGR_MAX_HANDLER 8
4242
#define MNGR_MAX_CLIENT 4
43-
#define PATH_LEN 128
4443

4544
#define CLIENT_BUF_LEN 4096
4645

tools/acrn-manager/acrn_mngr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <acrn_common.h>
1111

1212
#define MNGR_MSG_MAGIC 0x67736d206d6d76 /* that is char[8] "mngr msg", on X86 */
13+
#define PATH_LEN 128
1314

1415
struct mngr_msg {
1516
unsigned long long magic; /* Make sure you get a mngr_msg */

tools/acrn-manager/acrn_vm_ops.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ static void _scan_alive_vm(void)
127127
DIR *dir;
128128
struct dirent *entry;
129129
struct vmmngr_struct *vm;
130-
char name[128];
130+
char name[PATH_LEN];
131131
int pid;
132132
int ret;
133133

@@ -224,8 +224,8 @@ static void _scan_added_vm(void)
224224
DIR *dir;
225225
struct dirent *entry;
226226
struct vmmngr_struct *vm;
227-
char name[128];
228-
char suffix[128];
227+
char name[PATH_LEN];
228+
char suffix[PATH_LEN];
229229
int ret;
230230

231231
ret = check_dir(ACRN_CONF_PATH);
@@ -375,7 +375,7 @@ int list_vm()
375375

376376
int start_vm(const char *vmname)
377377
{
378-
char cmd[128];
378+
char cmd[PATH_LEN + sizeof(ACRN_CONF_PATH_ADD) * 2 + MAX_VM_OS_NAME_LEN * 2];
379379

380380
if (snprintf(cmd, sizeof(cmd), "bash %s/%s.sh $(cat %s/%s.args)",
381381
ACRN_CONF_PATH_ADD, vmname, ACRN_CONF_PATH_ADD, vmname) >= sizeof(cmd)) {

tools/acrn-manager/acrnctl.c

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ static int find_acrn_dm;
100100
static int write_tmp_file(int fd, int n, char *word[])
101101
{
102102
int len, ret, i = 0;
103-
char buf[128];
103+
char buf[PATH_LEN];
104104

105105
if (!n)
106106
return 0;
@@ -165,7 +165,6 @@ static inline int _get_vmname(const char *src, char *vmname, int max_len_vmname)
165165
}
166166

167167
#define MAX_FILE_SIZE (4096 * 5)
168-
#define FILE_NAME_LENGTH 128
169168

170169
#define TMP_FILE_SUFFIX ".acrnctl"
171170

@@ -177,16 +176,16 @@ static int acrnctl_do_add(int argc, char *argv[])
177176
char *word[MAX_WORD], *line;
178177
char *word_p = NULL, *line_p = NULL;
179178
int n_word;
180-
char fname[FILE_NAME_LENGTH + sizeof(TMP_FILE_SUFFIX)];
181-
char cmd[128];
182-
char args[128];
179+
char fname[PATH_LEN + sizeof(TMP_FILE_SUFFIX)];
180+
char cmd[PATH_LEN];
181+
char args[PATH_LEN];
183182
int p, i, len_cmd_out = 0, c_flag = 0;
184-
char cmd_out[256];
185-
char vmname[128];
183+
char cmd_out[PATH_LEN * 2];
184+
char vmname[PATH_LEN];
186185
size_t len = sizeof(cmd_out);
187186

188-
if (strnlen(argv[1], FILE_NAME_LENGTH) == FILE_NAME_LENGTH) {
189-
printf("File name too long (maximum len %d)\n", FILE_NAME_LENGTH);
187+
if (strnlen(argv[1], PATH_LEN) == PATH_LEN) {
188+
printf("File name too long (maximum len %d)\n", PATH_LEN);
190189
return -1;
191190
}
192191

@@ -441,9 +440,9 @@ static int acrnctl_do_stop(int argc, char *argv[])
441440
/* Function: Delete runC configuration */
442441
static inline int del_runC(char *argv)
443442
{
444-
char cmd[128];
445-
char cmd_out[256];
446-
char runc_path[128];
443+
char cmd[PATH_LEN];
444+
char cmd_out[PATH_LEN * 2];
445+
char runc_path[PATH_LEN];
447446

448447
/* The configuration added by launch_uos script */
449448
if (snprintf(runc_path, sizeof(runc_path), "%s/runc/%s",
@@ -489,7 +488,7 @@ static int acrnctl_do_del(int argc, char *argv[])
489488
{
490489
struct vmmngr_struct *s;
491490
int i;
492-
char cmd[128];
491+
char cmd[PATH_LEN];
493492

494493
for (i = 1; i < argc; i++) {
495494
s = vmmngr_find(argv[i]);

0 commit comments

Comments
 (0)