!13 [sync] PR-11: 【openEuler-22.03-LTS-SP1】Backport upstream patches to fix htop crash in container

From: @openeuler-sync-bot 
Reviewed-by: @xiezhipeng1 
Signed-off-by: @xiezhipeng1
This commit is contained in:
openeuler-ci-bot 2023-11-29 07:33:38 +00:00 committed by Gitee
commit 267b6d84aa
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
4 changed files with 108 additions and 1 deletions

View File

@ -0,0 +1,50 @@
From ba4c67942c98716fcfd1fd576421a964077cefed Mon Sep 17 00:00:00 2001
From: er-azh <80633916+er-azh@users.noreply.github.com>
Date: Sat, 26 Mar 2022 17:27:36 +0430
Subject: [PATCH] Linux: allocate cpuData before reading cpu count.
---
linux/LinuxProcessList.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c
index 3002e829..67493cd0 100644
--- a/linux/LinuxProcessList.c
+++ b/linux/LinuxProcessList.c
@@ -174,16 +174,19 @@ static void LinuxProcessList_updateCPUcount(ProcessList* super) {
LinuxProcessList* this = (LinuxProcessList*) super;
unsigned int existing = 0, active = 0;
- DIR* dir = opendir("/sys/devices/system/cpu");
- if (!dir) {
+ // Initialize the cpuData array before anything else.
+ if (!this->cpuData) {
this->cpuData = xReallocArrayZero(this->cpuData, super->existingCPUs ? (super->existingCPUs + 1) : 0, 2, sizeof(CPUData));
this->cpuData[0].online = true; /* average is always "online" */
this->cpuData[1].online = true;
super->activeCPUs = 1;
super->existingCPUs = 1;
- return;
}
+ DIR* dir = opendir("/sys/devices/system/cpu");
+ if (!dir)
+ return;
+
unsigned int currExisting = super->existingCPUs;
const struct dirent* entry;
@@ -233,6 +236,10 @@ static void LinuxProcessList_updateCPUcount(ProcessList* super) {
closedir(dir);
+ // return if no CPU is found
+ if (existing < 1)
+ return;
+
#ifdef HAVE_SENSORS_SENSORS_H
/* When started with offline CPUs, libsensors does not monitor those,
* even when they become online. */
--
2.27.0

View File

@ -0,0 +1,25 @@
From 3f0c172a601574454a8f8009f3b45e89aa120475 Mon Sep 17 00:00:00 2001
From: er-azh <80633916+er-azh@users.noreply.github.com>
Date: Sat, 26 Mar 2022 15:48:12 +0430
Subject: [PATCH] Linux: fix crash in LXD
---
linux/LinuxProcessList.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c
index b0e6f03a..3002e829 100644
--- a/linux/LinuxProcessList.c
+++ b/linux/LinuxProcessList.c
@@ -188,7 +188,7 @@ static void LinuxProcessList_updateCPUcount(ProcessList* super) {
const struct dirent* entry;
while ((entry = readdir(dir)) != NULL) {
- if (entry->d_type != DT_DIR)
+ if (entry->d_type != DT_DIR && entry->d_type != DT_UNKNOWN)
continue;
if (!String_startsWith(entry->d_name, "cpu"))
--
2.27.0

View File

@ -0,0 +1,25 @@
From 64fb7181ee4fa4d0f2a22d202d33971899b53f08 Mon Sep 17 00:00:00 2001
From: er-azh <80633916+er-azh@users.noreply.github.com>
Date: Sun, 27 Mar 2022 12:23:56 +0430
Subject: [PATCH] use xCalloc for allocating cpuData
---
linux/LinuxProcessList.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c
index 67493cd0..f365ff21 100644
--- a/linux/LinuxProcessList.c
+++ b/linux/LinuxProcessList.c
@@ -176,7 +176,7 @@ static void LinuxProcessList_updateCPUcount(ProcessList* super) {
// Initialize the cpuData array before anything else.
if (!this->cpuData) {
- this->cpuData = xReallocArrayZero(this->cpuData, super->existingCPUs ? (super->existingCPUs + 1) : 0, 2, sizeof(CPUData));
+ this->cpuData = xCalloc(2, sizeof(CPUData));
this->cpuData[0].online = true; /* average is always "online" */
this->cpuData[1].online = true;
super->activeCPUs = 1;
--
2.27.0

View File

@ -1,6 +1,6 @@
Name: htop Name: htop
Version: 3.1.2 Version: 3.1.2
Release: 1 Release: 2
Summary: htop - an interactive process viewer Summary: htop - an interactive process viewer
License: GPLv2 License: GPLv2
URL: https://htop.dev URL: https://htop.dev
@ -8,6 +8,10 @@ Source0: https://github.com/htop-dev/htop/archive/%{version}.tar.gz#/%{name}-%{v
BuildRequires: perl perl-PathTools ncurses-devel autoconf automake gcc BuildRequires: perl perl-PathTools ncurses-devel autoconf automake gcc
Patch1: backport-Linux-fix-crash-in-LXD.patch
Patch2: backport-Linux-allocate-cpuData-before-reading-cpu-count.patch
Patch3: backport-use-xCalloc-for-allocating-cpuData.patch
%description %description
htop is a cross-platform interactive process viewer. htop is a cross-platform interactive process viewer.
htop allows scrolling the list of processes vertically and horizontally to see their full command lines and related information like memory and CPU consumption. htop allows scrolling the list of processes vertically and horizontally to see their full command lines and related information like memory and CPU consumption.
@ -34,6 +38,9 @@ Tasks related to processes (e.g. killing and renicing) can be done without enter
%{_mandir}/man1/%{name}.1.gz %{_mandir}/man1/%{name}.1.gz
%changelog %changelog
* Tue Nov 28 2023 yixiangzhike <yixiangzhike007@163.com> - 3.1.2-2
- Backport upstream patches to fix htop crash in container
* Wed Jan 19 2022 SimpleUpdate Robot <tc@openeuler.org> - 3.1.2-1 * Wed Jan 19 2022 SimpleUpdate Robot <tc@openeuler.org> - 3.1.2-1
- Upgrade to version 3.1.2 - Upgrade to version 3.1.2