This is an automated email from the ASF dual-hosted git repository.

twice pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/kvrocks.git


The following commit(s) were added to refs/heads/unstable by this push:
     new b3a6e948 Fix potentially overflow msg_namelen value in 
SupervisedSystemd (#1891)
b3a6e948 is described below

commit b3a6e948cb6e07eef2c20968e0c39a507f66f46b
Author: Twice <[email protected]>
AuthorDate: Sun Nov 12 11:28:37 2023 +0900

    Fix potentially overflow msg_namelen value in SupervisedSystemd (#1891)
---
 src/cli/daemon_util.h          | 13 +++++--------
 src/common/cron.cc             |  2 +-
 src/common/cron.h              |  2 +-
 src/common/io_util.cc          |  6 +++---
 src/server/redis_connection.cc |  4 ++--
 src/server/redis_connection.h  |  4 ++--
 src/server/worker.cc           |  2 +-
 src/stats/stats.h              |  2 +-
 src/storage/storage.cc         | 12 ++++++------
 9 files changed, 22 insertions(+), 25 deletions(-)

diff --git a/src/cli/daemon_util.h b/src/cli/daemon_util.h
index 9d22b708..d336e00a 100644
--- a/src/cli/daemon_util.h
+++ b/src/cli/daemon_util.h
@@ -56,23 +56,20 @@ inline bool SupervisedSystemd() {
     return false;
   }
 
-  sockaddr_un su;
-  memset(&su, 0, sizeof(su));
+  sockaddr_un su = {};
   su.sun_family = AF_UNIX;
   strncpy(su.sun_path, notify_socket, sizeof(su.sun_path) - 1);
   su.sun_path[sizeof(su.sun_path) - 1] = '\0';
   if (notify_socket[0] == '@') su.sun_path[0] = '\0';
 
-  iovec iov;
-  memset(&iov, 0, sizeof(iov));
+  iovec iov = {};
   std::string ready = "READY=1";
-  iov.iov_base = &ready[0];
+  iov.iov_base = ready.data();
   iov.iov_len = ready.size();
 
-  msghdr hdr;
-  memset(&hdr, 0, sizeof(hdr));
+  msghdr hdr = {};
   hdr.msg_name = &su;
-  hdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + 
strlen(notify_socket);
+  hdr.msg_namelen = offsetof(sockaddr_un, sun_path) + strlen(su.sun_path);
   hdr.msg_iov = &iov;
   hdr.msg_iovlen = 1;
 
diff --git a/src/common/cron.cc b/src/common/cron.cc
index 0ed9f088..f4c223bf 100644
--- a/src/common/cron.cc
+++ b/src/common/cron.cc
@@ -52,7 +52,7 @@ Status Cron::SetScheduleTime(const std::vector<std::string> 
&args) {
   return Status::OK();
 }
 
-bool Cron::IsTimeMatch(struct tm *tm) {
+bool Cron::IsTimeMatch(tm *tm) {
   if (tm->tm_min == last_tm_.tm_min && tm->tm_hour == last_tm_.tm_hour && 
tm->tm_mday == last_tm_.tm_mday &&
       tm->tm_mon == last_tm_.tm_mon && tm->tm_wday == last_tm_.tm_wday) {
     return false;
diff --git a/src/common/cron.h b/src/common/cron.h
index 4b99c51b..cba6d275 100644
--- a/src/common/cron.h
+++ b/src/common/cron.h
@@ -43,7 +43,7 @@ class Cron {
   ~Cron() = default;
 
   Status SetScheduleTime(const std::vector<std::string> &args);
-  bool IsTimeMatch(struct tm *tm);
+  bool IsTimeMatch(tm *tm);
   std::string ToString() const;
   bool IsEnabled() const;
 
diff --git a/src/common/io_util.cc b/src/common/io_util.cc
index 0deca97f..1bdc8522 100644
--- a/src/common/io_util.cc
+++ b/src/common/io_util.cc
@@ -125,9 +125,9 @@ StatusOr<std::vector<std::string>> LookupHostByName(const 
std::string &host) {
   for (auto p = servinfo; p != nullptr; p = p->ai_next) {
     char ip[INET6_ADDRSTRLEN] = {};
     if (p->ai_family == AF_INET) {
-      inet_ntop(p->ai_family, &((struct sockaddr_in *)p->ai_addr)->sin_addr, 
ip, sizeof(ip));
+      inet_ntop(p->ai_family, &((sockaddr_in *)p->ai_addr)->sin_addr, ip, 
sizeof(ip));
     } else {
-      inet_ntop(p->ai_family, &((struct sockaddr_in6 *)p->ai_addr)->sin6_addr, 
ip, sizeof(ip));
+      inet_ntop(p->ai_family, &((sockaddr_in6 *)p->ai_addr)->sin6_addr, ip, 
sizeof(ip));
     }
     ips.emplace_back(ip);
   }
@@ -350,7 +350,7 @@ StatusOr<std::tuple<std::string, uint32_t>> GetPeerAddr(int 
fd) {
 int GetLocalPort(int fd) {
   sockaddr_in6 address;
   socklen_t len = sizeof(address);
-  if (getsockname(fd, (struct sockaddr *)&address, &len) == -1) {
+  if (getsockname(fd, (sockaddr *)&address, &len) == -1) {
     return 0;
   }
 
diff --git a/src/server/redis_connection.cc b/src/server/redis_connection.cc
index a0b4ad4e..899260ff 100644
--- a/src/server/redis_connection.cc
+++ b/src/server/redis_connection.cc
@@ -75,7 +75,7 @@ void Connection::Close() {
 
 void Connection::Detach() { owner_->DetachConnection(this); }
 
-void Connection::OnRead(struct bufferevent *bev) {
+void Connection::OnRead(bufferevent *bev) {
   DLOG(INFO) << "[connection] on read: " << bufferevent_getfd(bev);
 
   SetLastInteraction();
@@ -93,7 +93,7 @@ void Connection::OnRead(struct bufferevent *bev) {
   }
 }
 
-void Connection::OnWrite(struct bufferevent *bev) {
+void Connection::OnWrite(bufferevent *bev) {
   if (IsFlagEnabled(kCloseAfterReply) || IsFlagEnabled(kCloseAsync)) {
     Close();
   }
diff --git a/src/server/redis_connection.h b/src/server/redis_connection.h
index acf2a638..0274bc33 100644
--- a/src/server/redis_connection.h
+++ b/src/server/redis_connection.h
@@ -55,8 +55,8 @@ class Connection : public EvbufCallbackBase<Connection> {
 
   void Close();
   void Detach();
-  void OnRead(struct bufferevent *bev);
-  void OnWrite(struct bufferevent *bev);
+  void OnRead(bufferevent *bev);
+  void OnWrite(bufferevent *bev);
   void OnEvent(bufferevent *bev, int16_t events);
   void Reply(const std::string &msg);
   void SendFile(int fd);
diff --git a/src/server/worker.cc b/src/server/worker.cc
index 94c208f9..efc4ddc6 100644
--- a/src/server/worker.cc
+++ b/src/server/worker.cc
@@ -273,7 +273,7 @@ Status Worker::ListenUnixSocket(const std::string &path, 
int perm, int backlog)
     return {Status::NotOK, 
evutil_socket_error_to_string(EVUTIL_SOCKET_ERROR())};
   }
 
-  if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0) {
+  if (bind(fd, (sockaddr *)&sa, sizeof(sa)) < 0) {
     return {Status::NotOK, 
evutil_socket_error_to_string(EVUTIL_SOCKET_ERROR())};
   }
 
diff --git a/src/stats/stats.h b/src/stats/stats.h
index ac73519e..114ac667 100644
--- a/src/stats/stats.h
+++ b/src/stats/stats.h
@@ -62,7 +62,7 @@ class Stats {
   std::atomic<uint64_t> out_bytes = {0};
 
   mutable std::shared_mutex inst_metrics_mutex;
-  std::vector<struct InstMetric> inst_metrics;
+  std::vector<InstMetric> inst_metrics;
 
   std::atomic<uint64_t> fullsync_counter = {0};
   std::atomic<uint64_t> psync_err_counter = {0};
diff --git a/src/storage/storage.cc b/src/storage/storage.cc
index eb0be132..9c5d03af 100644
--- a/src/storage/storage.cc
+++ b/src/storage/storage.cc
@@ -756,20 +756,20 @@ Status Storage::WriteToPropagateCF(const std::string 
&key, const std::string &va
 }
 
 Status Storage::ShiftReplId() {
-  const char *charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-  const int charset_len = static_cast<int>(strlen(charset));
+  static constexpr std::string_view charset = 
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
   // Do nothing if rsid psync is not enabled
   if (!config_->use_rsid_psync) return Status::OK();
 
   std::random_device rd;
   std::mt19937 gen(rd() + getpid());
-  std::uniform_int_distribution<> distrib(0, charset_len - 1);
-  std::string rand_str;
+  std::uniform_int_distribution<size_t> distrib(0, charset.size() - 1);
+
+  std::string rand_str(kReplIdLength, 0);
   for (int i = 0; i < kReplIdLength; i++) {
-    rand_str.push_back(charset[distrib(gen)]);
+    rand_str[i] = charset[distrib(gen)];
   }
-  replid_ = rand_str;
+  replid_ = std::move(rand_str);
   LOG(INFO) << "[replication] New replication id: " << replid_;
 
   // Write new replication id into db engine

Reply via email to