import UBI procps-ng-4.0.4-11.el10

This commit is contained in:
AlmaLinux RelEng Bot 2026-05-19 18:41:01 -04:00
parent 0cb7af91b9
commit d070a65f21
5 changed files with 183 additions and 1 deletions

View File

@ -0,0 +1,23 @@
commit 9a8dc789e83b869ef8c56cc94741dbc3a191f55b
Author: Jan Rybar <jrybar@redhat.com>
Date: Tue Oct 28 06:37:03 2025 +0000
free manpage: note on negative value with overcommitt enabled
diff --git a/man/free.1 b/man/free.1
index 02dae847..3816754a 100644
--- a/man/free.1
+++ b/man/free.1
@@ -142,7 +142,11 @@ Display a line showing the column totals.
\fB\-v\fR, \fB\-\-committed\fR
Display a line showing the memory commit limit and amount of committed/uncommitted
memory. The \fBtotal\fR column on this line will display the memory commit
-limit. This line is relevant if memory overcommit is disabled.
+limit. This line is relevant if memory overcommit is disabled. On systems
+with memory overcommit enabled, the \fBfree\fR value can temporarily appear
+negative. This is not a bug, but an effect of overcommit, as the system has promised
+more memory than the total of its virtual address space.
+The negative value indicates the magnitude of the system's memory over-allocation.
.TP
\fB\-\-help\fR
Print help.

View File

@ -4,7 +4,7 @@
Summary: System and process monitoring utilities
Name: procps-ng
Version: 4.0.4
Release: 8%{?dist}
Release: 11%{?dist}
License: GPL-2.0-or-later AND LGPL-2.0-or-later AND LGPL-2.1-or-later
URL: https://sourceforge.net/projects/procps-ng/
@ -12,6 +12,10 @@ Source0: https://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.xz
Patch1: osh-findings.patch
Patch2: top-fix-guest-tics.patch
Patch3: free-manpage-overcommit-note.patch
Patch4: sysctl-succ-on-fail.patch
Patch5: ps-etime-overflow.patch
Patch6: uptime-w-user-sessions-only.patch
BuildRequires: make
BuildRequires: ncurses-devel
@ -148,6 +152,20 @@ ln -s %{_bindir}/pidof %{buildroot}%{_sbindir}/pidof
%files i18n -f %{name}.lang
%changelog
* Thu Jan 15 2026 Jan Rybar <jrybar@redhat.com> - 4.0.4-11
- ps: etime overflow reappeared with rewritten library
- uptime, w: report user sessions only; upstream backport of 734930e47
- Resolves: RHEL-60826
- Resolves: RHEL-141839
* Thu Dec 04 2025 Jan Rybar <jrybar@redhat.com> - 4.0.4-10
- sysctl: returns success even on fail bug
- Resolves: RHEL-84138
* Wed Oct 29 2025 Jan Rybar <jrybar@redhat.com> - 4.0.4-9
- free manpage: expand note on negative value with overcommit
- Resolves: RHEL-100973
* Wed Apr 16 2025 Jan Rybar <jrybar@redhat.com> - 4.0.4-8
- fix guest tics (backport upstr patch e1df029e6, 3fb34669)
- Resolves: RHEL-84051

30
ps-etime-overflow.patch Normal file
View File

@ -0,0 +1,30 @@
diff --git a/library/pids.c b/library/pids.c
index 41673b5..f9f4f8f 100644
--- a/library/pids.c
+++ b/library/pids.c
@@ -284,13 +284,13 @@ REG_set(TICS_USER, ull_int, utime)
setDECL(TICS_USER_C) { (void)I; R->result.ull_int = P->utime + P->cutime; }
setDECL(TIME_ALL) { R->result.real = ((double)P->utime + P->stime) / I->hertz; }
setDECL(TIME_ALL_C) { R->result.real = ((double)P->utime + P->stime + P->cutime + P->cstime) / I->hertz; }
-setDECL(TIME_ELAPSED) { double t = I->boot_tics - P->start_time; if (t > 0) R->result.real = t / I->hertz; }
+setDECL(TIME_ELAPSED) { double t = (double)I->boot_tics - P->start_time; if (t > 0) R->result.real = t / I->hertz; }
setDECL(TIME_START) { R->result.real = (double)P->start_time / I->hertz; }
REG_set(TTY, s_int, tty)
setDECL(TTY_NAME) { char buf[64]; freNAME(str)(R); dev_to_tty(buf, sizeof(buf), P->tty, P->tid, ABBREV_DEV); if (!(R->result.str = strdup(buf))) I->seterr = 1; }
setDECL(TTY_NUMBER) { char buf[64]; freNAME(str)(R); dev_to_tty(buf, sizeof(buf), P->tty, P->tid, ABBREV_DEV|ABBREV_TTY|ABBREV_PTS); if (!(R->result.str = strdup(buf))) I->seterr = 1; }
-setDECL(UTILIZATION) { double t = I->boot_tics - P->start_time; if (t > 0) R->result.real = ((P->utime + P->stime) * 100.0f) / t; }
-setDECL(UTILIZATION_C) { double t = I->boot_tics - P->start_time; if (t > 0) R->result.real = ((P->utime + P->stime + P->cutime + P->cstime) * 100.0f) / t; }
+setDECL(UTILIZATION) { double t = (double)I->boot_tics - P->start_time; if (t > 0) R->result.real = ((P->utime + P->stime) * 100.0f) / t; }
+setDECL(UTILIZATION_C) { double t = (double)I->boot_tics - P->start_time; if (t > 0) R->result.real = ((P->utime + P->stime + P->cutime + P->cstime) * 100.0f) / t; }
REG_set(VM_DATA, ul_int, vm_data)
REG_set(VM_EXE, ul_int, vm_exe)
REG_set(VM_LIB, ul_int, vm_lib)
@@ -304,7 +304,7 @@ REG_set(VM_STACK, ul_int, vm_stack)
REG_set(VM_SWAP, ul_int, vm_swap)
setDECL(VM_USED) { (void)I; R->result.ul_int = P->vm_swap + P->vm_rss; }
REG_set(VSIZE_BYTES, ul_int, vsize)
-setDECL(WCHAN_NAME) { freNAME(str)(R); if (!(R->result.str = strdup(lookup_wchan(P->tid)))) I->seterr = 1;; }
+setDECL(WCHAN_NAME) { freNAME(str)(R); if (!(R->result.str = strdup(lookup_wchan(P->tid)))) I->seterr = 1; }
#undef setDECL
#undef CVT_set

