forked from swizzin/swizzin
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Backports fix for lock file crash merged into rTorrent master. rakshasa/rtorrent#1169
- Loading branch information
Showing
2 changed files
with
30 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
From 812bba81bc049a5f786282b3654cab294b0ef236 Mon Sep 17 00:00:00 2001 | ||
From: Aleksa Sarai <cyphar@cyphar.com> | ||
Date: Mon, 20 Jun 2022 19:09:57 +1000 | ||
Subject: [PATCH] utils: lockfile: avoid stack overflow for lockfile buffer | ||
|
||
There appears to have been some change on openSUSE (likely some new | ||
hardening flags for builds, or some glibc hardening) such that incorrect | ||
buffer handling results in a segfault even if the buffer is never | ||
overflowed. | ||
|
||
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com> | ||
--- | ||
src/utils/lockfile.cc | 3 ++- | ||
1 file changed, 2 insertions(+), 1 deletion(-) | ||
|
||
diff --git a/src/utils/lockfile.cc b/src/utils/lockfile.cc | ||
index 7d11d8c99..fac5cb23e 100644 | ||
--- a/src/utils/lockfile.cc | ||
+++ b/src/utils/lockfile.cc | ||
@@ -98,7 +98,8 @@ Lockfile::try_lock() { | ||
int pos = ::gethostname(buf, 255); | ||
|
||
if (pos == 0) { | ||
- ::snprintf(buf + std::strlen(buf), 255, ":+%i\n", ::getpid()); | ||
+ ssize_t len = std::strlen(buf); | ||
+ ::snprintf(buf + len, 255 - len, ":+%i\n", ::getpid()); | ||
int __UNUSED result = ::write(fd, buf, std::strlen(buf)); | ||
} |