mirror of
https://github.com/falcosecurity/falco.git
synced 2026-04-11 14:32:55 +00:00
fix(userspace): replace gmtime/localtime with reentrant variants
gmtime() and localtime() return pointers to a shared static buffer, making them unsafe in multi-threaded contexts. Replace all call sites with gmtime_r() and localtime_r() which use caller-provided buffers. Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
This commit is contained in:
@@ -122,14 +122,16 @@ void falco_logger::log(falco_logger::level priority, const std::string&& msg) {
|
||||
std::time_t result = std::time(nullptr);
|
||||
if(falco_logger::time_format_iso_8601) {
|
||||
char buf[sizeof "YYYY-MM-DDTHH:MM:SS-0000"];
|
||||
const struct tm* gtm = std::gmtime(&result);
|
||||
if(gtm != NULL && (strftime(buf, sizeof(buf), "%FT%T%z", gtm) != 0)) {
|
||||
struct tm gtm;
|
||||
if(gmtime_r(&result, >m) != NULL &&
|
||||
(strftime(buf, sizeof(buf), "%FT%T%z", >m) != 0)) {
|
||||
fprintf(stderr, "%s: %s", buf, copy.c_str());
|
||||
}
|
||||
} else {
|
||||
const struct tm* ltm = std::localtime(&result);
|
||||
struct tm ltm;
|
||||
localtime_r(&result, <m);
|
||||
char tstr[std::size("WWW MMM DD HH:mm:ss YYYY")];
|
||||
std::strftime(std::data(tstr), std::size(tstr), "%a %b %d %H:%M:%S %Y", ltm);
|
||||
std::strftime(std::data(tstr), std::size(tstr), "%a %b %d %H:%M:%S %Y", <m);
|
||||
fprintf(stderr, "%s: %s", tstr, copy.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user