48
sysctl-succ-on-fail.patch Normal file
View File

@ -0,0 +1,48 @@
From cd3a440b562e6efc713ce1524678dd068a85bf91 Mon Sep 17 00:00:00 2001
From: Matteo Croce <teknoraver@meta.com>
Date: Fri, 7 Jun 2024 00:29:32 +0200
Subject: [PATCH] sysctl: return error on permission denied
When trying to write to a readonly sysctl or a directory by mistake,
sysctl still returns success:
# sysctl kernel.version=foo
sysctl: setting key "kernel.version": Operation not permitted
# echo $?
0
# sysctl kernel=foo
sysctl: setting key "kernel": Operation not permitted
# echo $?
0
Let sysctl return error in both the cases above.
Signed-off-by: Matteo Croce <teknoraver@meta.com>
---
src/sysctl.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/sysctl.c b/src/sysctl.c
index 087ddabe..1914203c 100644
--- a/src/sysctl.c
+++ b/src/sysctl.c
@@ -585,14 +585,14 @@ static int WriteSetting(
errno = EPERM;
xwarn(_("setting key \"%s\""), dotted_key);
free(dotted_key);
- return rc;
+ return EXIT_FAILURE;
}
if (S_ISDIR(ts.st_mode)) {
errno = EISDIR;
xwarn(_("setting key \"%s\""), dotted_key);
free(dotted_key);
- return rc;
+ return EXIT_FAILURE;
}
if (!DryRun) {
--
GitLab

View File

@ -0,0 +1,63 @@
diff --git a/library/uptime.c b/library/uptime.c
index 1826343..d63bde7 100644
--- a/library/uptime.c
+++ b/library/uptime.c
@@ -54,8 +54,31 @@ static int count_users(void)
struct utmp *ut;
#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)
- if (sd_booted() > 0)
- return sd_get_sessions(NULL);
+ char **sessions_list;
+ int sessions;
+
+ numuser = 0;
+
+ sessions = sd_get_sessions(&sessions_list);
+
+ if (sessions > 0) {
+ int i;
+
+ for (i = 0; i < sessions; i++) {
+ char *class;
+
+ if (sd_session_get_class(sessions_list[i], &class) < 0)
+ continue;
+
+ if (strncmp(class, "user", 4) == 0) // user, user-early, user-incomplete
+ numuser++;
+ free(class);
+ }
+ for (i = 0; i < sessions; i++)
+ free(sessions_list[i]);
+ free(sessions_list);
+ return numuser;
+ }
#endif
setutent();
diff --git a/src/w.c b/src/w.c
index fd6e75f..c7bd214 100644
--- a/src/w.c
+++ b/src/w.c
@@ -814,11 +814,18 @@ int main(int argc, char **argv)
if (sessions < 0 && sessions != -ENOENT)
error(EXIT_FAILURE, -sessions, _("error getting sessions"));
- if (sessions >= 0) {
+ if (sessions > 0) {
for (int i = 0; i < sessions; i++) {
- char *name;
+ char *class, *name;
int r;
+ if ((r = sd_session_get_class(sessions_list[i], &class)) < 0)
+ error(EXIT_FAILURE, -r, _("session get class failed"));
+ if (strncmp(class, "user", 4) != 0) { // user, user-early, user-incomplete
+ free(class);
+ continue;
+ }
+ free(class);
if ((r = sd_session_get_username(sessions_list[i], &name)) < 0)
error(EXIT_FAILURE, -r, _("get user name failed"));