Compare commits

..

No commits in common. "c8" and "c10s" have entirely different histories.
c8 ... c10s

21 changed files with 156 additions and 863 deletions

1
.fmf/version Normal file
View File

@ -0,0 +1 @@
1

13
.gitignore vendored
View File

@ -1 +1,12 @@
SOURCES/sysstat-11.7.3.tar.xz /sysstat-12.5.6
/v12.3.1.tar.gz
/v12.5.3.tar.gz
/v12.5.4.tar.gz
/v12.5.6.tar.gz
/v12.6.0.tar.gz
/v12.7.1.tar.gz
/v12.7.2.tar.gz
/v12.7.4.tar.gz
/v12.7.5.tar.gz
/v12.7.6.tar.gz

View File

@ -1 +0,0 @@
d60fe0d4789cb377105c9a30f73e8e2158d3d288 SOURCES/sysstat-11.7.3.tar.xz

View File

@ -1,234 +0,0 @@
From c9a11d35df4aecfcf22aef827bac6cd57def9d4e Mon Sep 17 00:00:00 2001
From: Sebastien GODARD <sysstat@users.noreply.github.com>
Date: Sun, 23 Oct 2022 16:22:28 +0200
Subject: [PATCH] Add more overflow checks
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
Cherry-picked-by: Lukáš Zaoral <lzaoral@redhat.com>
Upstream-commit: c9a11d35df4aecfcf22aef827bac6cd57def9d4e
---
diff --git a/common.c b/common.c
index 1a84b052..27249772 100644
--- a/common.c
+++ b/common.c
@@ -274,6 +274,28 @@ void sysstat_panic(const char *function, int error_code)
exit(1);
}
+/*
+ * **************************************************************************
+ * Check if the multiplication of the 3 values may be greater than UINT_MAX.
+ *
+ * IN:
+ * @val1 First value.
+ * @val2 Second value.
+ * @val3 Third value.
+ ***************************************************************************
+ */
+void check_overflow(unsigned long long val1, unsigned long long val2,
+ unsigned long long val3)
+{
+ if (val1 * val2 * val3 > UINT_MAX) {
+#ifdef DEBUG
+ fprintf(stderr, "%s: Overflow detected (%llu). Aborting...\n",
+ __FUNCTION__, val1 * val2 * val3);
+#endif
+ exit(4);
+ }
+}
+
#ifndef SOURCE_SADC
/*
***************************************************************************
@@ -1656,28 +1677,4 @@ int parse_values(char *strargv, unsigned char bitmap[], int max_val, const char
return 0;
}
-/*
- ***************************************************************************
- * Check if the multiplication of the 3 values may be greater than UINT_MAX.
- *
- * IN:
- * @val1 First value.
- * @val2 Second value.
- * @val3 Third value.
- ***************************************************************************
- */
-void check_overflow(size_t val1, size_t val2, size_t val3)
-{
- if ((unsigned long long) val1 *
- (unsigned long long) val2 *
- (unsigned long long) val3 > UINT_MAX) {
-#ifdef DEBUG
- fprintf(stderr, "%s: Overflow detected (%llu). Aborting...\n",
- __FUNCTION__,
- (unsigned long long) val1 * (unsigned long long) val2 * (unsigned long long) val3);
-#endif
- exit(4);
- }
-}
-
#endif /* SOURCE_SADC undefined */
diff --git a/common.h b/common.h
index e8ab98ab..715b2da2 100644
--- a/common.h
+++ b/common.h
@@ -241,10 +241,10 @@ int is_device
(char *, int);
void sysstat_panic
(const char *, int);
+void check_overflow
+ (unsigned long long, unsigned long long, unsigned long long);
#ifndef SOURCE_SADC
-void check_overflow
- (size_t, size_t, size_t);
int count_bits
(void *, int);
int count_csvalues
diff --git a/sa_common.c b/sa_common.c
index b2cec4ad..3460257a 100644
--- a/sa_common.c
+++ b/sa_common.c
@@ -463,8 +463,9 @@ void allocate_structures(struct activity *act[])
if (act[i]->nr_ini > 0) {
/* Look for a possible overflow */
- check_overflow((size_t) act[i]->msize, (size_t) act[i]->nr_ini,
- (size_t) act[i]->nr2);
+ check_overflow((unsigned long long) act[i]->msize,
+ (unsigned long long) act[i]->nr_ini,
+ (unsigned long long) act[i]->nr2);
for (j = 0; j < 3; j++) {
SREALLOC(act[i]->buf[j], void,
@@ -529,6 +530,10 @@ void reallocate_all_buffers(struct activity *a, __nr_t nr_min)
while (nr_realloc < nr_min);
}
+ /* Look for a possible overflow */
+ check_overflow((unsigned long long) a->msize, nr_realloc,
+ (unsigned long long) a->nr2);
+
for (j = 0; j < 3; j++) {
SREALLOC(a->buf[j], void,
(size_t) a->msize * nr_realloc * (size_t) a->nr2);
diff --git a/sadc.c b/sadc.c
index 3458d089..123bf8e0 100644
--- a/sadc.c
+++ b/sadc.c
@@ -360,6 +360,12 @@ void sa_sys_init(void)
}
if (IS_COLLECTED(act[i]->options) && (act[i]->nr_ini > 0)) {
+
+ /* Look for a possible overflow */
+ check_overflow((unsigned long long) act[i]->msize,
+ (unsigned long long) act[i]->nr_ini,
+ (unsigned long long) act[i]->nr2);
+
/* Allocate structures for current activity (using nr_ini and nr2 results) */
SREALLOC(act[i]->_buf0, void,
(size_t) act[i]->msize * (size_t) act[i]->nr_ini * (size_t) act[i]->nr2);
--
2.45.0
From 44f1dc159242c1e434a3b836cda49f084c5a96cc Mon Sep 17 00:00:00 2001
From: Sebastien GODARD <sysstat@users.noreply.github.com>
Date: Sun, 6 Nov 2022 15:48:16 +0100
Subject: [PATCH] Make sure values to be compared are unsigned integers
It seems safer to make sure that input values are unsigned int before
casting them to unsigned long long and making the comparison.
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
Cherry-picked-by: Lukáš Zaoral <lzaoral@redhat.com>
Upstream-commit: 44f1dc159242c1e434a3b836cda49f084c5a96cc
---
diff --git a/common.c b/common.c
index 27249772..3b7fdcd5 100644
--- a/common.c
+++ b/common.c
@@ -425,13 +425,15 @@ int check_dir(char *dirname)
* @val3 Third value.
***************************************************************************
*/
-void check_overflow(unsigned long long val1, unsigned long long val2,
- unsigned long long val3)
+void check_overflow(unsigned int val1, unsigned int val2,
+ unsigned int val3)
{
- if (val1 * val2 * val3 > UINT_MAX) {
+ if ((unsigned long long) val1 * (unsigned long long) val2 *
+ (unsigned long long) val3 > UINT_MAX) {
#ifdef DEBUG
fprintf(stderr, "%s: Overflow detected (%llu). Aborting...\n",
- __FUNCTION__, val1 * val2 * val3);
+ __FUNCTION__, (unsigned long long) val1 * (unsigned long long) val2 *
+ (unsigned long long) val3);
#endif
exit(4);
}
diff --git a/common.h b/common.h
index 715b2da2..fc8a1a0d 100644
--- a/common.h
+++ b/common.h
@@ -241,7 +241,7 @@ int is_device
void sysstat_panic
(const char *, int);
void check_overflow
- (unsigned long long, unsigned long long, unsigned long long);
+ (unsigned int, unsigned int, unsigned int);
#ifndef SOURCE_SADC
int count_bits
diff --git a/sa_common.c b/sa_common.c
index 3460257a..0ca8b039 100644
--- a/sa_common.c
+++ b/sa_common.c
@@ -463,9 +463,9 @@ void allocate_structures(struct activity *act[])
if (act[i]->nr_ini > 0) {
/* Look for a possible overflow */
- check_overflow((unsigned long long) act[i]->msize,
- (unsigned long long) act[i]->nr_ini,
- (unsigned long long) act[i]->nr2);
+ check_overflow((unsigned int) act[i]->msize,
+ (unsigned int) act[i]->nr_ini,
+ (unsigned int) act[i]->nr2);
for (j = 0; j < 3; j++) {
SREALLOC(act[i]->buf[j], void,
@@ -531,8 +531,8 @@ void reallocate_all_buffers(struct activity *a, __nr_t nr_min)
}
/* Look for a possible overflow */
- check_overflow((unsigned long long) a->msize, nr_realloc,
- (unsigned long long) a->nr2);
+ check_overflow((unsigned int) a->msize, (unsigned int) nr_realloc,
+ (unsigned int) a->nr2);
for (j = 0; j < 3; j++) {
SREALLOC(a->buf[j], void,
diff --git a/sadc.c b/sadc.c
index 123bf8e0..40a1e15b 100644
--- a/sadc.c
+++ b/sadc.c
@@ -362,9 +362,9 @@ void sa_sys_init(void)
if (IS_COLLECTED(act[i]->options) && (act[i]->nr_ini > 0)) {
/* Look for a possible overflow */
- check_overflow((unsigned long long) act[i]->msize,
- (unsigned long long) act[i]->nr_ini,
- (unsigned long long) act[i]->nr2);
+ check_overflow((unsigned int) act[i]->msize,
+ (unsigned int) act[i]->nr_ini,
+ (unsigned int) act[i]->nr2);
/* Allocate structures for current activity (using nr_ini and nr2 results) */
SREALLOC(act[i]->_buf0, void,
--
2.45.0

View File

@ -1,88 +0,0 @@
From 5b5339d06c4f50730e5cc679e0854ce716f39117 Mon Sep 17 00:00:00 2001
From: Ondrej Dubaj <odubaj@redhat.com>
Date: Thu, 28 Feb 2019 15:29:08 +0100
Subject: [PATCH] ignoring autofs as real filesystem by counting number of
valid filesystems and getting all valid filesystems
---
count.c | 18 ++++++++++++++++--
rd_stats.c | 18 ++++++++++++++++--
2 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/count.c b/count.c
index 03469b0..6424baa 100644
--- a/count.c
+++ b/count.c
@@ -463,8 +463,8 @@ __nr_t get_usb_nr(void)
__nr_t get_filesystem_nr(void)
{
FILE *fp;
- char line[512], fs_name[MAX_FS_LEN], mountp[256];
- char *pos = 0;
+ char line[512], fs_name[MAX_FS_LEN], mountp[256], type[128];
+ char *pos = 0, *pos2 = 0;
__nr_t fs = 0;
int skip = 0, skip_next = 0;
struct statvfs buf;
@@ -491,6 +491,20 @@ __nr_t get_filesystem_nr(void)
if (pos == NULL)
continue;
+ /*
+ * Find second field separator position,
+ * read filesystem type,
+ * if filesystem type is autofs, skip it
+ */
+ memset(type, 0, sizeof(type));
+ pos2 = strchr(pos + 1, ' ');
+ if (pos2 == NULL)
+ continue;
+
+ sscanf(pos2 + 1, "%127s", type);
+ if(strcmp(type, "autofs") == 0)
+ continue;
+
/* Read filesystem name and mount point */
sscanf(line, "%127s", fs_name);
sscanf(pos + 1, "%255s", mountp);
diff --git a/rd_stats.c b/rd_stats.c
index 61dc958..43e082c 100644
--- a/rd_stats.c
+++ b/rd_stats.c
@@ -2464,10 +2464,10 @@ __nr_t read_bus_usb_dev(struct stats_pwr_usb *st_pwr_usb, __nr_t nr_alloc)
__nr_t read_filesystem(struct stats_filesystem *st_filesystem, __nr_t nr_alloc)
{
FILE *fp;
- char line[512], fs_name[128], mountp[256];
+ char line[512], fs_name[128], mountp[256], type[128];
int skip = 0, skip_next = 0;
char *pos = 0;
- __nr_t fs_read = 0;
+ __nr_t fs_read = 0, *pos2 = 0;
struct stats_filesystem *st_filesystem_i;
struct statvfs buf;
@@ -2491,6 +2491,20 @@ __nr_t read_filesystem(struct stats_filesystem *st_filesystem, __nr_t nr_alloc)
if (pos == NULL)
continue;
+ /*
+ * Find second field separator position,
+ * read filesystem type,
+ * if filesystem type is autofs, skip it
+ */
+ memset(type, 0, sizeof(type));
+ pos2 = strchr(pos + 1, ' ');
+ if (pos2 == NULL)
+ continue;
+
+ sscanf(pos2 + 1, "%127s", type);
+ if(strcmp(type, "autofs") == 0)
+ continue;
+
/* Read current filesystem name */
sscanf(line, "%127s", fs_name);
/*
--
2.30.1 (Apple Git-130)

View File

@ -1,63 +0,0 @@
From 1f5949d4a6fcb33065dbb1d509f356db039998ed Mon Sep 17 00:00:00 2001
From: Sebastien GODARD <sysstat@users.noreply.github.com>
Date: Wed, 2 Sep 2020 19:04:04 +0200
Subject: [PATCH] Workaround for iowait being decremented
The iowait value reported by the kernel on NO_HZ systems can decrement
as a result of inaccurate iowait tracking. Waiting on IO can be first
accounted as iowait but then instead as idle.
Function get_per_cpu_interval() considers iowait going backwards between
two readings as a CPU coming back online and resets the iowait value of
the first reading to 0. If iowait is decremented only because of
inaccurate tracking, this causes that almost all time between the two
readings is incorrectly recognized by sar as being spent in iowait.
The patch updates the code in get_per_cpu_interval() to recognize this
situation. If the iowait value between two readings decremented but the
idle value did not then the code now considers it as a problem with the
iowait reporting and corrects the first value according to the second
reading. Otherwise, the code remains treating decremented iowait as a
CPU coming back online.
Fixes #14.
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
---
rd_stats.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/rd_stats.c b/rd_stats.c
index 56d42d00..fb93f23f 100644
--- a/rd_stats.c
+++ b/rd_stats.c
@@ -440,12 +440,26 @@ unsigned long long get_per_cpu_interval(struct stats_cpu *scc,
* value was greater than ULLONG_MAX - 0x7ffff (the counter probably
* overflew).
*/
+ if ((scc->cpu_iowait < scp->cpu_iowait) && (scp->cpu_iowait < (ULLONG_MAX - 0x7ffff))) {
+ /*
+ * The iowait value reported by the kernel can also decrement as
+ * a result of inaccurate iowait tracking. Waiting on IO can be
+ * first accounted as iowait but then instead as idle.
+ * Therefore if the idle value during the same period did not
+ * decrease then consider this is a problem with the iowait
+ * reporting and correct the previous value according to the new
+ * reading. Otherwise, treat this as CPU coming back online.
+ */
+ if ((scc->cpu_idle > scp->cpu_idle) || (scp->cpu_idle >= (ULLONG_MAX - 0x7ffff))) {
+ scp->cpu_iowait = scc->cpu_iowait;
+ }
+ else {
+ scp->cpu_iowait = 0;
+ }
+ }
if ((scc->cpu_idle < scp->cpu_idle) && (scp->cpu_idle < (ULLONG_MAX - 0x7ffff))) {
scp->cpu_idle = 0;
}
- if ((scc->cpu_iowait < scp->cpu_iowait) && (scp->cpu_iowait < (ULLONG_MAX - 0x7ffff))) {
- scp->cpu_iowait = 0;
- }
/*
* Don't take cpu_guest and cpu_guest_nice into account

View File

@ -1,28 +0,0 @@
From 06e226703bee77e507f9f480807e230f677f0cb9 Mon Sep 17 00:00:00 2001
From: Sdrkun <shanzhikun@gmail.com>
Date: Tue, 28 Apr 2020 10:31:54 -0400
Subject: [PATCH] sa1: fix sar error when the directory var/log/sa was removed.
Signed-off-by: Sdrkun <shanzhikun@gmail.com>
Cherry-picked-by: Lukáš Zaoral <lzaoral@redhat.com>
Upstream-commit: 06e226703bee77e507f9f480807e230f677f0cb9
---
sa1.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/sa1.in b/sa1.in
index e908ad33..e9047d06 100644
--- a/sa1.in
+++ b/sa1.in
@@ -16,6 +16,7 @@
[ -r ${SYSCONFIG_DIR}/sysstat ] && . ${SYSCONFIG_DIR}/sysstat
[ -d ${SA_DIR} ] || SA_DIR=@SA_DIR@
+[ -d @SA_DIR@ ] || mkdir @SA_DIR@
if [ ${HISTORY} -gt 28 ]
then
--
2.43.0

View File

@ -1,101 +0,0 @@
From 560d88cb5a16636acb0e350d6997fe915cc4253e Mon Sep 17 00:00:00 2001
From: Kyle Walker <kwalker@redhat.com>
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.
---
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 2d754b71..ce8ee230 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 ] [ -D ] [ -F ] [ -L ] [ -V ] [ -S { DISK | INT | IPV6 | POWER | SNMP | XDISK | ALL | XALL [,...] } ] [
+.B ] [ -D ] [ -F ] [ -L ] [ -V ] [ -f ] [ -S { DISK | INT | IPV6 | POWER | SNMP | XDISK | ALL | XALL [,...] } ] [
.I interval
.B [
.I count
@@ -106,6 +106,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 1cd0c3d9..d3236f7c 100644
--- a/sa.h
+++ b/sa.h
@@ -110,5 +110,6 @@
#define S_F_HUMAN_READ 0x01000000
#define S_F_ZERO_OMIT 0x02000000
+#define S_F_FDATASYNC 0x08000000
#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)
@@ -138,5 +139,6 @@
#define PACK_VIEWS(m) (((m) & S_F_SVG_PACKED) == S_F_SVG_PACKED)
#define DISPLAY_HUMAN_READ(m) (((m) & S_F_HUMAN_READ) == S_F_HUMAN_READ)
+#define FDATASYNC(m) (((m) & S_F_FDATASYNC) == S_F_FDATASYNC)
#define AO_F_NULL 0x00000000
diff --git a/sadc.c b/sadc.c
index 826f4aed..139d490a 100644
--- a/sadc.c
+++ b/sadc.c
@@ -92,7 +92,7 @@ void usage(char *progname)
progname);
fprintf(stderr, _("Options are:\n"
- "[ -C <comment> ] [ -D ] [ -F ] [ -L ] [ -V ]\n"
+ "[ -C <comment> ] [ -D ] [ -F ] [ -L ] [ -V ] [ -f ]\n"
"[ -S { INT | DISK | IPV6 | POWER | SNMP | XDISK | ALL | XALL } ]\n"));
exit(1);
}
@@ -1109,6 +1109,13 @@ void rw_sa_stat_loop(long count, int stdfd, int ofd, char ofile[],
/* Flush data */
fflush(stdout);
+ if (FDATASYNC(flags)) {
+ /* If indicated, sync the data to media */
+ if (fdatasync(ofd) < 0) {
+ perror("fdatasync");
+ exit(4);
+ }
+ }
if (count > 0) {
count--;
@@ -1206,6 +1213,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]) {
usage(argv[0]);

View File

@ -1,40 +0,0 @@
From ce90f916fee2a39eb914f8b6b349adb76d100f75 Mon Sep 17 00:00:00 2001
From: Sebastien GODARD <sysstat@users.noreply.github.com>
Date: Sat, 13 Apr 2019 18:44:29 +0200
Subject: [PATCH] sadf: Fix seg fault on empty data files
Trying to display XML or JSON data (with sadf -x/-j) from a data file
containing only RESTART records created a core dump.
This patch fixes that.
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
---
sadf.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/sadf.c b/sadf.c
index 2d2c39c..5d558d3 100644
--- a/sadf.c
+++ b/sadf.c
@@ -963,14 +963,15 @@ void logic1_display_loop(int ifd, struct file_activity *file_actlst, char *file,
(tm_start.use && (datecmp(loctime, &tm_start) < 0)) ||
(tm_end.use && (datecmp(loctime, &tm_end) >= 0))));
- /* Save the first stats collected. Used for example in next_slice() function */
- copy_structures(act, id_seq, record_hdr, 2, 0);
-
curr = 1;
cnt = count;
reset = TRUE;
if (!eosaf) {
+
+ /* Save the first stats collected. Used for example in next_slice() function */
+ copy_structures(act, id_seq, record_hdr, 2, 0);
+
do {
eosaf = read_next_sample(ifd, IGNORE_COMMENT | IGNORE_RESTART, curr,
file, &rtype, tab, file_magic, file_actlst,
--
2.31.1

View File

@ -1,31 +0,0 @@
From c542c259ba9e71a5ade235dfbcde67ac8b510c4f Mon Sep 17 00:00:00 2001
From: Sebastien GODARD <sysstat@users.noreply.github.com>
Date: Fri, 19 Apr 2019 15:20:45 +0200
Subject: [PATCH] sar: Add missing %gnice CPU value for tickless CPU
A field (which should be displayed as 0.00) was missing in CPU
statistics displayed by "sar -u ALL" for tickless CPUs.
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
---
pr_stats.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pr_stats.c b/pr_stats.c
index 4fbd5d1..319630d 100644
--- a/pr_stats.c
+++ b/pr_stats.c
@@ -218,8 +218,8 @@ __print_funct_t print_cpu_stats(struct activity *a, int prev, int curr,
* %irq, %soft, %guest, %gnice.
*/
else if (DISPLAY_CPU_ALL(a->opt_flags)) {
- cprintf_pc(DISPLAY_UNIT(flags), 4, 9, 2,
- 0.0, 0.0, 0.0, 100.0);
+ cprintf_pc(DISPLAY_UNIT(flags), 5, 9, 2,
+ 0.0, 0.0, 0.0, 0.0, 100.0);
printf("\n");
}
continue;
--
2.30.1 (Apple Git-130)

View File

@ -1,26 +0,0 @@
From 83dac62520afe3fa92b53393f438c9fb9c492525 Mon Sep 17 00:00:00 2001
From: Sebastien GODARD <sysstat@users.noreply.github.com>
Date: Sat, 6 Oct 2018 18:12:54 +0200
Subject: [PATCH] sar: Fix typo in manual page
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
---
man/sar.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/man/sar.in b/man/sar.in
index c45ee54..925c5f5 100644
--- a/man/sar.in
+++ b/man/sar.in
@@ -373,7 +373,7 @@ The following values are displayed:
.B MBfsfree
.RS
.RS
-Total amount a free space in megabytes (including space available only to privileged user).
+Total amount of free space in megabytes (including space available only to privileged user).
.RE
.B MBfsused
--
2.31.1

View File

@ -1,43 +0,0 @@
--- sa_common.c
+++ sa_common.c
@@ -1249,6 +1249,11 @@
/* Remap [unsigned] long fields */
d = gtypes_nr[0] - ftypes_nr[0];
if (d) {
+
+ if (ftypes_nr[0] * ULL_ALIGNMENT_WIDTH < ftypes_nr[0])
+ /* Overflow */
+ return;
+
memmove(((char *) ps) + gtypes_nr[0] * ULL_ALIGNMENT_WIDTH,
((char *) ps) + ftypes_nr[0] * ULL_ALIGNMENT_WIDTH,
st_size - ftypes_nr[0] * ULL_ALIGNMENT_WIDTH);
@@ -1260,7 +1265,13 @@
/* Remap [unsigned] int fields */
d = gtypes_nr[1] - ftypes_nr[1];
if (d) {
- memmove(((char *) ps) + gtypes_nr[0] * ULL_ALIGNMENT_WIDTH
+
+ if (gtypes_nr[0] * ULL_ALIGNMENT_WIDTH +
+ ftypes_nr[1] * UL_ALIGNMENT_WIDTH < ftypes_nr[1])
+ /* Overflow */
+ return;
+
+ memmove(((char *) ps) + gtypes_nr[0] * ULL_ALIGNMENT_WIDTH
+ gtypes_nr[1] * UL_ALIGNMENT_WIDTH,
((char *) ps) + gtypes_nr[0] * ULL_ALIGNMENT_WIDTH
+ ftypes_nr[1] * UL_ALIGNMENT_WIDTH,
@@ -1275,6 +1286,13 @@
/* Remap possible fields (like strings of chars) following int fields */
d = gtypes_nr[2] - ftypes_nr[2];
if (d) {
+
+ if (gtypes_nr[0] * ULL_ALIGNMENT_WIDTH +
+ gtypes_nr[1] * UL_ALIGNMENT_WIDTH +
+ ftypes_nr[2] * U_ALIGNMENT_WIDTH < ftypes_nr[2])
+ /* Overflow */
+ return;
+
memmove(((char *) ps) + gtypes_nr[0] * ULL_ALIGNMENT_WIDTH
+ gtypes_nr[1] * UL_ALIGNMENT_WIDTH
+ gtypes_nr[2] * U_ALIGNMENT_WIDTH,

View File

@ -1,85 +0,0 @@
From 9c4eaf150662ad40607923389d4519bc83b93540 Mon Sep 17 00:00:00 2001
From: Sebastien <seb@fedora-2.home>
Date: Sat, 15 Oct 2022 14:24:22 +0200
Subject: [PATCH] Fix size_t overflow in sa_common.c (GHSL-2022-074)
allocate_structures function located in sa_common.c insufficiently
checks bounds before arithmetic multiplication allowing for an
overflow in the size allocated for the buffer representing system
activities.
This patch checks that the post-multiplied value is not greater than
UINT_MAX.
Signed-off-by: Sebastien <seb@fedora-2.home>
---
common.c | 25 +++++++++++++++++++++++++
common.h | 2 ++
sa_common.c | 6 ++++++
3 files changed, 33 insertions(+)
diff --git a/common.c b/common.c
index 81c77624..1a84b052 100644
--- a/common.c
+++ b/common.c
@@ -1655,4 +1655,29 @@ int parse_values(char *strargv, unsigned char bitmap[], int max_val, const char
return 0;
}
+
+/*
+ ***************************************************************************
+ * Check if the multiplication of the 3 values may be greater than UINT_MAX.
+ *
+ * IN:
+ * @val1 First value.
+ * @val2 Second value.
+ * @val3 Third value.
+ ***************************************************************************
+ */
+void check_overflow(size_t val1, size_t val2, size_t val3)
+{
+ if ((unsigned long long) val1 *
+ (unsigned long long) val2 *
+ (unsigned long long) val3 > UINT_MAX) {
+#ifdef DEBUG
+ fprintf(stderr, "%s: Overflow detected (%llu). Aborting...\n",
+ __FUNCTION__,
+ (unsigned long long) val1 * (unsigned long long) val2 * (unsigned long long) val3);
+#endif
+ exit(4);
+ }
+}
+
#endif /* SOURCE_SADC undefined */
diff --git a/common.h b/common.h
index 55b6657d..e8ab98ab 100644
--- a/common.h
+++ b/common.h
@@ -260,6 +260,8 @@ int check_dir
(const char *, int);
#ifndef SOURCE_SADC
+void check_overflow
+ (size_t, size_t, size_t);
int count_bits
(void *, int);
int count_csvalues
diff --git a/sa_common.c b/sa_common.c
index 3699a840..b2cec4ad 100644
--- a/sa_common.c
+++ b/sa_common.c
@@ -459,7 +459,13 @@ void allocate_structures(struct activity *act[])
int i, j;
for (i = 0; i < NR_ACT; i++) {
+
if (act[i]->nr_ini > 0) {
+
+ /* Look for a possible overflow */
+ check_overflow((size_t) act[i]->msize, (size_t) act[i]->nr_ini,
+ (size_t) act[i]->nr2);
+
for (j = 0; j < 3; j++) {
SREALLOC(act[i]->buf[j], void,
(size_t) act[i]->msize * (size_t) act[i]->nr_ini * (size_t) act[i]->nr2);

View File

@ -1,38 +0,0 @@
commit 6f8dc568e6ab072bb8205b732f04e685bf9237c0
Merge: c43167cc 954ff2e2
Author: Sebastien GODARD <sysstat@users.noreply.github.com>
Date: Wed May 17 21:10:31 2023 +0200
Merge branch 'pkopylov-master'
Signed-off-by: Sebastien GODARD <sysstat@users.noreply.github.com>
diff --git a/common.c b/common.c
index 48493b5f..0efe7ee3 100644
--- a/common.c
+++ b/common.c
@@ -431,15 +431,17 @@ int check_dir(char *dirname)
void check_overflow(unsigned int val1, unsigned int val2,
unsigned int val3)
{
- if ((unsigned long long) val1 * (unsigned long long) val2 *
- (unsigned long long) val3 > UINT_MAX) {
+ if ((val1 != 0) && (val2 != 0) && (val3 != 0) &&
+ (((unsigned long long) UINT_MAX / (unsigned long long) val1 <
+ (unsigned long long) val2) ||
+ ((unsigned long long) UINT_MAX / ((unsigned long long) val1 * (unsigned long long) val2) <
+ (unsigned long long) val3))) {
#ifdef DEBUG
- fprintf(stderr, "%s: Overflow detected (%llu). Aborting...\n",
- __FUNCTION__, (unsigned long long) val1 * (unsigned long long) val2 *
- (unsigned long long) val3);
+ fprintf(stderr, "%s: Overflow detected (%u,%u,%u). Aborting...\n",
+ __FUNCTION__, val1, val2, val3);
#endif
- exit(4);
- }
+ exit(4);
+ }
}
#ifndef SOURCE_SADC

View File

@ -1,2 +0,0 @@
# Color sysstat output
if ( "$?S_COLORS" == 0 ) setenv S_COLORS auto

View File

@ -1,2 +0,0 @@
# Color sysstat output
export S_COLORS=${S_COLORS-auto}

1
ci.fmf Normal file
View File

@ -0,0 +1 @@
resultsdb-testcase: separate

6
gating.yaml Normal file
View File

@ -0,0 +1,6 @@
--- !Policy
product_versions:
- rhel-10
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-internal.functional}

10
plans/tier1-internal.fmf Normal file
View File

@ -0,0 +1,10 @@
summary: Internal Tier1 tests plan
discover:
how: fmf
filter: 'tag: CI-Tier-1'
url: https://pkgs.devel.redhat.com/git/tests/sysstat
execute:
how: tmt
adjust:
enabled: false
when: distro == centos-stream or distro == fedora

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (v12.7.6.tar.gz) = cda727638b7078fc80ec8d227db6afe2fcca40a4117b87f44162d065c7b799545120894113205a342119f90e93f59c4641c573bce619e7c4955ec51407ff00b0

View File

@ -1,39 +1,30 @@
Summary: Collection of performance monitoring tools for Linux Summary: Collection of performance monitoring tools for Linux
Name: sysstat Name: sysstat
Version: 11.7.3 Version: 12.7.6
Release: 13%{?dist} Release: 2%{?dist}
License: GPLv2+ License: GPL-2.0-or-later
Group: Applications/System
URL: http://sebastien.godard.pagesperso-orange.fr/
Source: http://pagesperso-orange.fr/sebastien.godard/%{name}-%{version}.tar.xz
# Use colors in sysstat output URL: http://sebastien.godard.pagesperso-orange.fr
Source10: colorsysstat.csh Source: https://github.com/sysstat/sysstat/archive/v%{version}.tar.gz
Source11: colorsysstat.sh
# Downstream patches # PCP is no longer available for %%{ix86} on F40
Patch01: CVE-2019-16167_memory-corruption-due-to-an-integer-overflow.patch %if 0%{?fedora} >= 40 || 0%{?rhel} >= 10
Patch02: 0001-ignoring-autofs-as-real-filesystem-by-counting-numbe.patch %ifnarch %{ix86}
Patch03: 0001-sar-Add-missing-gnice-CPU-value-for-tickless-CPU.patch BuildRequires: pcp-libs-devel
Patch04: 0001-sadf-Fix-seg-fault-on-empty-data-files.patch %endif
Patch05: 0001-sar-Fix-typo-in-manual-page.patch %else
Patch06: CVE-2022-39377-arithmetic-overflow-in-allocate-structures-on-32-bit-systems.patch BuildRequires: pcp-libs-devel
Patch07: 0001-sadc-Add-a-f-flag-to-force-fdatasync-use.patch %endif
Patch08: 0001-mpstat-incorrect-cpu-usage-iowait.patch
Patch09: 0001-sa1-fix-sar-error-when-the-directory-var-log-sa-was-.patch
# https://github.com/sysstat/sysstat/commit/c9a11d35df4aecfcf22aef827bac6cd57def9d4e BuildRequires: gcc
# https://github.com/sysstat/sysstat/commit/44f1dc159242c1e434a3b836cda49f084c5a96cc BuildRequires: gettext
Patch10: 0001-Add-more-overflow-checks.patch BuildRequires: git
# https://github.com/sysstat/sysstat/commit/6f8dc568e6ab072bb8205b732f04e685bf9237c0 BuildRequires: lm_sensors-devel
Patch11: CVE-2023-33204.patch BuildRequires: make
BuildRequires: systemd-rpm-macros
BuildRequires: gettext, lm_sensors-devel, systemd Requires: findutils
Requires: xz
Requires: findutils, xz
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
%description %description
The sysstat package contains the sar, sadf, mpstat, iostat, tapestat, The sysstat package contains the sar, sadf, mpstat, iostat, tapestat,
@ -46,7 +37,7 @@ interrupts, network activity, memory and swap space utilization, CPU
utilization, kernel activities and TTY statistics, among others. Both utilization, kernel activities and TTY statistics, among others. Both
UP and SMP machines are fully supported. UP and SMP machines are fully supported.
The sadf command may be used to display data collected by sar in The sadf command may be used to display data collected by sar in
various formats (CSV, XML, etc.). various formats (CSV, PCP, XML, etc.).
The iostat command reports CPU utilization and I/O statistics for disks. The iostat command reports CPU utilization and I/O statistics for disks.
The tapestat command reports statistics for tapes connected to the system. The tapestat command reports statistics for tapes connected to the system.
The mpstat command reports global and per-processor statistics. The mpstat command reports global and per-processor statistics.
@ -54,40 +45,28 @@ The pidstat command reports statistics for Linux tasks (processes).
The cifsiostat command reports I/O statistics for CIFS file systems. The cifsiostat command reports I/O statistics for CIFS file systems.
%prep %prep
%setup -q %autosetup -S git_am
%patch01 -p0
%patch02 -p1
%patch03 -p1
%patch04 -p1
%patch05 -p1
%patch06 -p1
%patch07 -p1
%patch08 -p1
%patch09 -p1
%patch10 -p1
%patch11 -p1
%build %build
export CFLAGS="$RPM_OPT_FLAGS -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld"
%configure \ %configure \
--enable-install-cron \ --enable-install-cron \
--enable-copy-only \ --enable-copy-only \
--disable-file-attr \ --disable-file-attr \
--disable-stripping \ --disable-stripping \
--docdir=%{_pkgdocdir} \ --docdir='%{_pkgdocdir}' \
--with-systemdsystemunitdir='%{_unitdir}' \
--with-systemdsleepdir='%{_unitdir}-sleep' \
sadc_options='-S DISK' \ sadc_options='-S DISK' \
history=28 \ history=28 \
compressafter=31 compressafter=31
make %{?_smp_mflags} %make_build
%install %install
%make_install %make_install
%find_lang %{name} %find_lang %{name}
# Colored sysstat output # Do not install the license as documentation
mkdir -p %{buildroot}%{_sysconfdir}/profile.d rm %{buildroot}%{_docdir}/%{name}/COPYING
install -p -m 644 %{SOURCE10} %{buildroot}%{_sysconfdir}/profile.d
install -p -m 644 %{SOURCE11} %{buildroot}%{_sysconfdir}/profile.d
%post %post
%systemd_post sysstat.service sysstat-collect.timer sysstat-summary.timer %systemd_post sysstat.service sysstat-collect.timer sysstat-summary.timer
@ -103,53 +82,119 @@ fi
%systemd_postun sysstat.service sysstat-collect.timer sysstat-summary.timer %systemd_postun sysstat.service sysstat-collect.timer sysstat-summary.timer
%files -f %{name}.lang %files -f %{name}.lang
%doc CHANGES COPYING CREDITS FAQ.md README.md %{name}-%{version}.lsm %license COPYING
%doc CHANGES CREDITS FAQ.md README.md
%config(noreplace) %{_sysconfdir}/sysconfig/sysstat %config(noreplace) %{_sysconfdir}/sysconfig/sysstat
%config(noreplace) %{_sysconfdir}/sysconfig/sysstat.ioconf %config(noreplace) %{_sysconfdir}/sysconfig/sysstat.ioconf
%config(noreplace) %{_sysconfdir}/profile.d/* %{_bindir}/cifsiostat
%{_bindir}/* %{_bindir}/iostat
%{_bindir}/mpstat
%{_bindir}/pidstat
%{_bindir}/sadf
%{_bindir}/sar
%{_bindir}/tapestat
%{_libdir}/sa %{_libdir}/sa
%{_unitdir}/sysstat* %{_unitdir}/sysstat*
%{_mandir}/man*/* %{_systemd_util_dir}/system-sleep/sysstat*
%{_mandir}/man1/cifsiostat.1*
%{_mandir}/man1/iostat.1*
%{_mandir}/man1/mpstat.1*
%{_mandir}/man1/pidstat.1*
%{_mandir}/man1/sadf.1*
%{_mandir}/man1/sar.1*
%{_mandir}/man1/tapestat.1*
%{_mandir}/man5/sysstat.5*
%{_mandir}/man8/sa1.8*
%{_mandir}/man8/sa2.8*
%{_mandir}/man8/sadc.8*
%{_localstatedir}/log/sa %{_localstatedir}/log/sa
%changelog %changelog
* Tue May 07 2024 Lukáš Zaoral <lzaoral@redhat.com> - 11.7.3-13 * Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 12.7.6-2
- fix memory allocation errors with malformed sa files (RHEL-35511) - Bump release for October 2024 mass rebuild:
- reorder patches to prevent errors during their application Resolves: RHEL-64018
* Wed Dec 13 2023 Lukáš Zaoral <lzaoral@redhat.com> - 11.7.3-12 * Thu Jul 04 2024 Lukáš Zaoral <lzaoral@redhat.com> - 12.7.6-1
- fix sar error when the directory /var/log/sa was removed (RHEL-19301) - rebase to latest upstream release (RHEL-20252)
* Fri Jul 07 2023 Pavel Šimovec <psimovec@redhat.com> - 11.7.3-11 * Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 12.7.5-3
- fix the arithmetic overflow in allocate_structures() that is still possible on some 32 bit systems (CVE-2023-33204) - Bump release for June 2024 mass rebuild
* Thu Mar 16 2023 Lukáš Zaoral <lzaoral@redhat.com> - 11.7.3-10 * Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 12.7.5-2
- Fix incorrect CPU usage on ALL CPU field for iowait in mpstat (#2178863) - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Dec 14 2022 Lukáš Zaoral <lzaoral@redhat.com> - 11.7.3-9 * Mon Dec 18 2023 Lukáš Zaoral <lzaoral@redhat.com> - 12.7.5-1
- add -f flag to force fdatasync() after sa file update (#2153192) - rebase to latest upstream release (rhbz#2254956)
* Thu Nov 10 2022 Lukáš Zaoral <lzaoral@redhat.com> - 11.7.3-8 * Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 12.7.4-2
- arithmetic overflow in allocate_structures() on 32 bit systems (CVE-2022-39377) - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Mon Nov 29 2021 <msekleta@redhat.com> - 11.7.3-7 * Fri Jun 23 2023 Lukáš Zaoral <lzaoral@redhat.com> - 12.7.4-1
- Don't trigger autofs mounts when running sadc (#2000910) - Update to v12.7.4 (rhbz#2216900)
- sar: Add missing %gnice CPU value for tickless CPU (#2000916)
- sadf: Fix seg fault on empty data files (#1910841)
- sar: Fix typo in manual page (#1877836)
* Fri Jul 10 2020 Jan Macku <jamacku@redhat.com> - 11.7.3-5 * Mon Jan 30 2023 Lukáš Zaoral <lzaoral@redhat.com> - 12.7.2-1
- Rebuild - Update to v12.7.2 (rhbz#2165400)
- Use SPDX license format
- Modernize the spec file according to the current packaging guidelines
* Fri Apr 17 2020 Jan Macku <jamacku@redhat.com> - 11.7.3-4 * Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 12.7.1-2
- Package onboarded to gating - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Thu Feb 20 2020 Jan Macku <jamacku@redhat.com> - 11.7.3-3 * Tue Nov 08 2022 Lukáš Zaoral <lzaoral@redhat.com> - 12.7.1-1
- Fix memory corruption bug due to integer overflow (#1790608) - Update to 12.7.1 (rhbz#2140811)
* Thu Oct 25 2018 Michal Sekletár <msekleta@redhat.com> - 11.7.3-2 * Thu Sep 01 2022 FeRD (Frank Dana) <ferdnyc@gmail.com> - 12.6.0-3
- sysstat's buildsystem doesn't really use LDFLAGS, we have to merge CFLAGS and LDFLAGS to get binaries with full RELRO (#1624177) - Drop profile.d configs for color output, which is enabled by default
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 12.6.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Mon May 30 2022 Lukáš Zaoral <lzaoral@redhat.com> - 12.6.0-1
- Update to v12.6.0 (#2091359)
* Mon Apr 04 2022 Lukáš Zaoral <lzaoral@redhat.com> - 12.5.6-1
- Update to v12.5.6 (#2059133)
- Build position independent executables
- Use systemd-rpm-macros
- See https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_scriptlets
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 12.5.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 12.5.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Tue Jun 08 2021 Nathan Scott <nathans@redhat.com> - 12.5.4-1
- update to v12.5.4 (#1968635)
* Mon Mar 15 2021 Nathan Scott <nathans@redhat.com> - 12.5.3-1
- update to v12.5.3 (#1822907)
- enable Performance Co-Pilot (PCP) archive output option
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 12.3.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 12.3.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 12.3.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Jan 23 2020 Michael Cronenworth <mike@cchtml.com> - 12.3.1-1
- update to v12.3.1 (#1585186)
* Tue Oct 15 2019 Michal Sekletár <msekleta@redhat.com> - 12.1.7-1
- update to v12.1.7 (#1585186)
- Fixes CVE-2019-16167
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 11.7.3-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 11.7.3-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 11.7.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Apr 19 2018 Michal Sekletar <msekleta@redhat.com> - 11.7.3-1 * Thu Apr 19 2018 Michal Sekletar <msekleta@redhat.com> - 11.7.3-1
- rebase to 11.7.3 (#1508436) - rebase to 11.7.3 (#1508436)