diff options
author | Konrad Lipinski <k.lipinski2@samsung.com> | 2022-08-11 10:50:44 +0200 |
---|---|---|
committer | Konrad Lipinski <k.lipinski2@samsung.com> | 2022-08-11 10:50:44 +0200 |
commit | 8520afd111ec2fce940125f797334c61082e0cdf (patch) | |
tree | a498352e18081b31db635add7bf3e3e5f8d7f7b3 | |
parent | 720f51df5790b346f188705e4f4666b2aced7b28 (diff) | |
download | security-manager-8520afd111ec2fce940125f797334c61082e0cdf.tar.gz security-manager-8520afd111ec2fce940125f797334c61082e0cdf.tar.bz2 security-manager-8520afd111ec2fce940125f797334c61082e0cdf.zip |
Fix out of bounds socket description vector access
Change-Id: Iacfa7ad31ad1aa5e7f4743fc114e283acc58af8e
-rw-r--r-- | src/server/main/include/socket-manager.h | 4 | ||||
-rw-r--r-- | src/server/main/socket-manager.cpp | 11 |
2 files changed, 8 insertions, 7 deletions
diff --git a/src/server/main/include/socket-manager.h b/src/server/main/include/socket-manager.h index a9e9e7ec..e9d23669 100644 --- a/src/server/main/include/socket-manager.h +++ b/src/server/main/include/socket-manager.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2022 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014-2022 Samsung Electronics Co., Ltd. All rights reserved * * This file is licensed under the terms of MIT License or the Apache License * Version 2.0 of your choice. See the LICENSE.MIT file for MIT license details. @@ -101,7 +101,7 @@ private: Service *m_service = nullptr; fd_set m_readSet; fd_set m_writeSet; - int m_maxDesc = 0; + int m_maxDesc = -1; int m_signalFd, m_listenSock = -1, m_notifyMe; time_t m_nextGenerationStart = 0; std::mutex m_eventQueueMutex; diff --git a/src/server/main/socket-manager.cpp b/src/server/main/socket-manager.cpp index 7a9f3c85..e61406cc 100644 --- a/src/server/main/socket-manager.cpp +++ b/src/server/main/socket-manager.cpp @@ -65,20 +65,21 @@ namespace SecurityManager { void SocketManager::RegisterFdForReading(int fd) { FD_SET(fd, &m_readSet); - m_maxDesc = std::max(m_maxDesc, fd); + if (m_maxDesc < fd) { + m_maxDesc = fd; + if ((int)m_socketDescriptionVector.size() <= fd) + m_socketDescriptionVector.resize(fd+20); + } } void SocketManager::CreateDefaultReadSocketDescription(int sock) { - if ((int)m_socketDescriptionVector.size() <= sock) - m_socketDescriptionVector.resize(sock+20); + RegisterFdForReading(sock); auto &desc = m_socketDescriptionVector[sock]; desc.isOpen = true; desc.isActiveThisGeneration = true; desc.buffer.InitForInput(); - - RegisterFdForReading(sock); } SocketManager::SocketManager() |