Browse Source

procps-ng package update

Signed-off-by: basebuilder_pel7x64builder0 <basebuilder@powerel.org>
master
basebuilder_pel7x64builder0 6 years ago
parent
commit
08310eae92
  1. 337
      SOURCES/procps-ng-3.3.10-CVE-2018-1124.patch
  2. 89
      SOURCES/procps-ng-3.3.10-find_elf_note-memory-error-fix.patch
  3. 97
      SOURCES/procps-ng-3.3.10-free-mem-petabytes-segfault.patch
  4. 11
      SOURCES/procps-ng-3.3.10-free-uninitialized-errno.patch
  5. 12
      SOURCES/procps-ng-3.3.10-pmap-lines-twice.patch
  6. 15
      SOURCES/procps-ng-3.3.10-pmap-skip-vmflags.patch
  7. 29
      SOURCES/procps-ng-3.3.10-ps-full-wchan-name.patch
  8. 61
      SOURCES/procps-ng-3.3.10-ps-new-option-loginid-luid.patch
  9. 69
      SOURCES/procps-ng-3.3.10-ps-scattered-thread-cgroups.patch
  10. 13
      SOURCES/procps-ng-3.3.10-ps-thcount-format-option.patch
  11. 21
      SOURCES/procps-ng-3.3.10-slabtop-use-val-float.patch
  12. 19
      SOURCES/procps-ng-3.3.10-sysctl-conf-manpage-predef-note.patch
  13. 12
      SOURCES/procps-ng-3.3.10-sysctl-empty-value-allowed.patch
  14. 12
      SOURCES/procps-ng-3.3.10-sysctl-man-conf-override-hint.patch
  15. 166
      SOURCES/procps-ng-3.3.10-top-instant-cpu-stats.patch
  16. 35
      SOURCES/procps-ng-3.3.10-top-locale-independent-float-delay.patch
  17. 111
      SOURCES/procps-ng-3.3.10-top-strange-mem-val-scaling.patch
  18. 57
      SOURCES/procps-ng-3.3.10-vmstat-devlen.patch
  19. 13
      SOURCES/procps-ng-3.3.10-vmstat-long-device-name.patch
  20. 435
      SPECS/procps-ng.spec

337
SOURCES/procps-ng-3.3.10-CVE-2018-1124.patch

@ -0,0 +1,337 @@ @@ -0,0 +1,337 @@
From 9d2ec74b76d220f5343e548fcb7058d723293a22 Mon Sep 17 00:00:00 2001
From: Qualys Security Advisory <qsa@qualys.com>
Date: Thu, 1 Jan 1970 00:00:00 +0000
Subject: [PATCH 1/3] proc/alloc.*: Use size_t, not unsigned int.

Otherwise this can truncate sizes on 64-bit platforms, and is one of the
reasons the integer overflows in file2strvec() are exploitable at all.
Also: catch potential integer overflow in xstrdup() (should never
happen, but better safe than sorry), and use memcpy() instead of
strcpy() (faster).

Warnings:

- in glibc, realloc(ptr, 0) is equivalent to free(ptr), but not here,
because of the ++size;

- here, xstrdup() can return NULL (if str is NULL), which goes against
the idea of the xalloc wrappers.

