From 6841424bddcf23b38420c6f1688ffb18fc8c9c3f Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Jul 29 2019 12:51:48 +0000 Subject: import sysstat-10.1.5-17.el7_6.1 --- diff --git a/SOURCES/0001-sadc-Add-a-f-flag-to-force-fdatasync-use.patch b/SOURCES/0001-sadc-Add-a-f-flag-to-force-fdatasync-use.patch new file mode 100644 index 0000000..b52ef6f --- /dev/null +++ b/SOURCES/0001-sadc-Add-a-f-flag-to-force-fdatasync-use.patch @@ -0,0 +1,108 @@ +From f44275403f866cd0a7e0e40714c249ec5903d356 Mon Sep 17 00:00:00 2001 +From: Kyle Walker +Date: Wed, 30 Jan 2019 07:50:55 -0500 +Subject: [PATCH] sadc: Add a -f flag to force fdatasync() use + +For quite some time, the sadc utility has not used fdatasync() when writing +stat information to disk. This resulted in instances where data files could +be corrupted or entries lost if a system encountered a sudden reset +condition. This change adds a "-f" flag which can be used to bring back the +previous behaviour if end users require it. + +Note, the fdatasync() lowers the likelihood of lost data, but does so at +the expense of performance within the write operation. + +(cherry picked from commit 560d88cb5a16636acb0e350d6997fe915cc4253e) +--- + man/sadc.in | 8 +++++++- + sa.h | 2 ++ + sadc.c | 13 ++++++++++++- + 3 files changed, 21 insertions(+), 2 deletions(-) + +diff --git a/man/sadc.in b/man/sadc.in +index 9b75754..d3574c1 100644 +--- a/man/sadc.in ++++ b/man/sadc.in +@@ -4,7 +4,7 @@ sadc \- System activity data collector. + .SH SYNOPSIS + .B @SA_LIB_DIR@/sadc [ -C + .I comment +-.B ] [ -F ] [ -L ] [ -V ] [ -S { INT | DISK | SNMP | IPV6 | POWER | XDISK | ALL | XALL } ] [ ++.B ] [ -F ] [ -L ] [ -V ] [ -f ] [ -S { INT | DISK | SNMP | IPV6 | POWER | XDISK | ALL | XALL } ] [ + .I interval + .B [ + .I count +@@ -85,6 +85,12 @@ then it will be truncated. This may be useful for daily data files + created by an older version of + .B sadc + and whose format is no longer compatible with current one. ++.IP -f ++fdatasync() will be used to ensure data is written to disk. This differs ++from the normal operation in that a sudden system reset is less likely to ++result in the saDD datafiles being corrupted. However, this is at the ++expense of performance within the sadc process as forward progress will be ++blocked while data is written to underlying disk instead of just to cache. + .IP -L + .B sadc + will try to get an exclusive lock on the +diff --git a/sa.h b/sa.h +index 54e7a4e..0c3b24c 100644 +--- a/sa.h ++++ b/sa.h +@@ -88,6 +88,7 @@ + #define S_F_COMMENT 0x00001000 + #define S_F_PERSIST_NAME 0x00002000 + #define S_F_LOCAL_TIME 0x00004000 ++#define S_F_FDATASYNC 0x00008000 + + #define WANT_SINCE_BOOT(m) (((m) & S_F_SINCE_BOOT) == S_F_SINCE_BOOT) + #define WANT_SA_ROTAT(m) (((m) & S_F_SA_ROTAT) == S_F_SA_ROTAT) +@@ -104,6 +105,7 @@ + #define DISPLAY_COMMENT(m) (((m) & S_F_COMMENT) == S_F_COMMENT) + #define DISPLAY_PERSIST_NAME_S(m) (((m) & S_F_PERSIST_NAME) == S_F_PERSIST_NAME) + #define PRINT_LOCAL_TIME(m) (((m) & S_F_LOCAL_TIME) == S_F_LOCAL_TIME) ++#define FDATASYNC(m) (((m) & S_F_FDATASYNC) == S_F_FDATASYNC) + + #define AO_F_NULL 0x00000000 + +diff --git a/sadc.c b/sadc.c +index fb3254d..bac28d4 100644 +--- a/sadc.c ++++ b/sadc.c +@@ -85,7 +85,7 @@ void usage(char *progname) + progname); + + fprintf(stderr, _("Options are:\n" +- "[ -C ] [ -F ] [ -L ] [ -V ]\n" ++ "[ -C ] [ -F ] [ -L ] [ -V ] [ -f ]\n" + "[ -S { INT | DISK | IPV6 | POWER | SNMP | XDISK | ALL | XALL } ]\n")); + exit(1); + } +@@ -991,6 +991,13 @@ void rw_sa_stat_loop(long count, struct tm *rectime, int stdfd, int ofd, + + /* Flush data */ + fflush(stdout); ++ if (FDATASYNC(flags)) { ++ /* Flush previous file */ ++ if (fdatasync(ofd) < 0) { ++ perror("fdatasync"); ++ exit(4); ++ } ++ } + + if (count > 0) { + count--; +@@ -1079,6 +1086,10 @@ int main(int argc, char **argv) + optz = 1; + } + ++ else if (!strcmp(argv[opt], "-f")) { ++ flags |= S_F_FDATASYNC; ++ } ++ + else if (!strcmp(argv[opt], "-C")) { + if (argv[++opt]) { + strncpy(comment, argv[opt], MAX_COMMENT_LEN); +-- +2.17.1 + diff --git a/SPECS/sysstat.spec b/SPECS/sysstat.spec index c333490..0d1ef2c 100644 --- a/SPECS/sysstat.spec +++ b/SPECS/sysstat.spec @@ -1,7 +1,7 @@ Summary: Collection of performance monitoring tools for Linux Name: sysstat Version: 10.1.5 -Release: 17%{?dist} +Release: 17%{?dist}.1 License: GPLv2+ Group: Applications/System URL: http://sebastien.godard.pagesperso-orange.fr/ @@ -62,6 +62,8 @@ Patch34: 0018-Replace-strcpy-with-strncpy-to-avoid-buffer-overflow.patch Patch35: 0019-Cast-variables-to-target-type-before-use.patch Patch36: 0020-Fix-162-sadc-crashes-on-a-mtab-file-with-really-long.patch Patch37: 0021-Increase-maximum-fs-name-length-to-128.patch +# backport -f flag (force fdatasync() after append to sa file) +Patch38: 0001-sadc-Add-a-f-flag-to-force-fdatasync-use.patch Requires: /etc/cron.d, fileutils, grep, sh-utils, textutils Requires(post): systemd, systemd-sysv @@ -129,6 +131,7 @@ The cifsiostat command reports I/O statistics for CIFS file systems. %patch35 -p1 %patch36 -p1 %patch37 -p1 +%patch38 -p1 iconv -f windows-1252 -t utf8 CREDITS > CREDITS.aux mv CREDITS.aux CREDITS @@ -190,6 +193,9 @@ fi %{_localstatedir}/log/sa %changelog +* Mon Jun 03 2019 Michal Sekletár - 10.1.5-17.1 +- add -f flag to force fdatasync() after sa file update (#1716502) + * Mon Jun 25 2018 Michal Sekletar - 10.1.5-17 - fix potential buffer overflow identified by cppcheck (#1543238)