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