We were tempted to call exit() or xerrx() in those cases, but decided
against it, because it might break things in unexpected places; TODO?
---
proc/alloc.c | 20 ++++++++++++--------
proc/alloc.h | 4 ++--
2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/proc/alloc.c b/proc/alloc.c
index 94af47f..1768d73 100644
--- a/proc/alloc.c
+++ b/proc/alloc.c
@@ -37,14 +37,14 @@ static void xdefault_error(const char *restrict fmts, ...) {
message_fn xalloc_err_handler = xdefault_error;
-void *xcalloc(unsigned int size) {
+void *xcalloc(size_t size) {
void * p;
if (size == 0)
++size;
p = calloc(1, size);
if (!p) {
- xalloc_err_handler("%s failed to allocate %u bytes of memory", __func__, size);
+ xalloc_err_handler("%s failed to allocate %zu bytes of memory", __func__, size);
exit(EXIT_FAILURE);
}
return p;
@@ -57,20 +57,20 @@ void *xmalloc(size_t size) {
++size;
p = malloc(size);
if (!p) {
- xalloc_err_handler("%s failed to allocate %zu bytes of memory", __func__, size);
+ xalloc_err_handler("%s failed to allocate %zu bytes of memory", __func__, size);
exit(EXIT_FAILURE);
}
return(p);
}
-void *xrealloc(void *oldp, unsigned int size) {
+void *xrealloc(void *oldp, size_t size) {
void *p;
if (size == 0)
++size;
p = realloc(oldp, size);
if (!p) {
- xalloc_err_handler("%s failed to allocate %u bytes of memory", __func__, size);
+ xalloc_err_handler("%s failed to allocate %zu bytes of memory", __func__, size);
exit(EXIT_FAILURE);
}
return(p);
@@ -80,13 +80,17 @@ char *xstrdup(const char *str) {
char *p = NULL;
if (str) {
- unsigned int size = strlen(str) + 1;
+ size_t size = strlen(str) + 1;
+ if (size < 1) {
+ xalloc_err_handler("%s refused to allocate %zu bytes of memory", __func__, size);
+ exit(EXIT_FAILURE);
+ }
p = malloc(size);
if (!p) {
- xalloc_err_handler("%s failed to allocate %u bytes of memory", __func__, size);
+ xalloc_err_handler("%s failed to allocate %zu bytes of memory", __func__, size);
exit(EXIT_FAILURE);
}
- strcpy(p, str);
+ memcpy(p, str, size);
}
return(p);
}
diff --git a/proc/alloc.h b/proc/alloc.h
index 19c91d7..6787a72 100644
--- a/proc/alloc.h
+++ b/proc/alloc.h
@@ -8,9 +8,9 @@ EXTERN_C_BEGIN
/* change xalloc_err_handler to override the default fprintf(stderr... */
extern message_fn xalloc_err_handler;
-extern void *xcalloc(unsigned int size) MALLOC;
+extern void *xcalloc(size_t size) MALLOC;
extern void *xmalloc(size_t size) MALLOC;
-extern void *xrealloc(void *oldp, unsigned int size) MALLOC;
+extern void *xrealloc(void *oldp, size_t size) MALLOC;
extern char *xstrdup(const char *str) MALLOC;
EXTERN_C_END
--
2.14.3


From de660b14b80188d9b323c4999d1b91a9456ed687 Mon Sep 17 00:00:00 2001
From: Qualys Security Advisory <qsa@qualys.com>
Date: Thu, 1 Jan 1970 00:00:00 +0000
Subject: [PATCH 2/3] proc/readproc.c: Harden file2str().

1/ Replace sprintf() with snprintf() (and check for truncation).

2/ Prevent an integer overflow of ub->siz. The "tot_read--" is needed to
avoid an off-by-one overflow in "ub->buf[tot_read] = '\0'". It is safe
to decrement tot_read here, because we know that tot_read is equal to
ub->siz (and ub->siz is very large).

We believe that truncation is a better option than failure (implementing
failure instead should be as easy as replacing the "tot_read--" with
"tot_read = 0").
---
proc/readproc.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/proc/readproc.c b/proc/readproc.c
index 9e3afc9..39235c7 100644
--- a/proc/readproc.c
+++ b/proc/readproc.c
@@ -35,6 +35,7 @@
#include <signal.h>
#include <fcntl.h>
#include <dirent.h>
+#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifdef WITH_SYSTEMD
@@ -622,7 +623,7 @@ static void statm2proc(const char* s, proc_t *restrict P) {
static int file2str(const char *directory, const char *what, struct utlbuf_s *ub) {
#define buffGRW 1024
char path[PROCPATHLEN];
- int fd, num, tot_read = 0;
+ int fd, num, tot_read = 0, len;
/* on first use we preallocate a buffer of minimum size to emulate
former 'local static' behavior -- even if this read fails, that
@@ -630,11 +631,16 @@ static int file2str(const char *directory, const char *what, struct utlbuf_s *ub
( besides, with this xcalloc we will never need to use memcpy ) */
if (ub->buf) ub->buf[0] = '\0';
else ub->buf = xcalloc((ub->siz = buffGRW));
- sprintf(path, "%s/%s", directory, what);
+ len = snprintf(path, sizeof path, "%s/%s", directory, what);
+ if (len <= 0 || (size_t)len >= sizeof path) return -1;
if (-1 == (fd = open(path, O_RDONLY, 0))) return -1;
while (0 < (num = read(fd, ub->buf + tot_read, ub->siz - tot_read))) {
tot_read += num;
if (tot_read < ub->siz) break;
+ if (ub->siz >= INT_MAX - buffGRW) {
+ tot_read--;
+ break;
+ }
ub->buf = xrealloc(ub->buf, (ub->siz += buffGRW));
};
ub->buf[tot_read] = '\0';
--
2.14.3


From 44a4b658f45bc3fbd7170662a52038a7b35c83de Mon Sep 17 00:00:00 2001
From: Qualys Security Advisory <qsa@qualys.com>
Date: Thu, 1 Jan 1970 00:00:00 +0000
Subject: [PATCH 3/3] proc/readproc.c: Fix bugs and overflows in file2strvec().

Note: this is by far the most important and complex patch of the whole
series, please review it carefully; thank you very much!

For this patch, we decided to keep the original function's design and
skeleton, to avoid regressions and behavior changes, while fixing the
various bugs and overflows. And like the "Harden file2str()" patch, this
patch does not fail when about to overflow, but truncates instead: there
is information available about this process, so return it to the caller;
also, we used INT_MAX as a limit, but a lower limit could be used.

The easy changes:

- Replace sprintf() with snprintf() (and check for truncation).

- Replace "if (n == 0 && rbuf == 0)" with "if (n <= 0 && tot <= 0)" and
do break instead of return: it simplifies the code (only one place to
handle errors), and also guarantees that in the while loop either n or
tot is > 0 (or both), even if n is reset to 0 when about to overflow.

- Remove the "if (n < 0)" block in the while loop: it is (and was) dead
code, since we enter the while loop only if n >= 0.

- Rewrite the missing-null-terminator detection: in the original
function, if the size of the file is a multiple of 2047, a null-
terminator is appended even if the file is already null-terminated.

- Replace "if (n <= 0 && !end_of_file)" with "if (n < 0 || tot <= 0)":
originally, it was equivalent to "if (n < 0)", but we added "tot <= 0"
to handle the first break of the while loop, and to guarantee that in
the rest of the function tot is > 0.

- Double-force ("belt and suspenders") the null-termination of rbuf:
this is (and was) essential to the correctness of the function.

- Replace the final "while" loop with a "for" loop that behaves just
like the preceding "for" loop: in the original function, this would
lead to unexpected results (for example, if rbuf is |\0|A|\0|, this
would return the array {"",NULL} but should return {"","A",NULL}; and
if rbuf is |A|\0|B| (should never happen because rbuf should be null-
terminated), this would make room for two pointers in ret, but would
write three pointers to ret).

The hard changes:

- Prevent the integer overflow of tot in the while loop, but unlike
file2str(), file2strvec() cannot let tot grow until it almost reaches
INT_MAX, because it needs more space for the pointers: this is why we
introduced ARG_LEN, which also guarantees that we can add "align" and
a few sizeof(char*)s to tot without overflowing.

- Prevent the integer overflow of "tot + c + align": when INT_MAX is
(almost) reached, we write the maximal safe amount of pointers to ret
(ARG_LEN guarantees that there is always space for *ret = rbuf and the
NULL terminator).
---
proc/readproc.c | 53 ++++++++++++++++++++++++++++++++---------------------
1 file changed, 32 insertions(+), 21 deletions(-)

diff --git a/proc/readproc.c b/proc/readproc.c
index 39235c7..94ca4e9 100644
--- a/proc/readproc.c
+++ b/proc/readproc.c
@@ -652,11 +652,12 @@ static int file2str(const char *directory, const char *what, struct utlbuf_s *ub
static char** file2strvec(const char* directory, const char* what) {
char buf[2048]; /* read buf bytes at a time */
- char *p, *rbuf = 0, *endbuf, **q, **ret;
+ char *p, *rbuf = 0, *endbuf, **q, **ret, *strp;
int fd, tot = 0, n, c, end_of_file = 0;
int align;
- sprintf(buf, "%s/%s", directory, what);
+ const int len = snprintf(buf, sizeof buf, "%s/%s", directory, what);
+ if(len <= 0 || (size_t)len >= sizeof buf) return NULL;
fd = open(buf, O_RDONLY, 0);
if(fd==-1) return NULL;
@@ -664,18 +665,23 @@ static char** file2strvec(const char* directory, const char* what) {
while ((n = read(fd, buf, sizeof buf - 1)) >= 0) {
if (n < (int)(sizeof buf - 1))
end_of_file = 1;
- if (n == 0 && rbuf == 0) {
- close(fd);
- return NULL; /* process died between our open and read */
+ if (n <= 0 && tot <= 0) { /* nothing read now, nothing read before */
+ break; /* process died between our open and read */
}
- if (n < 0) {
- if (rbuf)
- free(rbuf);
- close(fd);
- return NULL; /* read error */
+ /* ARG_LEN is our guesstimated median length of a command-line argument
+ or environment variable (the minimum is 1, the maximum is 131072) */
+ #define ARG_LEN 64
+ if (tot >= INT_MAX / (ARG_LEN + (int)sizeof(char*)) * ARG_LEN - n) {
+ end_of_file = 1; /* integer overflow: null-terminate and break */
+ n = 0; /* but tot > 0 */
}
- if (end_of_file && (n == 0 || buf[n-1]))/* last read char not null */
+ #undef ARG_LEN
+ if (end_of_file &&
+ ((n > 0 && buf[n-1] != '\0') || /* last read char not null */
+ (n <= 0 && rbuf[tot-1] != '\0'))) /* last read char not null */
buf[n++] = '\0'; /* so append null-terminator */
+
+ if (n <= 0) break; /* unneeded (end_of_file = 1) but avoid realloc */
rbuf = xrealloc(rbuf, tot + n); /* allocate more memory */
memcpy(rbuf + tot, buf, n); /* copy buffer into it */
tot += n; /* increment total byte ctr */
@@ -683,29 +689,34 @@ static char** file2strvec(const char* directory, const char* what) {
break;
}
close(fd);
- if (n <= 0 && !end_of_file) {
+ if (n < 0 || tot <= 0) { /* error, or nothing read */
if (rbuf) free(rbuf);
return NULL; /* read error */
}
+ rbuf[tot-1] = '\0'; /* belt and suspenders (the while loop did it, too) */
endbuf = rbuf + tot; /* count space for pointers */
align = (sizeof(char*)-1) - ((tot + sizeof(char*)-1) & (sizeof(char*)-1));
- for (c = 0, p = rbuf; p < endbuf; p++) {
- if (!*p || *p == '\n')
+ c = sizeof(char*); /* one extra for NULL term */
+ for (p = rbuf; p < endbuf; p++) {
+ if (!*p || *p == '\n') {
+ if (c >= INT_MAX - (tot + (int)sizeof(char*) + align)) break;
c += sizeof(char*);
+ }
if (*p == '\n')
*p = 0;
}
- c += sizeof(char*); /* one extra for NULL term */
rbuf = xrealloc(rbuf, tot + c + align); /* make room for ptrs AT END */
endbuf = rbuf + tot; /* addr just past data buf */
q = ret = (char**) (endbuf+align); /* ==> free(*ret) to dealloc */
- *q++ = p = rbuf; /* point ptrs to the strings */
- endbuf--; /* do not traverse final NUL */
- while (++p < endbuf)
- if (!*p) /* NUL char implies that */
- *q++ = p+1; /* next string -> next char */
-
+ for (strp = p = rbuf; p < endbuf; p++) {
+ if (!*p) { /* NUL char implies that */
+ if (c < 2 * (int)sizeof(char*)) break;
+ c -= sizeof(char*);
+ *q++ = strp; /* point ptrs to the strings */
+ strp = p+1; /* next string -> next char */
+ }
+ }
*q = 0; /* null ptr list terminator */
return ret;
}
--
2.14.3

89
SOURCES/procps-ng-3.3.10-find_elf_note-memory-error-fix.patch

@ -0,0 +1,89 @@ @@ -0,0 +1,89 @@
diff --git a/proc/sysinfo.c b/proc/sysinfo.c
index 1435de1..1d2b8e2 100644
--- a/proc/sysinfo.c
+++ b/proc/sysinfo.c
@@ -36,6 +36,9 @@
#include <netinet/in.h> /* htons */
#endif
+#include <link.h>
+#include <elf.h>
+
long smp_num_cpus; /* number of CPUs */
long page_bytes; /* this architecture's page size */
@@ -249,15 +252,67 @@ static void old_Hertz_hack(void){
extern char** environ;
-/* for ELF executables, notes are pushed before environment and args */
-static unsigned long find_elf_note(unsigned long findme){
+static unsigned long find_elf_note(unsigned long type)
+{
+ ElfW(auxv_t) auxv_struct;
+ ElfW(auxv_t) *auxv_temp;
+ FILE *fd;
+ int i;
+ static ElfW(auxv_t) *auxv = NULL;
unsigned long *ep = (unsigned long *)environ;
- while(*ep++);
- while(*ep){
- if(ep[0]==findme) return ep[1];
- ep+=2;
+ unsigned long ret_val = NOTE_NOT_FOUND;
+
+
+ if(!auxv) {
+
+ fd = fopen("/proc/self/auxv", "rb");
+
+ if(!fd) { // can't open auxv? that could be caused by euid change
+ // ... and we need to fall back to the old and unsafe
+ // ... method that doesn't work when calling library
+ // ... functions with dlopen -> FIXME :(
+
+ while(*ep++); // for ELF executables, notes are pushed
+ while(*ep){ // ... before environment and args
+ if(ep[0]==type) return ep[1];
+ ep+=2;
+ }
+ return NOTE_NOT_FOUND;
+ }
+
+ auxv = (ElfW(auxv_t) *) malloc(getpagesize());
+ if (!auxv) {
+ perror("malloc");
+ exit(EXIT_FAILURE);
+ }
+
+ i = 0;
+ do {
+ fread(&auxv_struct, sizeof(ElfW(auxv_t)), 1, fd);
+ auxv[i] = auxv_struct;
+ i++;
+ } while (auxv_struct.a_type != AT_NULL);
+
+ fclose(fd);
+
+ }
+
+ auxv_temp = auxv;
+ i = 0;
+ do {
+ if(auxv_temp[i].a_type == type) {
+ ret_val = (unsigned long)auxv_temp[i].a_un.a_val;
+ break;
+ }
+ i++;
+ } while (auxv_temp[i].a_type != AT_NULL);
+
+ if (auxv){
+ auxv_temp = NULL;
+ free(auxv);
+ auxv = NULL;
}
- return NOTE_NOT_FOUND;
+ return ret_val;
}
int have_privs;

97
SOURCES/procps-ng-3.3.10-free-mem-petabytes-segfault.patch

@ -0,0 +1,97 @@ @@ -0,0 +1,97 @@
diff -up ./free.1.orig ./free.1
--- ./free.1.orig 2018-01-16 16:11:35.609874589 +0100
+++ ./free.1 2018-01-17 14:33:04.625716399 +0100
@@ -62,6 +62,9 @@ Display the amount of memory in gigabyte
\fB\-\-tera\fR
Display the amount of memory in terabytes.
.TP
+\fB\-\-peta\fR
+Display the amount of memory in petabytes.
+.TP
\fB\-h\fR, \fB\-\-human\fP
Show all output fields automatically scaled to shortest three digit unit and
display the units of print out. Following units are used.
@@ -72,9 +75,10 @@ display the units of print out. Followi
M = megas
G = gigas
T = teras
+ P = petas
.fi
.sp
-If unit is missing, and you have petabyte of RAM or swap, the number is in
+If unit is missing, and you have exabyte of RAM or swap, the number is in
terabytes and columns might not be aligned with header.
.TP
\fB\-w\fR, \fB\-\-wide\fR
diff -up ./free.c.orig ./free.c
--- ./free.c.orig 2018-01-16 16:10:27.058158964 +0100
+++ ./free.c 2018-01-17 14:58:06.723658091 +0100
@@ -78,6 +78,7 @@ static void __attribute__ ((__noreturn__
fputs(_(" -m, --mega show output in megabytes\n"), out);
fputs(_(" -g, --giga show output in gigabytes\n"), out);
fputs(_(" --tera show output in terabytes\n"), out);
+ fputs(_(" --peta show output in petabytes\n"), out);
fputs(_(" -h, --human show human-readable output\n"), out);
fputs(_(" --si use powers of 1000 not 1024\n"), out);
fputs(_(" -l, --lohi show detailed low and high memory statistics\n"), out);
@@ -101,7 +102,7 @@ double power(unsigned int base, unsigned
/* idea of this function is copied from top size scaling */
static const char *scale_size(unsigned long size, int flags, struct commandline_arguments args)
{
- static char nextup[] = { 'B', 'K', 'M', 'G', 'T', 0 };
+ static char nextup[] = { 'B', 'K', 'M', 'G', 'T', 'P', 0 };
static char buf[BUFSIZ];
int i;
char *up;
@@ -163,6 +164,7 @@ static const char *scale_size(unsigned l
case 3:
case 4:
case 5:
+ case 6:
if (4 >=
snprintf(buf, sizeof(buf), "%.1f%c",
(float)(size / power(base, i - 2)), *up))
@@ -172,14 +174,14 @@ static const char *scale_size(unsigned l
(long)(size / power(base, i - 2)), *up))
return buf;
break;
- case 6:
+ case 7:
break;
}
}
/*
- * On system where there is more than petabyte of memory or swap the
+ * On system where there is more than exbibyte of memory or swap the
* output does not fit to column. For incoming few years this should
- * not be a big problem (wrote at Apr, 2011).
+ * not be a big problem (wrote at Apr, 2015).
*/
return buf;
}
@@ -197,6 +199,7 @@ int main(int argc, char **argv)
enum {
SI_OPTION = CHAR_MAX + 1,
TERA_OPTION,
+ PETA_OPTION,
HELP_OPTION
};
@@ -206,6 +209,7 @@ int main(int argc, char **argv)
{ "mega", no_argument, NULL, 'm' },
{ "giga", no_argument, NULL, 'g' },
{ "tera", no_argument, NULL, TERA_OPTION },
+ { "peta", no_argument, NULL, PETA_OPTION },
{ "human", no_argument, NULL, 'h' },
{ "si", no_argument, NULL, SI_OPTION },
{ "lohi", no_argument, NULL, 'l' },
@@ -248,6 +252,9 @@ int main(int argc, char **argv)
case TERA_OPTION:
args.exponent = 5;
break;
+ case PETA_OPTION:
+ args.exponent = 6;
+ break;
case 'h':
flags |= FREE_HUMANREADABLE;
break;

11
SOURCES/procps-ng-3.3.10-free-uninitialized-errno.patch

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
diff -Naur procps-ng-3.3.10.orig/free.c procps-ng-3.3.10/free.c
--- procps-ng-3.3.10.orig/free.c 2015-12-01 17:23:26.702968686 +0100
+++ procps-ng-3.3.10/free.c 2015-12-01 17:22:34.590529390 +0100
@@ -262,6 +262,7 @@
break;
case 's':
flags |= FREE_REPEAT;
+ errno = 0;
args.repeat_interval = (1000000 * strtof(optarg, &endptr));
if (errno || optarg == endptr || (endptr && *endptr))
xerrx(EXIT_FAILURE, _("seconds argument `%s' failed"), optarg);

12
SOURCES/procps-ng-3.3.10-pmap-lines-twice.patch

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
diff -up procps-ng-3.3.10/pmap.c.ori procps-ng-3.3.10/pmap.c
--- procps-ng-3.3.10/pmap.c.ori 2017-02-20 10:47:08.292453148 +0100
+++ procps-ng-3.3.10/pmap.c 2017-02-20 10:49:05.078924572 +0100
@@ -615,7 +615,7 @@ static int one_proc(proc_t * p)
total_private_dirty += smap_value;
continue;
}
- if (strncmp("Swap", smap_key, 4) == 0) {
+ if ((strncmp("Swap", smap_key, 4) == 0) && (strlen(smap_key)==4)) {
/*doesn't matter as long as last */
printf("%0*" KLF "x %*lu %*llu %*llu %*s %s\n",
maxw1, start,

15
SOURCES/procps-ng-3.3.10-pmap-skip-vmflags.patch

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
diff -Naur procps-ng-3.3.10.orig/pmap.c procps-ng-3.3.10/pmap.c
--- procps-ng-3.3.10.orig/pmap.c 2014-09-23 13:40:36.000000000 +0200
+++ procps-ng-3.3.10/pmap.c 2015-11-24 10:47:24.764107976 +0100
@@ -629,9 +629,9 @@
diff = 0;
continue;
}
- /* Other keys */
- continue;
}
+ /* Anything else starting with A-Z? -> skip it (rhbz#1262864) */
+ continue;
}
sscanf(mapbuf, "%" KLF "x-%" KLF "x %31s %llx %x:%x %llu", &start,
&end, perms, &file_offset, &dev_major, &dev_minor,

29
SOURCES/procps-ng-3.3.10-ps-full-wchan-name.patch

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
diff -up ./proc/ksym.c.ori ./proc/ksym.c
--- ./proc/ksym.c.ori 2006-06-25 08:57:18.000000000 +0200
+++ ./proc/ksym.c 2016-11-16 13:34:31.902836748 +0100
@@ -567,11 +567,7 @@ static const char * read_wchan_file(unsi
// lame ppc64 has a '.' in front of every name
if(*ret=='.') ret++;
- switch(*ret){
- case 's': if(!strncmp(ret, "sys_", 4)) ret += 4; break;
- case 'd': if(!strncmp(ret, "do_", 3)) ret += 3; break;
- case '_': while(*ret=='_') ret++; break;
- }
+ while(*ret=='_') ret++;
return ret;
}
@@ -616,11 +612,7 @@ const char * lookup_wchan(unsigned KLONG
ret = good_symb->name;
// lame ppc64 has a '.' in front of every name
if(*ret=='.') ret++;
- switch(*ret){
- case 's': if(!strncmp(ret, "sys_", 4)) ret += 4; break;
- case 'd': if(!strncmp(ret, "do_", 3)) ret += 3; break;
- case '_': while(*ret=='_') ret++; break;
- }
+ while(*ret=='_') ret++;
/* if(!*ret) ret = fail.name; */ /* not likely (name was "sys_", etc.) */
/* cache name after abbreviation */

61
SOURCES/procps-ng-3.3.10-ps-new-option-loginid-luid.patch

@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
diff -up ./ps/output.c.ori ./ps/output.c
--- ./ps/output.c.ori 2018-04-19 15:18:36.510737173 +0200
+++ ./ps/output.c 2018-04-19 15:18:07.850849743 +0200
@@ -1087,6 +1087,34 @@ static int pr_fuid(char *restrict const
return snprintf(outbuf, COLWID, "%d", pp->fuid);
}
+/* LoginID implementation */
+static int pr_luid(char *restrict const outbuf, const proc_t *restrict const pp){
+ char filename[48];
+ ssize_t num_read;
+ int fd;
+ u_int32_t luid;
+
+ snprintf(filename, sizeof filename, "/proc/%d/loginuid", pp->tgid);
+
+ if ((fd = open(filename, O_RDONLY, 0)) != -1) {
+ num_read = read(fd, outbuf, OUTBUF_SIZE - 1);
+ close(fd);
+ if (num_read > 0) {
+ outbuf[num_read] = '\0';
+
+ // processes born before audit have no LoginID set
+ luid = (u_int32_t) atoi(outbuf);
+ if (luid != -1)
+ return num_read;
+ }
+ }
+ outbuf[0] = '-';
+ outbuf[1] = '\0';
+ num_read = 1;
+ return num_read;
+}
+
+
// The Open Group Base Specifications Issue 6 (IEEE Std 1003.1, 2004 Edition)
// requires that user and group names print as decimal numbers if there is
// not enough room in the column. However, we will now truncate such names
@@ -1531,7 +1559,7 @@ static const format_struct format_array[
{"lsession", "SESSION", pr_sd_session, sr_nop, 11, SD, LNX, ET|LEFT},
#endif
{"lstart", "STARTED", pr_lstart, sr_nop, 24, 0, XXX, ET|RIGHT},
-{"luid", "LUID", pr_nop, sr_nop, 5, 0, LNX, ET|RIGHT}, /* login ID */
+{"luid", "LUID", pr_luid, sr_nop, 5, 0, LNX, ET|RIGHT}, /* login ID */
{"luser", "LUSER", pr_nop, sr_nop, 8, USR, LNX, ET|USER}, /* login USER */
{"lwp", "LWP", pr_tasks, sr_tasks, 5, 0, SUN, TO|PIDMAX|RIGHT},
{"m_drs", "DRS", pr_drs, sr_drs, 5, MEM, LNx, PO|RIGHT},
diff -up ./ps/ps.1.ori ./ps/ps.1
--- ./ps/ps.1.ori 2018-04-19 15:18:36.510737173 +0200
+++ ./ps/ps.1 2018-04-19 15:18:25.175781694 +0200
@@ -1353,6 +1353,10 @@ displays the login session identifier of
if systemd support has been included.
T}
+luid LUID T{
+displays Login ID associated with a process.
+T}
+
lwp LWP T{
light weight process (thread) ID of the dispatchable entity (alias
.BR spid , \ tid ).

69
SOURCES/procps-ng-3.3.10-ps-scattered-thread-cgroups.patch

@ -0,0 +1,69 @@ @@ -0,0 +1,69 @@
diff --git a/ps/output.c b/ps/output.c
index 501e29a..5f011b1 100644
--- a/ps/output.c
+++ b/ps/output.c
@@ -1343,6 +1343,41 @@
return snprintf(outbuf, COLWID, "%s", vals[lines_to_next_header%4u]);
}
+static int pr_thcgr(char *restrict const outbuf, const proc_t *restrict const pp){
+ char filename[48];
+ FILE *fd;
+ int counter = 0;
+ int c;
+ int is_cgroup = 0;
+
+ outbuf[0]='\0';
+ snprintf(filename, sizeof filename, "/proc/%d/task/%d/cgroup", pp->tgid, pp->tid);
+ fd = fopen(filename, "r");
+ if (likely(fd == NULL)) goto fail;
+ while (( (c = fgetc(fd)) != EOF) && (counter<665)) {
+ if (is_cgroup == 0) {
+ if (c == ':') {
+ is_cgroup = 1;
+ if (counter>0)
+ outbuf[counter++]=';';
+ }
+ }else
+ if ((c == '\n') || (c == '\0'))
+ is_cgroup = 0;
+ else
+ outbuf[counter++]=c;
+ }
+ outbuf[counter]='\0';
+ fclose(fd);
+ if (counter>0)
+ return counter;
+fail:
+ outbuf[0] = '-';
+ outbuf[1] = '\0';
+ return 1;
+}
+
+
/***************************************************************************/
/*************************** other stuff ***********************************/
@@ -1623,6 +1658,7 @@
{"taskid", "TASKID", pr_nop, sr_nop, 5, 0, SUN, TO|PIDMAX|RIGHT}, // is this a thread ID?
{"tdev", "TDEV", pr_nop, sr_nop, 4, 0, XXX, AN|RIGHT},
{"tgid", "TGID", pr_procs, sr_procs, 5, 0, LNX, PO|PIDMAX|RIGHT},
+{"thcgr", "THCGR", pr_thcgr, sr_nop, 35, 0, LNX, PO|LEFT}, /* thread cgroups */
{"thcount", "THCNT", pr_nlwp, sr_nlwp, 5, 0, AIX, PO|RIGHT},
{"tid", "TID", pr_tasks, sr_tasks, 5, 0, AIX, TO|PIDMAX|RIGHT},
{"time", "TIME", pr_time, sr_time, 8, 0, U98, ET|RIGHT}, /*cputime*/ /* was 6 wide */
diff --git a/ps/ps.1 b/ps/ps.1
index b90adc8..b8d6c81 100644
--- a/ps/ps.1
+++ b/ps/ps.1
@@ -1713,6 +1713,10 @@
It is the process ID of the thread group leader.
T}
+thcgr THCGR T{
+display control groups to which the thread belongs.
+T}
+
thcount THCNT T{
see
.BR nlwp .

13
SOURCES/procps-ng-3.3.10-ps-thcount-format-option.patch

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
diff -aur procps-ng-3.3.10/ps/output.c ../procps-ng-3.3.10/ps/output.c
--- procps-ng-3.3.10/ps/output.c 2014-09-23 13:40:36.000000000 +0200
+++ ../procps-ng-3.3.10/ps/output.c 2016-06-06 18:58:36.267123736 +0200
@@ -1622,8 +1622,8 @@
{"sz", "SZ", pr_sz, sr_nop, 5, 0, HPU, PO|RIGHT},
{"taskid", "TASKID", pr_nop, sr_nop, 5, 0, SUN, TO|PIDMAX|RIGHT}, // is this a thread ID?
{"tdev", "TDEV", pr_nop, sr_nop, 4, 0, XXX, AN|RIGHT},
-{"thcount", "THCNT", pr_nlwp, sr_nlwp, 5, 0, AIX, PO|RIGHT},
{"tgid", "TGID", pr_procs, sr_procs, 5, 0, LNX, PO|PIDMAX|RIGHT},
+{"thcount", "THCNT", pr_nlwp, sr_nlwp, 5, 0, AIX, PO|RIGHT},
{"tid", "TID", pr_tasks, sr_tasks, 5, 0, AIX, TO|PIDMAX|RIGHT},
{"time", "TIME", pr_time, sr_time, 8, 0, U98, ET|RIGHT}, /*cputime*/ /* was 6 wide */
{"timeout", "TMOUT", pr_nop, sr_nop, 5, 0, LNX, AN|RIGHT}, // 2.0.xx era

21
SOURCES/procps-ng-3.3.10-slabtop-use-val-float.patch

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
diff -up ./proc/slab.c.ori ./proc/slab.c
--- ./proc/slab.c.ori 2017-03-13 17:14:22.684744976 +0100
+++ ./proc/slab.c 2017-03-13 17:14:28.836719945 +0100
@@ -179,7 +179,7 @@ static int parse_slabinfo20(struct slab_
curr->cache_size = (unsigned long)curr->nr_slabs * curr->pages_per_slab * page_size;
if (curr->nr_objs) {
- curr->use = 100 * curr->nr_active_objs / curr->nr_objs;
+ curr->use = 100 * (float)curr->nr_active_objs / curr->nr_objs;
stats->nr_active_caches++;
} else
curr->use = 0;
@@ -258,7 +258,7 @@ static int parse_slabinfo11(struct slab_
curr->cache_size = (unsigned long)curr->nr_slabs * curr->pages_per_slab * page_size;
if (curr->nr_objs) {
- curr->use = 100 * curr->nr_active_objs / curr->nr_objs;
+ curr->use = 100 * (float)curr->nr_active_objs / curr->nr_objs;
stats->nr_active_caches++;
} else
curr->use = 0;

19
SOURCES/procps-ng-3.3.10-sysctl-conf-manpage-predef-note.patch

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
diff -up ./sysctl.conf.5.ori ./sysctl.conf.5
--- ./sysctl.conf.5.ori 2017-04-06 18:59:51.718644400 +0200
+++ ./sysctl.conf.5 2017-04-06 19:00:01.872604143 +0200
@@ -28,6 +28,15 @@ token = value
Note that blank lines are ignored, and whitespace before and after a token or
value is ignored, although a value can contain whitespace within. Lines which
begin with a # or ; are considered comments and ignored.
+.SH NOTES
+As the
+.BR /etc/sysctl.conf
+file is used to override default kernel parameter values, only a small number of parameters is predefined in the file.
+Use
+.IR /sbin/sysctl\ \-a
+or follow
+.BR sysctl (8)
+to list all possible parameters. The description of individual parameters can be found in the kernel documentation.
.SH EXAMPLE
.RS
.sp

12
SOURCES/procps-ng-3.3.10-sysctl-empty-value-allowed.patch

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
diff -up ./sysctl.c.ori ./sysctl.c
--- ./sysctl.c.ori 2018-01-04 16:56:26.705925767 +0100
+++ ./sysctl.c 2018-01-04 16:56:40.365877248 +0100
@@ -379,7 +379,7 @@ static int WriteSetting(const char *sett
/* point to the value in name=value */
value = equals + 1;
- if (!*name || !*value || name == equals) {
+ if (!*name || name == equals) {
xwarnx(_("malformed setting \"%s\""), setting);
return -2;
}

12
SOURCES/procps-ng-3.3.10-sysctl-man-conf-override-hint.patch

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
diff -up ./sysctl.8.ori ./sysctl.8
--- ./sysctl.8.ori 2014-09-23 13:40:36.000000000 +0200
+++ ./sysctl.8 2017-05-31 14:43:08.323364474 +0200
@@ -78,7 +78,7 @@ values listing.
Print value without new line.
.TP
\fB\-\-system\fR
-Load settings from all system configuration files.
+Load settings from all system configuration files. Files are read from directories in the following list in given order from top to bottom. Once a file of a given filename is loaded, any file of the same name in subsequent directories is ignored.
.br
/run/sysctl.d/*.conf
.br

166
SOURCES/procps-ng-3.3.10-top-instant-cpu-stats.patch

@ -0,0 +1,166 @@ @@ -0,0 +1,166 @@
diff -up ./top/top.c.ori ./top/top.c
--- ./top/top.c.ori 2017-04-07 18:36:05.953611338 +0200
+++ ./top/top.c 2017-04-07 18:37:14.037321741 +0200
@@ -91,6 +91,7 @@ static int Rc_questions;
static unsigned Pg2K_shft = 0;
/* SMP, Irix/Solaris mode, Linux 2.5.xx support */
+static CPU_t *Cpu_tics;
static int Cpu_faux_tot;
static float Cpu_pmax;
static const char *Cpu_States_fmts;
@@ -2356,10 +2357,10 @@ static void zap_fieldstab (void) {
* This guy's modeled on libproc's 'eight_cpu_numbers' function except
* we preserve all cpu data in our CPU_t array which is organized
* as follows:
- * cpus[0] thru cpus[n] == tics for each separate cpu
- * cpus[sumSLOT] == tics from the 1st /proc/stat line
- * [ and beyond sumSLOT == tics for each cpu NUMA node ] */
-static CPU_t *cpus_refresh (CPU_t *cpus) {
+ * Cpu_tics[0] thru Cpu_tics[n] == tics for each separate cpu
+ * Cpu_tics[sumSLOT] == tics from /proc/stat line #1
+ * [ and beyond sumSLOT == tics for each cpu NUMA node ] */
+static void cpus_refresh (void) {
#define sumSLOT ( smp_num_cpus )
#define totSLOT ( 1 + smp_num_cpus + Numa_node_tot)
static FILE *fp = NULL;
@@ -2377,7 +2378,7 @@ static CPU_t *cpus_refresh (CPU_t *cpus)
sav_slot = sumSLOT;
zap_fieldstab();
if (fp) { fclose(fp); fp = NULL; }
- if (cpus) { free(cpus); cpus = NULL; }
+ if (Cpu_tics) free(Cpu_tics);
}
/* by opening this file once, we'll avoid the hit on minor page faults
@@ -2387,7 +2388,7 @@ static CPU_t *cpus_refresh (CPU_t *cpus)
error_exit(fmtmk(N_fmt(FAIL_statopn_fmt), strerror(errno)));
/* note: we allocate one more CPU_t via totSLOT than 'cpus' so that a
slot can hold tics representing the /proc/stat cpu summary */
- cpus = alloc_c(totSLOT * sizeof(CPU_t));
+ Cpu_tics = alloc_c(totSLOT * sizeof(CPU_t));
}
rewind(fp);
fflush(fp);
@@ -2410,7 +2411,7 @@ static CPU_t *cpus_refresh (CPU_t *cpus)
#undef buffGRW
// remember from last time around
- sum_ptr = &cpus[sumSLOT];
+ sum_ptr = &Cpu_tics[sumSLOT];
memcpy(&sum_ptr->sav, &sum_ptr->cur, sizeof(CT_t));
// then value the last slot with the cpu summary line
if (4 > sscanf(bp, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu"
@@ -2437,7 +2438,7 @@ static CPU_t *cpus_refresh (CPU_t *cpus)
// now value each separate cpu's tics...
for (i = 0; i < sumSLOT; i++) {
- CPU_t *cpu_ptr = &cpus[i]; // avoid gcc subscript bloat
+ CPU_t *cpu_ptr = &Cpu_tics[i]; // avoid gcc subscript bloat
#ifdef PRETEND8CPUS
bp = buf;
#endif
@@ -2448,7 +2449,6 @@ static CPU_t *cpus_refresh (CPU_t *cpus)
, &cpu_ptr->cur.u, &cpu_ptr->cur.n, &cpu_ptr->cur.s
, &cpu_ptr->cur.i, &cpu_ptr->cur.w, &cpu_ptr->cur.x
, &cpu_ptr->cur.y, &cpu_ptr->cur.z)) {
- memmove(cpu_ptr, sum_ptr, sizeof(CPU_t));
break; // tolerate cpus taken offline
}
@@ -2488,8 +2488,6 @@ static CPU_t *cpus_refresh (CPU_t *cpus)
} // end: for each cpu
Cpu_faux_tot = i; // tolerate cpus taken offline
-
- return cpus;
#undef sumSLOT
#undef totSLOT
} // end: cpus_refresh
@@ -5119,7 +5117,6 @@ static void summary_hlp (CPU_t *cpu, con
static void summary_show (void) {
#define isROOM(f,n) (CHKw(w, f) && Msg_row + (n) < Screen_rows - 1)
#define anyFLG 0xffffff
- static CPU_t *smpcpu = NULL;
WIN_t *w = Curwin; // avoid gcc bloat with a local copy
char tmp[MEDBUFSIZ];
int i;
@@ -5142,7 +5139,7 @@ static void summary_show (void) {
, Frame_stopped, Frame_zombied));
Msg_row += 1;
- smpcpu = cpus_refresh(smpcpu);
+ cpus_refresh();
#ifndef NUMA_DISABLE
if (!Numa_node_tot) goto numa_nope;
@@ -5150,11 +5147,11 @@ static void summary_show (void) {
if (CHKw(w, View_CPUNOD)) {
if (Numa_node_sel < 0) {
// display the 1st /proc/stat line, then the nodes (if room)
- summary_hlp(&smpcpu[smp_num_cpus], N_txt(WORD_allcpus_txt));
+ summary_hlp(&Cpu_tics[smp_num_cpus], N_txt(WORD_allcpus_txt));
Msg_row += 1;
// display each cpu node's states
for (i = 0; i < Numa_node_tot; i++) {
- CPU_t *nod_ptr = &smpcpu[1 + smp_num_cpus + i];
+ CPU_t *nod_ptr = &Cpu_tics[1 + smp_num_cpus + i];
if (!isROOM(anyFLG, 1)) break;
#ifndef OFF_NUMASKIP
if (nod_ptr->id) {
@@ -5169,13 +5166,13 @@ static void summary_show (void) {
} else {
// display the node summary, then the associated cpus (if room)
snprintf(tmp, sizeof(tmp), N_fmt(NUMA_nodenam_fmt), Numa_node_sel);
- summary_hlp(&smpcpu[1 + smp_num_cpus + Numa_node_sel], tmp);
+ summary_hlp(&Cpu_tics[1 + smp_num_cpus + Numa_node_sel], tmp);
Msg_row += 1;
for (i = 0; i < Cpu_faux_tot; i++) {
- if (Numa_node_sel == smpcpu[i].node) {
+ if (Numa_node_sel == Cpu_tics[i].node) {
if (!isROOM(anyFLG, 1)) break;
- snprintf(tmp, sizeof(tmp), N_fmt(WORD_eachcpu_fmt), smpcpu[i].id);
- summary_hlp(&smpcpu[i], tmp);
+ snprintf(tmp, sizeof(tmp), N_fmt(WORD_eachcpu_fmt), Cpu_tics[i].id);
+ summary_hlp(&Cpu_tics[i], tmp);
Msg_row += 1;
}
}
@@ -5185,14 +5182,14 @@ numa_nope:
#endif
if (CHKw(w, View_CPUSUM)) {
// display just the 1st /proc/stat line
- summary_hlp(&smpcpu[Cpu_faux_tot], N_txt(WORD_allcpus_txt));
+ summary_hlp(&Cpu_tics[Cpu_faux_tot], N_txt(WORD_allcpus_txt));
Msg_row += 1;
} else {
// display each cpu's states separately, screen height permitting...
for (i = 0; i < Cpu_faux_tot; i++) {
- snprintf(tmp, sizeof(tmp), N_fmt(WORD_eachcpu_fmt), smpcpu[i].id);
- summary_hlp(&smpcpu[i], tmp);
+ snprintf(tmp, sizeof(tmp), N_fmt(WORD_eachcpu_fmt), Cpu_tics[i].id);
+ summary_hlp(&Cpu_tics[i], tmp);
Msg_row += 1;
if (!isROOM(anyFLG, 1)) break;
}
@@ -5643,6 +5640,7 @@ static void frame_make (void) {
// whoa either first time or thread/task mode change, (re)prime the pump...
if (Pseudo_row == PROC_XTRA) {
+ cpus_refresh();
procs_refresh();
usleep(LIB_USLEEP);
putp(Cap_clr_scr);
diff -up ./top/top.h.ori ./top/top.h
--- ./top/top.h.ori 2017-04-07 18:36:14.921573192 +0200
+++ ./top/top.h 2017-04-07 18:37:14.037321741 +0200
@@ -728,7 +728,7 @@ typedef struct WIN_t {
//atic inline void widths_resize (void);
//atic void zap_fieldstab (void);
/*------ Library Interface ---------------------------------------------*/
-//atic CPU_t *cpus_refresh (CPU_t *cpus);
+//atic void cpus_refresh (void);
#ifdef OFF_HST_HASH
//atic inline HST_t *hstbsrch (HST_t *hst, int max, int pid);
#else

35
SOURCES/procps-ng-3.3.10-top-locale-independent-float-delay.patch

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
diff -up ./top/top.c.ori ./top/top.c
--- ./top/top.c.ori 2018-01-15 14:04:42.403457405 +0100
+++ ./top/top.c 2018-01-15 14:07:59.663713707 +0100
@@ -1260,15 +1260,25 @@ static char *ioline (const char *prompt)
/*
- * Make locale aware float (but maybe restrict to whole numbers). */
+ * Make locale unaware float (but maybe restrict to whole numbers). */
static int mkfloat (const char *str, float *num, int whole) {
- char *ep;
+ char tmp[SMLBUFSIZ], *ep;
- if (whole)
+ if (whole) {
*num = (float)strtol(str, &ep, 0);
- else
- *num = strtof(str, &ep);
- if (ep != str && *ep == '\0' && *num < INT_MAX)
+ if (ep != str && *ep == '\0' && *num < INT_MAX)
+ return 1;
+ return 0;
+ }
+ snprintf(tmp, sizeof(tmp), "%s", str);
+ *num = strtof(tmp, &ep);
+ if (*ep != '\0') {
+ // fallback - try to swap the floating point separator
+ if (*ep == '.') *ep = ',';
+ else if (*ep == ',') *ep = '.';
+ *num = strtof(tmp, &ep);
+ }
+ if (ep != tmp && *ep == '\0' && *num < INT_MAX)
return 1;
return 0;
} // end: mkfloat

111
SOURCES/procps-ng-3.3.10-top-strange-mem-val-scaling.patch

@ -0,0 +1,111 @@ @@ -0,0 +1,111 @@
diff -up ./configure.ac.ori ./configure.ac
--- ./configure.ac.ori 2014-09-23 13:40:36.000000000 +0200
+++ ./configure.ac 2017-08-02 13:04:25.439881501 +0200
@@ -218,11 +218,11 @@ if test "x$enable_wide_percent" = xyes;
fi
AC_ARG_ENABLE([wide-memory],
- AS_HELP_STRING([--disable-wide-memory], [disable extra precision under memory fields for top]),
- [], [enable_wide_memory=yes]
+ AS_HELP_STRING([--enable-wide-memory], [provide extra precision under memory fields for top]),
+ [], [enable_wide_memory=no]
)
-if test "x$enable_wide_memory" = xno; then
- AC_DEFINE(NOBOOST_MEMS, 1, [disable extra precision under memory fields for top])
+if test "x$enable_wide_memory" = xyes; then
+ AC_DEFINE(BOOST_MEMORY, 1, [provide extra precision under memory fields for top])
fi
AC_ARG_ENABLE([modern-top],
diff -up ./top/top.c.ori ./top/top.c
--- ./top/top.c.ori 2017-08-02 12:56:41.681326790 +0200
+++ ./top/top.c 2017-08-02 13:50:24.953331241 +0200
@@ -1542,11 +1542,11 @@ static inline const char *make_str (cons
* We'll interpret 'num' as a kibibytes quantity and try to
* format it to reach 'target' while also fitting 'width'. */
static const char *scale_mem (int target, unsigned long num, int width, int justr) {
-#ifndef NOBOOST_MEMS
// SK_Kb SK_Mb SK_Gb SK_Tb SK_Pb SK_Eb
+#ifdef BOOST_MEMORY
static const char *fmttab[] = { "%.0f", "%#.1f%c", "%#.3f%c", "%#.3f%c", "%#.3f%c", NULL };
#else
- static const char *fmttab[] = { "%.0f", "%.0f%c", "%.0f%c", "%.0f%c", "%.0f%c", NULL };
+ static const char *fmttab[] = { "%.0f", "%.1f%c", "%.1f%c", "%.1f%c", "%.1f%c", NULL };
#endif
static char buf[SMLBUFSIZ];
float scaled_num;
@@ -1750,21 +1750,12 @@ static FLD_t Fieldstab[] = {
#else
{ 4, -1, A_right, SF(RES), L_statm }, // EU_MEM slot
#endif
-#ifndef NOBOOST_MEMS
{ 7, SK_Kb, A_right, SF(VRT), L_statm },
{ 6, SK_Kb, A_right, SF(SWP), L_status },
{ 6, SK_Kb, A_right, SF(RES), L_statm },
{ 6, SK_Kb, A_right, SF(COD), L_statm },
{ 7, SK_Kb, A_right, SF(DAT), L_statm },
{ 6, SK_Kb, A_right, SF(SHR), L_statm },
-#else
- { 5, SK_Kb, A_right, SF(VRT), L_statm },
- { 4, SK_Kb, A_right, SF(SWP), L_status },
- { 4, SK_Kb, A_right, SF(RES), L_statm },
- { 4, SK_Kb, A_right, SF(COD), L_statm },
- { 5, SK_Kb, A_right, SF(DAT), L_statm },
- { 4, SK_Kb, A_right, SF(SHR), L_statm },
-#endif
{ 4, -1, A_right, SF(FL1), L_stat },
{ 4, -1, A_right, SF(FL2), L_stat },
{ 4, -1, A_right, SF(DRT), L_statm },
@@ -1785,11 +1776,7 @@ static FLD_t Fieldstab[] = {
{ -1, -1, A_left, SF(ENV), L_ENVIRON },
{ 3, -1, A_right, SF(FV1), L_stat },
{ 3, -1, A_right, SF(FV2), L_stat },
-#ifndef NOBOOST_MEMS
{ 6, SK_Kb, A_right, SF(USE), L_USED },
-#else
- { 4, SK_Kb, A_right, SF(USE), L_USED },
-#endif
{ 10, -1, A_right, SF(NS1), L_NS }, // IPCNS
{ 10, -1, A_right, SF(NS2), L_NS }, // MNTNS
{ 10, -1, A_right, SF(NS3), L_NS }, // NETNS
@@ -5208,12 +5195,20 @@ numa_nope:
const char *fmts;
const char *label;
} scaletab[] = {
- { 1, "%1.0f ", NULL }, // kibibytes
- { 1024.0, "%#4.3f ", NULL }, // mebibytes
- { 1024.0*1024, "%#4.3f ", NULL }, // gibibytes
- { 1024.0*1024*1024, "%#4.3f ", NULL }, // tebibytes
- { 1024.0*1024*1024*1024, "%#4.3f ", NULL }, // pebibytes
- { 1024.0*1024*1024*1024*1024, "%#4.3f ", NULL } // exbibytes
+ { 1, "%.0f ", NULL }, // kibibytes
+#ifdef BOOST_MEMORY
+ { 1024.0, "%#.3f ", NULL }, // mebibytes
+ { 1024.0*1024, "%#.3f ", NULL }, // gibibytes
+ { 1024.0*1024*1024, "%#.3f ", NULL }, // tebibytes
+ { 1024.0*1024*1024*1024, "%#.3f ", NULL }, // pebibytes
+ { 1024.0*1024*1024*1024*1024, "%#.3f ", NULL } // exbibytes
+#else
+ { 1024.0, "%#.1f ", NULL }, // mebibytes
+ { 1024.0*1024, "%#.1f ", NULL }, // gibibytes
+ { 1024.0*1024*1024, "%#.1f ", NULL }, // tebibytes
+ { 1024.0*1024*1024*1024, "%#.1f ", NULL }, // pebibytes
+ { 1024.0*1024*1024*1024*1024, "%#.1f ", NULL } // exbibytes
+#endif
};
struct { // 0123456789
// snprintf contents of each buf (after SK_Kb): 'nnnn.nnn 0'
diff -up ./top/top.h.ori ./top/top.h
--- ./top/top.h.ori 2017-08-02 12:56:41.681326790 +0200
+++ ./top/top.h 2017-08-02 13:04:25.446881464 +0200
@@ -23,8 +23,8 @@
#include "../proc/readproc.h"
/* Defines represented in configure.ac ----------------------------- */
-//#define BOOST_PERCNT /* enable extra precision for two % fields */
-//#define NOBOOST_MEMS /* disable extra precision for mem fields */
+//#define BOOST_MEMORY /* enable extra precision for mem fields */
+//#define BOOST_PERCNT /* enable extra precision for 2 % fields */
//#define NUMA_DISABLE /* disable summary area NUMA/Nodes display */
//#define OOMEM_ENABLE /* enable the SuSE out-of-memory additions */
//#define ORIG_TOPDEFS /* with no rcfile retain original defaults */

57
SOURCES/procps-ng-3.3.10-vmstat-devlen.patch

@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
diff -Naur procps-ng-3.3.10.orig/proc/sysinfo.c procps-ng-3.3.10/proc/sysinfo.c
--- procps-ng-3.3.10.orig/proc/sysinfo.c 2016-01-14 15:57:33.000000000 +0100
+++ procps-ng-3.3.10/proc/sysinfo.c 2016-01-14 16:40:01.290000000 +0100
@@ -988,7 +988,7 @@
int cPartition = 0;
int fields;
unsigned dummy;
- char devname[32];
+ char devname[35];
*disks = NULL;
*partitions = NULL;
@@ -1001,10 +1001,10 @@
fclose(fd);
break;
}
- fields = sscanf(buff, " %*d %*d %15s %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %u", devname, &dummy);
+ fields = sscanf(buff, " %*d %*d %34s %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %u", devname, &dummy);
if (fields == 2 && is_disk(devname)){
(*disks) = xrealloc(*disks, (cDisk+1)*sizeof(struct disk_stat));
- sscanf(buff, " %*d %*d %15s %u %u %llu %u %u %u %llu %u %u %u %u",
+ sscanf(buff, " %*d %*d %31s %u %u %llu %u %u %u %llu %u %u %u %u",
//&disk_major,
//&disk_minor,
(*disks)[cDisk].disk_name,
@@ -1026,8 +1026,8 @@
(*partitions) = xrealloc(*partitions, (cPartition+1)*sizeof(struct partition_stat));
fflush(stdout);
sscanf(buff, (fields == 2)
- ? " %*d %*d %15s %u %*u %llu %*u %u %*u %llu %*u %*u %*u %*u"
- : " %*d %*d %15s %u %llu %u %llu",
+ ? " %*d %*d %34s %u %*u %llu %*u %u %*u %llu %*u %*u %*u %*u"
+ : " %*d %*d %34s %u %llu %u %llu",
//&part_major,
//&part_minor,
(*partitions)[cPartition].partition_name,
diff -Naur procps-ng-3.3.10.orig/proc/sysinfo.h procps-ng-3.3.10/proc/sysinfo.h
--- procps-ng-3.3.10.orig/proc/sysinfo.h 2014-09-23 13:40:36.000000000 +0200
+++ procps-ng-3.3.10/proc/sysinfo.h 2016-01-14 16:30:02.326000000 +0100
@@ -101,7 +101,7 @@
typedef struct disk_stat{
unsigned long long reads_sectors;
unsigned long long written_sectors;
- char disk_name [16];
+ char disk_name [32];
unsigned inprogress_IO;
unsigned merged_reads;
unsigned merged_writes;
@@ -115,7 +115,7 @@
}disk_stat;
typedef struct partition_stat{
- char partition_name [16];
+ char partition_name [35];
unsigned long long reads_sectors;
unsigned parent_disk; // index into a struct disk_stat array
unsigned reads;

13
SOURCES/procps-ng-3.3.10-vmstat-long-device-name.patch

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
diff --git a/proc/sysinfo.c b/proc/sysinfo.c
index baa2453..c95f378 100644
--- a/proc/sysinfo.c
+++ b/proc/sysinfo.c
@@ -979,7 +979,7 @@ unsigned int getpartitions_num(struct disk_stat *disks, int ndisks){
/////////////////////////////////////////////////////////////////////////////
static int is_disk(char *dev)
{
- char syspath[32];
+ char syspath[64];
char *slash;
while ((slash = strchr(dev, '/')))

435
SPECS/procps-ng.spec

@ -0,0 +1,435 @@ @@ -0,0 +1,435 @@
# The testsuite is unsuitable for running on buildsystems
%global tests_enabled 0

Summary: System and process monitoring utilities
Name: procps-ng
Version: 3.3.10
Release: 23%{?dist}
License: GPL+ and GPLv2 and GPLv2+ and GPLv3+ and LGPLv2+
Group: Applications/System
URL: https://sourceforge.net/projects/procps-ng/

Source: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.xz

Patch0: procps-ng-3.3.10-pmap-skip-vmflags.patch
Patch1: procps-ng-3.3.10-free-uninitialized-errno.patch
Patch2: procps-ng-3.3.10-ps-thcount-format-option.patch
Patch3: procps-ng-3.3.10-vmstat-devlen.patch
Patch4: procps-ng-3.3.10-find_elf_note-memory-error-fix.patch
Patch5: procps-ng-3.3.10-ps-scattered-thread-cgroups.patch
Patch6: procps-ng-3.3.10-vmstat-long-device-name.patch
Patch7: procps-ng-3.3.10-ps-full-wchan-name.patch
Patch8: procps-ng-3.3.10-pmap-lines-twice.patch
Patch9: procps-ng-3.3.10-slabtop-use-val-float.patch
Patch10: procps-ng-3.3.10-sysctl-conf-manpage-predef-note.patch
Patch11: procps-ng-3.3.10-top-instant-cpu-stats.patch
Patch12: procps-ng-3.3.10-sysctl-man-conf-override-hint.patch
Patch13: procps-ng-3.3.10-top-strange-mem-val-scaling.patch
Patch14: procps-ng-3.3.10-sysctl-empty-value-allowed.patch
Patch15: procps-ng-3.3.10-top-locale-independent-float-delay.patch
Patch16: procps-ng-3.3.10-free-mem-petabytes-segfault.patch
Patch17: procps-ng-3.3.10-ps-new-option-loginid-luid.patch
Patch18: procps-ng-3.3.10-CVE-2018-1124.patch


Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig

BuildRequires: ncurses-devel
BuildRequires: libtool
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: gettext-devel
BuildRequires: systemd-devel

%if %{tests_enabled}
BuildRequires: dejagnu
%endif

Provides: procps = %{version}-%{release}
Obsoletes: procps < 3.2.9-1

# usrmove hack - will be removed once initscripts are fixed
Provides: /sbin/sysctl
Provides: /bin/ps

%description
The procps package contains a set of system utilities that provide
system information. Procps includes ps, free, skill, pkill, pgrep,
snice, tload, top, uptime, vmstat, w, watch and pwdx. The ps command
displays a snapshot of running processes. The top command provides
a repetitive update of the statuses of running processes. The free
command displays the amounts of free and used memory on your
system. The skill command sends a terminate command (or another
specified signal) to a specified set of processes. The snice
command is used to change the scheduling priority of specified
processes. The tload command prints a graph of the current system
load average to a specified tty. The uptime command displays the
current time, how long the system has been running, how many users
are logged on, and system load averages for the past one, five,
and fifteen minutes. The w command displays a list of the users
who are currently logged on and what they are running. The watch
program watches a running program. The vmstat command displays
virtual memory statistics about processes, memory, paging, block
I/O, traps, and CPU activity. The pwdx command reports the current
working directory of a process or processes.

%package devel
Summary: System and process monitoring utilities
Group: Development/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
Provides: procps-devel = %{version}-%{release}
Obsoletes: procps-devel < 3.2.9-1

%description devel
System and process monitoring utilities development headers

%package i18n
Summary: Internationalization pack for procps-ng
Group: Applications/System
Requires: %{name} = %{version}-%{release}

%description i18n
Internationalization pack for procps-ng


%prep
%setup -q -n %{name}-%{version}

%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1


%build
# The following stuff is needed for git archives only
#echo "%{version}" > .tarball-version
#./autogen.sh

autoreconf --verbose --force --install

./configure --prefix=/ \
--bindir=%{_bindir} \
--sbindir=%{_sbindir} \
--libdir=%{_libdir} \
--mandir=%{_mandir} \
--includedir=%{_includedir} \
--sysconfdir=%{_sysconfdir} \
--localedir=%{_datadir}/locale \
--docdir=/unwanted \
--disable-static \
--enable-w-from \
--disable-kill \
--disable-rpath \
--enable-watch8bit \
--enable-skill \
--enable-sigwinch \
--enable-libselinux \
--with-systemd \
--disable-pidof \
--disable-modern-top

make CFLAGS="%{optflags}"


%if %{tests_enabled}
%check
make check
%endif


%install
make DESTDIR=%{buildroot} install

# --localedir doesn't work correctly
mv %{buildroot}/share/locale %{buildroot}%{_datadir}
rmdir %{buildroot}/share

# translated man pages
#find man-po/ -type d -maxdepth 1 -mindepth 1 | while read dirname; do cp -a $dirname %{buildroot}/usr/share/man/ ; done

%post -p /sbin/ldconfig

%postun -p /sbin/ldconfig

%files
%doc AUTHORS Documentation/BUGS COPYING COPYING.LIB Documentation/FAQ NEWS README top/README.top Documentation/TODO

%{_libdir}/libprocps.so.*
%{_bindir}/*
%{_sbindir}/*
%{_mandir}/man1/*
%{_mandir}/man8/*
%{_mandir}/man5/*
#%%{_mandir}/*/man1/*
#%%{_mandir}/*/man8/*
#%%{_mandir}/*/man5/*

%exclude %{_libdir}/libprocps.la
%exclude %{_sysconfdir}/sysctl.conf
%exclude /unwanted/*

%files devel
%doc COPYING COPYING.LIB
%{_libdir}/libprocps.so
%{_libdir}/pkgconfig/libprocps.pc
%{_includedir}/proc
%{_mandir}/man3/*

%files i18n
%{_datadir}/locale/*

%changelog
* Tue May 15 2018 Kamil Dudka <kdudka@redhat.com> - 3.3.10-23
- check for truncation after calling snprintf()
- Related: CVE-2018-1124

* Fri May 11 2018 Kamil Dudka <kdudka@redhat.com> - 3.3.10-22
- fix integer overflows leading to heap overflow in file2strvec()
- Resolves: CVE-2018-1124

* Thu Apr 19 2018 Jan Rybar <jrybar@redhat.com> - 3.3.10-21
- ps: new format option LUID (LoginId)
- Resolves: rhbz#1518986

* Mon Jan 15 2018 Jan Rybar <jrybar@redhat.com> - 3.3.10-20
- free: segfault when system memory exceeds petabytes
- Resolves: rhbz#1263765

* Mon Jan 15 2018 Jan Rybar <jrybar@redhat.com> - 3.3.10-19
- top: locale independent float character in delay now accepted
- Resolves: rhbz#1182248

* Thu Jan 04 2018 Jan Rybar <jrybar@redhat.com> - 3.3.10-18
- sysctl: empty value is now accepted
- Resolves: rhbz#1507356

* Wed Sep 06 2017 Jan Rybar <jrybar@redhat.com> - 3.3.10-17
- top: strange unit scaling with high memory values
- Resolves: rhbz#1253851

* Wed May 31 2017 Jan Rybar <jrybar@redhat.com> - 3.3.10-16
- sysctl manpage: Added explanation of conf files precedence
- Resolves: rhbz#1456905

* Fri Apr 07 2017 Jan Rybar <jrybar@redhat.com> - 3.3.10-15
- top - real CPU statistics instead of since-boot are shown at start
- Resolves: rhbz#1182327

* Fri Apr 07 2017 Jan Rybar <jrybar@redhat.com> - 3.3.10-14
- sysctl.conf manpage: note about predefined values added
- Resolves: rhbz#1439837

* Mon Mar 13 2017 Jan Rybar <jrybar@redhat.com> - 3.3.10-13
- slabtop: incorrect computation of "used" value, use float to fix
- Resolves: rhbz#1329958

* Mon Feb 20 2017 Jan Rybar <jrybar@redhat.com> - 3.3.10-12
- pmap no longer shows each line twice with blank values on newer kernels
- Resolves: rhbz#1330417

* Tue Jan 31 2017 Jan Rybar <jrybar@redhat.com> - 3.3.10-11
- ps no longer removes 'do_' and 'sys_' from wchan data
- Resolves: rhbz#1373246

* Tue Jul 26 2016 Jan Rybar <jrybar@redhat.com> - 3.3.10-10
- Fixes sysinfo - devices with name longer than 20 chars are mistaken for partitions
- Resolves: rhbz#1169349

* Thu Jul 07 2016 Jan Rybar <jrybar@redhat.com> - 3.3.10-9
- Fixes showing same cgroups for threads under process by adding format option
- Resolves: rhbz#1284087

* Mon Jul 04 2016 Jan Rybar <jrybar@redhat.com> - 3.3.10-8
- Fixes obtaining environment variables in find_elf_note function
- Resolves: rhbz#1287752
* Thu Jun 09 2016 Jan Rybar <jrybar@redhat.com> - 3.3.10-7
- Fixing sysinfo - devices with length exceeding 15 chars are not displayed in vmstat -d
- Resolves: #1169349

* Mon Jun 06 2016 Jan Rybar <jrybar@redhat.com> - 3.3.10-6
- #1174311 - ps - thcount not recognized as a format option
- Resolves: #1174311

* Tue Dec 01 2015 Jaromir Capik <jcapik@redhat.com> - 3.3.10-5
- #1287038 - free - error while parsing arguments
- Resolves: #1287038

* Tue Nov 24 2015 Jaromir Capik <jcapik@redhat.com> - 3.3.10-4
- #1262864 - Correctly skip vmflags (and other keys starting with A-Z)
- Resolves: #1262864

* Mon Oct 06 2014 Jaromir Capik <jcapik@redhat.com> - 3.3.10-3
- Disabling translated man pages due to conflicts with man-pages-*
- Removing /etc/sysctl.d (quietly stolen by systemd)
- Related: rhbz#1119263 rhbz#1119260 rhbz#1060715 rhbz#1113206
- Related: rhbz#1112734 rhbz#1078310 rhbz#1116309 rhbz#1070736

* Tue Sep 23 2014 Jaromir Capik <jcapik@redhat.com> - 3.3.10-2
- Replacing RC tarball with final 3.3.10 release
- Related: rhbz#1119263 rhbz#1119260 rhbz#1060715 rhbz#1113206
- Related: rhbz#1112734 rhbz#1078310 rhbz#1116309 rhbz#1070736

* Tue Sep 09 2014 Jaromir Capik <jcapik@redhat.com> - 3.3.10-1
- Upgrading to 3.3.10
- top.1: physical memory - has used / is using (#1119263)
- Include man pages for openproc, readproc and readproctab (#1119260)
- ps -p cycles over all PIDs instead of just one (#1060715)
- Remove explicit dependency on systemd-libs package (#1113206)
- Allow longer usernames to display in ps output (#1112734)
- w doesn't display FROM by default (#1078310)
- Return value of pgrep is incorrect (#1116309)
- Should shared memory be accounted in cached in free output? (#1070736)
- Resolves: rhbz#1119263 rhbz#1119260 rhbz#1060715 rhbz#1113206
- Resolves: rhbz#1112734 rhbz#1078310 rhbz#1116309 rhbz#1070736

* Thu Feb 27 2014 Jaromir Capik <jcapik@redhat.com> - 3.3.9-6
- Subtracting Shmem from Cached (#1070736)
- Resolves: rhbz#1070736

* Thu Feb 06 2014 Jaromir Capik <jcapik@redhat.com> - 3.3.9-5
- Support for timestamps & wide diskstat (#1053428, #1025833)
- Fixing fd leak in watch
- Fixing format-security build issues
- Skipping trailing zeros in read_unvectored (#1057600)
- Resolves: rhbz#1053428, Related: rhbz#1025833

* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 3.3.9-4
- Mass rebuild 2014-01-24

* Mon Jan 20 2014 Jaromir Capik <jcapik@redhat.com> - 3.3.9-3
- 'vmstat -w' was not wide enough (#1025833)
- Related: rhbz#1025833

* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 3.3.9-2
- Mass rebuild 2013-12-27

* Tue Dec 03 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.9-1
- Update to 3.3.9
- Resolves: rhbz#1025833 rhbz#1025774 rhbz#1027109

* Mon Oct 21 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-15
- Fixing incorrect format specifier (introduced with namespaces)

* Tue Sep 17 2013 Aristeu Rozanski <aris@redhat.com> - 3.3.8-14
- Introduce namespaces support (#980516)

* Fri Aug 09 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-13
- Including forgotten man fixes (#948522)

* Wed Aug 07 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-12
- Fixing the license tag

* Wed Aug 07 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-11
- Support for libselinux (#975459)
- Support for systemd (#994457)
- Support for 'Shmem' in free (#993271)

* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.3.8-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild

* Fri Jul 19 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-9
- RH man page scan (#948522)

* Tue Jul 02 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-8
- Extending the end-of-job patch disabling the screen content restoration

* Mon Jul 01 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-7
- Disabling screen content restoration when exiting 'top' (#977561)
- Enabling SIGWINCH flood prevention

* Wed Jun 26 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-6
- Avoiding "write error" messages when piping to grep (#976199)

* Wed Jun 26 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-5
- Disabling tests - unsuitable for running on buildsystems

* Mon Jun 17 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-4
- Enabling skill and snice (#974752)

* Wed Jun 12 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-3
- Adding major version in the libnuma soname

* Thu May 30 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-2
- watch: enabling UTF-8 (#965867)

* Wed May 29 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.8-1
- Update to 3.3.8

* Wed May 22 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.7-4
- top: inoculated against a window manager like 'screen' (#962022)

* Tue Apr 16 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.7-3
- Avoid segfaults when reading zero bytes - file2str (#951391)

* Mon Apr 15 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.7-2
- Moving libprocps.pc to the devel subpackage (#951726)

* Tue Mar 26 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.7-1
- Update to 3.3.7
- Reverting upstream commit for testsuite/unix.exp

* Tue Feb 05 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.6-4
- Fixing empty pmap output on ppc/s390 (#906457)

* Tue Jan 15 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.6-3
- Typo in the description, pdwx instead of pwdx (#891476)

* Tue Jan 08 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.6-2
- Rebuilding with tests disabled (koji issue #853084)

* Tue Jan 08 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.6-1
- Update to 3.3.6
- Changing URL/Source from gitorious to recently created sourceforge page
- Replacing autogen.sh with autoreconf

* Mon Jan 07 2013 Jaromir Capik <jcapik@redhat.com> - 3.3.5-1
- Update to 3.3.5

* Tue Dec 11 2012 Jaromir Capik <jcapik@redhat.com> - 3.3.4-2
- fixing the following regressions:
- negative ETIME field in ps (#871819)
- procps states a bug is hit when receiving a signal (#871824)
- allow core file generation by ps command (#871825)

* Tue Dec 11 2012 Jaromir Capik <jcapik@redhat.com> - 3.3.4-1
- Update to 3.3.4

* Tue Sep 25 2012 Jaromir Capik <jcapik@redhat.com> - 3.3.3-3.20120807git
- SELinux spelling fixes (#859900)

* Tue Aug 21 2012 Jaromir Capik <jcapik@redhat.com> - 3.3.3-2.20120807git
- Tests enabled

* Tue Aug 07 2012 Jaromir Capik <jcapik@redhat.com> - 3.3.3-1.20120807git
- Update to 3.3.3-20120807git

* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.3.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild

* Thu Mar 08 2012 Jaromir Capik <jcapik@redhat.com> - 3.3.2-3
- Second usrmove hack - providing /bin/ps

* Tue Mar 06 2012 Jaromir Capik <jcapik@redhat.com> - 3.3.2-2
- Fixing requires in the devel subpackage (missing %{?_isa} macro)
- License statement clarification (upstream patch referrenced in the spec header)

* Mon Feb 27 2012 Jaromir Capik <jcapik@redhat.com> - 3.3.2-1
- Initial version
Loading…
Cancel
Save