e_info_client: fix the string overflow: check strlen before strncpy 31/271231/1
authorDuna Oh <duna.oh@samsung.com>
Mon, 14 Feb 2022 04:56:25 +0000 (13:56 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Thu, 17 Feb 2022 04:52:23 +0000 (13:52 +0900)
Change-Id: I6ed07fd97621bd4e7e03fc5d8d02ecf33f23a365

src/bin/e_info_client.c

index 03a87ef328099ebbd48c9bccd1a0b215c0f1edf4..cd50e55c4056254e7ba370566d09bd237cc3cc51 100644 (file)
@@ -5674,7 +5674,12 @@ _e_info_client_proc_init_device(int argc, char **argv)
         if (!strncmp(argv[i], "--node=", sizeof("--node=") - 1))
           {
              tmp = argv[i] + sizeof("--node=") - 1;
-             strncpy(node, tmp, strlen(tmp));
+             if (strlen(tmp) > sizeof(node))
+               {
+                  printf("Please input correct device node. The length should be less than 20\n");
+                  return;
+               }
+             strncpy(node, tmp, sizeof(node) - 1);
              type = 0x0;
              break;
           }
@@ -5713,7 +5718,12 @@ _e_info_client_proc_init_device(int argc, char **argv)
         else if (!strncmp(argv[i], "--name=", sizeof("--name=") - 1))
           {
              tmp = argv[i] + sizeof("--name=") - 1;
-             strncpy(name, tmp, strlen(tmp));
+             if (strlen(tmp) > sizeof(name))
+               {
+                  printf("Please iuput correct device name. The length should be less than 80\n");
+                  return;
+               }
+             strncpy(name, tmp, sizeof(name) - 1);
           }
         else
           {
@@ -5736,11 +5746,11 @@ _e_info_client_proc_init_device(int argc, char **argv)
    if (type)
      {
         if (name[0] == '\0')
-          snprintf(name, sizeof("E_Info_Device"), "E_Info_Device");
+          snprintf(name, sizeof(name), "E_Info_Device");
      }
    else
      {
-        snprintf(name, sizeof(node), "%s", node);
+        snprintf(name, sizeof(name), "%s", node);
      }
 
    if (!_e_info_client_eldbus_message_with_args("init_device", _e_info_client_cb_init_device, "us", type, name))
@@ -5794,7 +5804,13 @@ _e_info_client_proc_keygen(int argc, char **argv)
         if (!strncmp(argv[i], "--name=", sizeof("--name=") - 1))
           {
              tmp = argv[i] + sizeof("--name=") - 1;
-             strncpy(name, tmp, strlen(tmp));
+
+             if (strlen(tmp) > sizeof(name))
+               {
+                  printf("Please input correct keyname. The length should be less than 16\n");
+                  return;
+               }
+             strncpy(name, tmp, sizeof(name) - 1);
           }
         else if (!strncmp(argv[i], "--code=", sizeof("--code=") - 1))
           {