Add exception handlings about a file descriptor 99/277099/1
authorHwankyu Jhun <h.jhun@samsung.com>
Thu, 30 Jun 2022 23:25:51 +0000 (08:25 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Thu, 30 Jun 2022 23:27:19 +0000 (08:27 +0900)
This patch checks whether the file descriptor is valid or not.
It the argument is the invalid fd, the function returns -EINVAL error.

Change-Id: I20172a1f04fa31b698b92f0cc5fa84388c6eccdb
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/aul_sock.cc

index 893ee7d..78b88dc 100644 (file)
@@ -381,6 +381,11 @@ extern "C" API struct timeval aul_sock_get_rcv_timeout(void) {
 }
 
 extern "C" API int aul_sock_set_sock_option(int fd, int cli) {
+  if (fd < 0 || fd >= MAX_FDS) {
+    _E("Invalid parameter");
+    return -EINVAL;
+  }
+
   int size = AUL_SOCK_MAXBUFF;
   int ret = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size));
   if (ret != 0)
@@ -437,13 +442,20 @@ extern "C" API int aul_sock_create_server(int pid, uid_t uid) {
 
 extern "C" API int aul_sock_send_raw_with_fd(int fd, int cmd,
     unsigned char* kb_data, int datalen, int opt) {
+  if (fd < 0 || fd >= MAX_FDS) {
+    _E("Invalid parameter");
+    return -EINVAL;
+  }
+
   return SendAndReceive(fd, cmd, kb_data, datalen, opt);
 }
 
 extern "C" API int aul_sock_send_bundle_with_fd(int fd, int cmd, bundle* kb,
     int opt) {
-  if (kb == nullptr)
+  if (fd < 0 || fd >= MAX_FDS || kb == nullptr) {
+    _E("Invalid parameter");
     return -EINVAL;
+  }
 
   tizen_base::Bundle b(kb, false, false);
   auto raw = b.ToRaw();
@@ -471,6 +483,11 @@ extern "C" API int aul_sock_send_bundle(int pid, uid_t uid, int cmd,
 
 extern "C" API app_pkt_t* aul_sock_recv_pkt(int fd, int* clifd,
     struct ucred* cred) {
+  if (fd < 0 || fd >= MAX_FDS) {
+    _E("Invalid parameter");
+    return nullptr;
+  }
+
   ServerSocket server(fd);
   auto client = std::unique_ptr<ClientSocket>(server.Accept());
   server.RemoveFd();
@@ -502,6 +519,11 @@ extern "C" API int aul_sock_recv_reply_pkt(int fd, app_pkt_t** ret_pkt) {
 
 extern "C" API int aul_sock_recv_reply_sock_fd(int fd, int (*ret_fd)[2],
     int fd_size) {
+  if (fd < 0 || fd >= MAX_FDS) {
+    _E("Invalid parameter");
+    return -EINVAL;
+  }
+
   int fds[2] = { -1, -1 };
   int vec_len = 0;
   int fds_len = 0;
@@ -603,6 +625,11 @@ extern "C" API int aul_sock_recv_pkt_with_cb(int fd,
 }
 
 extern "C" API int aul_sock_recv_result_with_fd(int fd) {
+  if (fd < 0 || fd >= MAX_FDS) {
+    _E("Invalid parameter");
+    return -EINVAL;
+  }
+
   ClientSocket client(fd);
   int res;
   int ret = client.Receive(&res, sizeof(res));
@@ -616,7 +643,7 @@ extern "C" API int aul_sock_recv_result_with_fd(int fd) {
 }
 
 extern "C" API int aul_sock_destroy_server(int fd) {
-  if (fd > -1)
+  if (fd > -1 && fd < MAX_FDS)
     close(fd);
 
   if (getuid() < REGULAR_UID_MIN) {
@@ -655,10 +682,13 @@ extern "C" API int aul_sock_send_result_v2(int fd, int res, bool do_close) {
 
 extern "C" API int aul_sock_recv_reply_pkt_v2(int fd, app_pkt_t** pkt,
     bool do_close) {
-  if (fd < 0 || fd >= MAX_FDS)
+  if (fd < 0 || fd >= MAX_FDS) {
+    _E("Invalid parameter");
     return -EINVAL;
+  }
 
   if (pkt == nullptr) {
+    _E("Invalid parameter");
     if (do_close)
       close(fd);