Prevent integer overflow 99/307299/1
authorYonggoo Kang <ygace.kang@samsung.com>
Thu, 7 Mar 2024 03:02:23 +0000 (12:02 +0900)
committerYonggoo Kang <ygace.kang@samsung.com>
Thu, 7 Mar 2024 03:02:23 +0000 (12:02 +0900)
Change-Id: Ieb82a6d5f789dde5b658fa2e4f1eab2c79de6390

srcs/server/socket-manager.cpp

index 0ca886ac3310a5513c3452c8b84fa001e80732f0..1eba34f3fad2c6c38ef1ba72f27cd6f073e9c650 100644 (file)
@@ -43,6 +43,7 @@
 namespace WA {
 
 time_t SOCKET_TIMEOUT = 60 * 2; // 2 minutes
+int SD_VECTOR_INCREASE_SIZE = 20;
 
 MessageBuffer SocketManager::newMessage(){
     auto buffer = std::make_unique<MessageBuffer>();
@@ -55,7 +56,7 @@ void SocketManager::RegisterFdForReading(int fd) {
     if (m_maxDesc < fd) {
         m_maxDesc = fd;
         if ((int)m_socketDescriptionVector.size() <= fd)
-            m_socketDescriptionVector.resize(fd+20);
+            m_socketDescriptionVector.resize(fd + SD_VECTOR_INCREASE_SIZE);
     }
 }
 
@@ -102,7 +103,13 @@ void SocketManager::ReadyForAccept() {
     unsigned int clientLen = sizeof(clientAddr);
     int client = accept4(m_listenSock, (struct sockaddr*) &clientAddr, &clientLen, SOCK_NONBLOCK);
     if (-1 == client) {
-        LogErrno("accept");
+        LogWithErrno(errno, "accept4");
+        return;
+    }
+    else if (std::numeric_limits<int>::max() - SD_VECTOR_INCREASE_SIZE <= client) {
+        LogError("An integer overflow my occur due to addtion between fd("
+                 << client << ")and SD_VECTOR_INCREASE_SIZE("
+                 << SD_VECTOR_INCREASE_SIZE << ")");
         return;
     }
     CreateDefaultReadSocketDescription(client);