Release 1.9.4-3
Rebase to upstream commit (be5e3b8db2) Resolves: RHEL-78709 Resolves: RHEL-77272 Resolves: RHEL-80478 Resolves: RHEL-81043 Resolves: RHEL-81050 Signed-off-by: Tao Liu <ltao@redhat.com>
This commit is contained in:
parent
26cdeb95e7
commit
bc45108363
113
0045-fix-some-GCC-fanalyzer-warnings.patch
Normal file
113
0045-fix-some-GCC-fanalyzer-warnings.patch
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
From d43411406bb9f37968ea71c11863f485db824b23 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rosen Penev <rosenp@gmail.com>
|
||||||
|
Date: Tue, 24 Dec 2024 15:37:35 -0800
|
||||||
|
Subject: [PATCH 1/4] fix some GCC fanalyzer warnings
|
||||||
|
|
||||||
|
-Wfanalyzer complains about null pointer dereferences. Check for them.
|
||||||
|
|
||||||
|
Signed-off-by: Rosen Penev <rosenp@gmail.com>
|
||||||
|
---
|
||||||
|
placement.c | 2 +-
|
||||||
|
ui/irqbalance-ui.c | 15 ++++++++-------
|
||||||
|
ui/ui.c | 17 +++++++++++++----
|
||||||
|
3 files changed, 22 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/placement.c b/placement.c
|
||||||
|
index 3276dea..0fa4af1 100644
|
||||||
|
--- a/placement.c
|
||||||
|
+++ b/placement.c
|
||||||
|
@@ -67,7 +67,7 @@ static void find_best_object(struct topo_obj *d, void *data)
|
||||||
|
best->best = d;
|
||||||
|
best->best_cost = newload;
|
||||||
|
} else if (newload == best->best_cost) {
|
||||||
|
- if (g_list_length(d->interrupts) < g_list_length(best->best->interrupts)) {
|
||||||
|
+ if (!best->best || g_list_length(d->interrupts) < g_list_length(best->best->interrupts)) {
|
||||||
|
best->best = d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/ui/irqbalance-ui.c b/ui/irqbalance-ui.c
|
||||||
|
index 4a6832a..9ed25e1 100644
|
||||||
|
--- a/ui/irqbalance-ui.c
|
||||||
|
+++ b/ui/irqbalance-ui.c
|
||||||
|
@@ -214,17 +214,18 @@ out: {
|
||||||
|
GList * concat_child_lists(cpu_node_t *node)
|
||||||
|
{
|
||||||
|
GList *new = NULL;
|
||||||
|
+ GList *cpu_entry;
|
||||||
|
GList *child_entry = g_list_first(node->children);
|
||||||
|
- do {
|
||||||
|
+ while (child_entry) {
|
||||||
|
cpu_node_t *child = (cpu_node_t *)child_entry->data;
|
||||||
|
- GList *cpu_entry = g_list_first(child->cpu_list);
|
||||||
|
- do {
|
||||||
|
+ cpu_entry = g_list_first(child->cpu_list);
|
||||||
|
+ while (cpu_entry) {
|
||||||
|
uint64_t *cpu = (uint64_t *)cpu_entry->data;
|
||||||
|
new = g_list_append(new, cpu);
|
||||||
|
cpu_entry = g_list_next(cpu_entry);
|
||||||
|
- } while(cpu_entry != NULL);
|
||||||
|
+ };
|
||||||
|
child_entry = g_list_next(child_entry);
|
||||||
|
- } while(child_entry != NULL);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return new;
|
||||||
|
}
|
||||||
|
@@ -253,11 +254,11 @@ void assign_cpu_mask(cpu_node_t *node, void *data __attribute__((unused)))
|
||||||
|
mask[0] = '\0';
|
||||||
|
unsigned int sum = 0;
|
||||||
|
GList *list_entry = g_list_first(node->cpu_list);
|
||||||
|
- do {
|
||||||
|
+ while (list_entry) {
|
||||||
|
int *cpu = list_entry->data;
|
||||||
|
sum += 1 << (*cpu);
|
||||||
|
list_entry = g_list_next(list_entry);
|
||||||
|
- } while(list_entry != NULL);
|
||||||
|
+ };
|
||||||
|
snprintf(mask, 15, "0x%x", sum);
|
||||||
|
node->cpu_mask = mask;
|
||||||
|
|
||||||
|
diff --git a/ui/ui.c b/ui/ui.c
|
||||||
|
index 8325bcd..b716f3b 100644
|
||||||
|
--- a/ui/ui.c
|
||||||
|
+++ b/ui/ui.c
|
||||||
|
@@ -210,12 +210,16 @@ void display_banned_cpus(void)
|
||||||
|
|
||||||
|
int toggle_cpu(GList *cpu_list, int cpu_number)
|
||||||
|
{
|
||||||
|
+ cpu_ban_t *entry_data;
|
||||||
|
+
|
||||||
|
GList *entry = g_list_first(cpu_list);
|
||||||
|
- cpu_ban_t *entry_data = (cpu_ban_t *)(entry->data);
|
||||||
|
- while(entry_data->number != cpu_number) {
|
||||||
|
- entry = g_list_next(entry);
|
||||||
|
+ while (entry) {
|
||||||
|
entry_data = (cpu_ban_t *)(entry->data);
|
||||||
|
+ if (entry_data && entry_data->number == cpu_number)
|
||||||
|
+ break;
|
||||||
|
+ entry = g_list_next(entry);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
if(((cpu_ban_t *)(entry->data))->is_banned) {
|
||||||
|
((cpu_ban_t *)(entry->data))->is_banned = 0;
|
||||||
|
} else {
|
||||||
|
@@ -522,10 +526,15 @@ int toggle_irq(GList *irq_list, int position)
|
||||||
|
{
|
||||||
|
GList *entry = g_list_first(irq_list);
|
||||||
|
int irq_node = 0;
|
||||||
|
- while(irq_node != position) {
|
||||||
|
+
|
||||||
|
+ while(entry && irq_node != position) {
|
||||||
|
entry = g_list_next(entry);
|
||||||
|
irq_node++;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if (!entry)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
if(((irq_t *)(entry->data))->is_banned) {
|
||||||
|
((irq_t *)(entry->data))->is_banned = 0;
|
||||||
|
} else {
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
47
0046-Check-API-command-length-allow-up-to-16384.patch
Normal file
47
0046-Check-API-command-length-allow-up-to-16384.patch
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
From 105b155545e00560a55d34b160324910586ae74c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Etienne Champetier <e.champetier@ateme.com>
|
||||||
|
Date: Thu, 30 Jan 2025 15:20:31 -0500
|
||||||
|
Subject: [PATCH 2/4] Check API command length, allow up to 16384
|
||||||
|
|
||||||
|
When using the API to ban cpus or irqs, the command can easily be longer
|
||||||
|
than 500, so increase the buffer to 16384, which fits ~3250 cpus
|
||||||
|
or irqs, and add a check to log and exit if it is still not enough.
|
||||||
|
|
||||||
|
Signed-off-by: Etienne Champetier <e.champetier@ateme.com>
|
||||||
|
---
|
||||||
|
irqbalance.c | 8 ++++++--
|
||||||
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/irqbalance.c b/irqbalance.c
|
||||||
|
index 6422a7b..f80244c 100644
|
||||||
|
--- a/irqbalance.c
|
||||||
|
+++ b/irqbalance.c
|
||||||
|
@@ -400,12 +400,12 @@ void get_object_stat(struct topo_obj *object, void *data)
|
||||||
|
#ifdef HAVE_IRQBALANCEUI
|
||||||
|
gboolean sock_handle(gint fd, GIOCondition condition, gpointer user_data __attribute__((unused)))
|
||||||
|
{
|
||||||
|
- char buff[500];
|
||||||
|
+ char buff[16384];
|
||||||
|
int sock;
|
||||||
|
int recv_size = 0;
|
||||||
|
int valid_user = 0;
|
||||||
|
|
||||||
|
- struct iovec iov = { buff, 500 };
|
||||||
|
+ struct iovec iov = { buff, sizeof(buff) };
|
||||||
|
struct msghdr msg = {
|
||||||
|
.msg_iov = &iov,
|
||||||
|
.msg_iovlen = 1,
|
||||||
|
@@ -426,6 +426,10 @@ gboolean sock_handle(gint fd, GIOCondition condition, gpointer user_data __attri
|
||||||
|
log(TO_ALL, LOG_WARNING, "Error while receiving data.\n");
|
||||||
|
goto out_close;
|
||||||
|
}
|
||||||
|
+ if (recv_size == sizeof(buff)) {
|
||||||
|
+ log(TO_ALL, LOG_WARNING, "Received command too long.\n");
|
||||||
|
+ goto out_close;
|
||||||
|
+ }
|
||||||
|
cmsg = CMSG_FIRSTHDR(&msg);
|
||||||
|
if (!cmsg) {
|
||||||
|
log(TO_ALL, LOG_WARNING, "Connection no memory.\n");
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
32
0047-check_platform_device-Check-the-length-of-path.patch
Normal file
32
0047-check_platform_device-Check-the-length-of-path.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
From d602002e1982a322d19034a4a64ca5a81bace7ef Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tao Liu <ltao@redhat.com>
|
||||||
|
Date: Tue, 25 Feb 2025 16:35:34 +1300
|
||||||
|
Subject: [PATCH 3/4] check_platform_device: Check the length of path
|
||||||
|
|
||||||
|
The default length of path is 512, but the strcat() is used without
|
||||||
|
check if path is overflowed, otherwise a segfault is observed on
|
||||||
|
some aarch64 machines. This patch will use snprintf instead of strcat
|
||||||
|
for the buffer length checking.
|
||||||
|
|
||||||
|
Signed-off-by: Tao Liu <ltao@redhat.com>
|
||||||
|
---
|
||||||
|
procinterrupts.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/procinterrupts.c b/procinterrupts.c
|
||||||
|
index 4d04bf2..e82fac7 100644
|
||||||
|
--- a/procinterrupts.c
|
||||||
|
+++ b/procinterrupts.c
|
||||||
|
@@ -72,7 +72,8 @@ static int check_platform_device(char *name, struct irq_info *info)
|
||||||
|
memset(path, 0, 512);
|
||||||
|
|
||||||
|
strcat(path, "/sys/devices/platform/");
|
||||||
|
- strcat(path, name);
|
||||||
|
+ snprintf(path + strlen(path), sizeof(path) - strlen(path) - 1,
|
||||||
|
+ "%s", name);
|
||||||
|
strcat(path, "/");
|
||||||
|
dirfd = opendir(path);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
41
0048-Fix-the-wrong-string-existence-checking-condition.patch
Normal file
41
0048-Fix-the-wrong-string-existence-checking-condition.patch
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
From ffa304a885fdafaf233510baa0017ceaa1349e96 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tao Liu <ltao@redhat.com>
|
||||||
|
Date: Fri, 7 Mar 2025 16:08:47 +1300
|
||||||
|
Subject: [PATCH 4/4] Fix the wrong string existence checking condition
|
||||||
|
|
||||||
|
Commit da75aae4effd ("conver strncmp to g_str_has_prefix") introduced an error
|
||||||
|
which reversed the string existence checking condition.
|
||||||
|
|
||||||
|
Before that commit, the check condition is:
|
||||||
|
(strncmp(name, "Level", len) == 0 || strncmp(name, "Edge", len) == 0)
|
||||||
|
|
||||||
|
After that commit, the check condition is equal to:
|
||||||
|
(strncmp(name, "Level", len) != 0 || strncmp(name, "Edge", len) != 0)
|
||||||
|
|
||||||
|
This is unexpected and let's fixe this error.
|
||||||
|
|
||||||
|
Signed-off-by: Tao Liu <ltao@redhat.com>
|
||||||
|
---
|
||||||
|
procinterrupts.c | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/procinterrupts.c b/procinterrupts.c
|
||||||
|
index e82fac7..8303ad3 100644
|
||||||
|
--- a/procinterrupts.c
|
||||||
|
+++ b/procinterrupts.c
|
||||||
|
@@ -172,9 +172,9 @@ void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq)
|
||||||
|
* /proc/interrupts format defined, after of interrupt type
|
||||||
|
* the reset string is mark the irq desc name.
|
||||||
|
*/
|
||||||
|
- if (!g_str_has_prefix(irq_name, "Level") ||
|
||||||
|
- !g_str_has_prefix(irq_name, "Edge"))
|
||||||
|
- break;
|
||||||
|
+ if (g_str_has_prefix(irq_name, "Level") ||
|
||||||
|
+ g_str_has_prefix(irq_name, "Edge"))
|
||||||
|
+ break;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
Name: irqbalance
|
Name: irqbalance
|
||||||
Version: 1.9.4
|
Version: 1.9.4
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
Epoch: 2
|
Epoch: 2
|
||||||
Summary: IRQ balancing daemon
|
Summary: IRQ balancing daemon
|
||||||
|
|
||||||
@ -68,6 +68,11 @@ Patch45: 0044-Use-EPERM-instead-of-EIO-when-try-setting-irq-affini.patch
|
|||||||
Patch46: irqbalance-1.9.0-environment-file-sysconfig.patch
|
Patch46: irqbalance-1.9.0-environment-file-sysconfig.patch
|
||||||
Patch47: irqbalance-manual.patch
|
Patch47: irqbalance-manual.patch
|
||||||
|
|
||||||
|
Patch48: 0045-fix-some-GCC-fanalyzer-warnings.patch
|
||||||
|
Patch49: 0046-Check-API-command-length-allow-up-to-16384.patch
|
||||||
|
Patch50: 0047-check_platform_device-Check-the-length-of-path.patch
|
||||||
|
Patch51: 0048-Fix-the-wrong-string-existence-checking-condition.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
irqbalance is a daemon that evenly distributes IRQ load across
|
irqbalance is a daemon that evenly distributes IRQ load across
|
||||||
multiple CPUs for enhanced performance.
|
multiple CPUs for enhanced performance.
|
||||||
@ -111,6 +116,9 @@ make check
|
|||||||
%systemd_postun_with_restart irqbalance.service
|
%systemd_postun_with_restart irqbalance.service
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Mar 10 2025 Tao Liu <ltao@redhat.com> - 2:1.9.4-3
|
||||||
|
- Rebase to upstream commit (be5e3b8db2)
|
||||||
|
|
||||||
* Wed Nov 6 2024 Tao Liu <ltao@redhat.com> - 2:1.9.4-2
|
* Wed Nov 6 2024 Tao Liu <ltao@redhat.com> - 2:1.9.4-2
|
||||||
- Release 1.9.4-2
|
- Release 1.9.4-2
|
||||||
- Rebase to upstream commit (b4b6f194da)
|
- Rebase to upstream commit (b4b6f194da)
|
||||||
|
Loading…
Reference in New Issue
Block a user