From a995401f6a869d438e42a33827309c6e7a806cdd Mon Sep 17 00:00:00 2001 From: Jan Rybar Date: Mon, 14 Aug 2023 09:13:30 +0200 Subject: [PATCH] ps: mitigation of possible buffer overflow Resolves: rhbz#2228504 --- cve-2023-4016.patch | 60 +++++++++++++++++++++++++++++++++++++++++++++ procps-ng.spec | 10 +++++--- 2 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 cve-2023-4016.patch diff --git a/cve-2023-4016.patch b/cve-2023-4016.patch new file mode 100644 index 0000000..5887368 --- /dev/null +++ b/cve-2023-4016.patch @@ -0,0 +1,60 @@ +diff --git a/ps/parser.c b/ps/parser.c +index 4263a1f..b33f319 100644 +--- a/ps/parser.c ++++ b/ps/parser.c +@@ -31,7 +31,7 @@ + #include + #include + +-#include "../proc/alloc.h" ++#include "xalloc.h" + + #include "common.h" + #include "c.h" +@@ -184,8 +184,8 @@ static const char *parse_list(const char *arg, const char *(*parse_fn)(char *, s + const char *err; /* error code that could or did happen */ + /*** prepare to operate ***/ + node = malloc(sizeof(selection_node)); +- node->u = malloc(strlen(arg)*sizeof(sel_union)); /* waste is insignificant */ + node->n = 0; ++ node->u = NULL; + buf = strdup(arg); + /*** sanity check and count items ***/ + need_item = 1; /* true */ +@@ -199,12 +199,13 @@ static const char *parse_list(const char *arg, const char *(*parse_fn)(char *, s + need_item=1; + break; + default: +- if(need_item) items++; ++ if(need_item && itemsn = items; ++ node->u = xcalloc(items, sizeof(sel_union)); + /*** actually parse the list ***/ + walk = buf; + while(items--){ +@@ -1031,15 +1032,15 @@ static const char *parse_trailing_pids(void){ + thisarg = ps_argc - 1; /* we must be at the end now */ + + pidnode = malloc(sizeof(selection_node)); +- pidnode->u = malloc(i*sizeof(sel_union)); /* waste is insignificant */ ++ pidnode->u = xcalloc(i, sizeof(sel_union)); /* waste is insignificant */ + pidnode->n = 0; + + grpnode = malloc(sizeof(selection_node)); +- grpnode->u = malloc(i*sizeof(sel_union)); /* waste is insignificant */ ++ grpnode->u = xcalloc(i, sizeof(sel_union)); /* waste is insignificant */ + grpnode->n = 0; + + sidnode = malloc(sizeof(selection_node)); +- sidnode->u = malloc(i*sizeof(sel_union)); /* waste is insignificant */ ++ sidnode->u = xcalloc(i, sizeof(sel_union)); /* waste is insignificant */ + sidnode->n = 0; + + while(i--){ +-- +2.40.1 + diff --git a/procps-ng.spec b/procps-ng.spec index 9e1e433..3109487 100644 --- a/procps-ng.spec +++ b/procps-ng.spec @@ -4,7 +4,7 @@ Summary: System and process monitoring utilities Name: procps-ng Version: 3.3.17 -Release: 12%{?dist} +Release: 13%{?dist} License: GPL+ and GPLv2 and GPLv2+ and GPLv3+ and LGPLv2+ URL: https://sourceforge.net/projects/procps-ng/ @@ -25,6 +25,7 @@ Patch7: pgrep-uid-gid-overflow-backport.patch Patch8: display-sig-unsafe.patch Patch9: ps-out-of-bonds-read.patch Patch10: sysctl-nameonly-shows-value.patch +Patch11: cve-2023-4016.patch BuildRequires: make @@ -96,8 +97,7 @@ Conflicts: man-pages-pl < 0.7-5 Internationalization pack for procps-ng %prep -%setup -q -n procps-%{version} -%autopatch -p1 +%autosetup -S git -n procps-%{version} cp -p %{SOURCE1} . cp -p %{SOURCE2} top/ @@ -168,6 +168,10 @@ ln -s %{_bindir}/pidof %{buildroot}%{_sbindir}/pidof %files i18n -f %{name}.lang %changelog +* Fri Aug 11 2023 Jan Rybar - 3.3.17-13 +- ps: mitigation of possible buffer overflow +- Resolves: rhbz#2228504 + * Tue Jul 25 2023 Jan Rybar - 3.3.17-12 - sysctl: '-N' option shows values instead of names if '-p' - Resolves: rhbz#2222056