Rebase to upstream release v46.0

Resolves: rhbz#2170066, rhbz#2209685, rhbz#2159635, rhbz#2167517
Signed-off-by: Kamal Heib <kheib@redhat.com>
This commit is contained in:
Kamal Heib 2023-05-25 11:55:14 -04:00
parent eda4d444b7
commit 05e3ba8636
8 changed files with 24 additions and 243 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
SOURCES/rdma-core-44.0.tar.gz
SOURCES/rxe_cfg.8.gz
/rdma-core-44.0.tar.gz
/rxe_cfg.8.gz
/rdma-core-46.0.tar.gz

View File

@ -1,85 +0,0 @@
From 5075b961a29ff9c418e1fefe78432e95dd0a5fcc Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Wed, 1 Feb 2023 22:41:06 +0100
Subject: [PATCH 1/3] util: fix overflow in remap_node_name()
The function remap_node_name() assumes the parameter 'nodedesc' is at
least IB_SMP_DATA_SIZE + 1 (i.e. 65) bytes long, because it passes it to
clean_nodedesc() that writes a nul-terminator to it at offset
IB_SMP_DATA_SIZE. Callers in infiniband-diags/saquery.c pass
a (struct ib_node_desc_t).description as the argument, which is only
IB_NODE_DESCRIPTION_SIZE (i.e. 64) bytes long. This is an overflow.
An odd thing about remap_node_name() is that it may (but does not
always) rewrite the nodedesc in-place. Callers do not appear to
appreciate this behavior. Most of them are various print_* and dump_*
functions where rewriting the input makes no sense. Some callers make a
local copy of the nodedesc first, possibly to protect the original.
One caller (infiniband-diags/saquery.c:print_node_records()) checks if
either the original description or the remapped one matches a given
requested_name - so it looks like it prefers the original to be
not rewritten.
Let's make remap_node_name() a bit safer and more convenient to use.
Allocate a fixed-sized copy first. Then use strncpy to copy from
'nodedesc', never reading more than IB_SMP_DATA_SIZE (64) bytes.
Apply clean_nodedesc() on the correctly-sized copy. This solves the
overflow bug. Also, the in-place rewrite of 'nodedesc' is gone and it
can become a (const char*).
The overflow was found by a static checker (covscan).
Fixes: d974c4e398d2 ("Fix max length of node description (ibnetdiscover and smpquery)")
Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
---
util/node_name_map.c | 12 +++++++++---
util/node_name_map.h | 3 +--
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/util/node_name_map.c b/util/node_name_map.c
index 30b73eb1448e..511cb92ef19c 100644
--- a/util/node_name_map.c
+++ b/util/node_name_map.c
@@ -95,7 +95,7 @@ void close_node_name_map(nn_map_t * map)
free(map);
}
-char *remap_node_name(nn_map_t * map, uint64_t target_guid, char *nodedesc)
+char *remap_node_name(nn_map_t * map, uint64_t target_guid, const char *nodedesc)
{
char *rc = NULL;
name_map_item_t *item = NULL;
@@ -108,8 +108,14 @@ char *remap_node_name(nn_map_t * map, uint64_t target_guid, char *nodedesc)
rc = strdup(item->name);
done:
- if (rc == NULL)
- rc = strdup(clean_nodedesc(nodedesc));
+ if (rc == NULL) {
+ rc = malloc(IB_SMP_DATA_SIZE + 1);
+ if (rc) {
+ strncpy(rc, nodedesc, IB_SMP_DATA_SIZE);
+ rc[IB_SMP_DATA_SIZE] = '\0';
+ clean_nodedesc(rc);
+ }
+ }
return (rc);
}
diff --git a/util/node_name_map.h b/util/node_name_map.h
index e78d274b116e..d83d672782c4 100644
--- a/util/node_name_map.h
+++ b/util/node_name_map.h
@@ -12,8 +12,7 @@ typedef struct nn_map nn_map_t;
nn_map_t *open_node_name_map(const char *node_name_map);
void close_node_name_map(nn_map_t *map);
-/* NOTE: parameter "nodedesc" may be modified here. */
-char *remap_node_name(nn_map_t *map, uint64_t target_guid, char *nodedesc);
+char *remap_node_name(nn_map_t *map, uint64_t target_guid, const char *nodedesc);
char *clean_nodedesc(char *nodedesc);
#endif
--
2.39.1

View File

@ -1,95 +0,0 @@
From d5723a0f69577fd3022024ca17c27e273a29695b Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Wed, 1 Feb 2023 22:41:16 +0100
Subject: [PATCH 2/3] infiniband-diags: drop unnecessary nodedesc local copies
Now that remap_node_name() never rewrites nodedesc in-place, some
copying can be avoided.
Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
---
infiniband-diags/dump_fts.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/infiniband-diags/dump_fts.c b/infiniband-diags/dump_fts.c
index ce6bfb9ecc33..acef9efe692d 100644
--- a/infiniband-diags/dump_fts.c
+++ b/infiniband-diags/dump_fts.c
@@ -109,7 +109,6 @@ static void dump_multicast_tables(ibnd_node_t *node, unsigned startl,
unsigned endl, struct ibmad_port *mad_port)
{
ib_portid_t *portid = &node->path_portid;
- char nd[IB_SMP_DATA_SIZE + 1] = { 0 };
char str[512];
char *s;
uint64_t nodeguid;
@@ -119,7 +118,6 @@ static void dump_multicast_tables(ibnd_node_t *node, unsigned startl,
char *mapnd = NULL;
int n = 0;
- memcpy(nd, node->nodedesc, strlen(node->nodedesc));
nports = node->numports;
nodeguid = node->guid;
@@ -149,7 +147,7 @@ static void dump_multicast_tables(ibnd_node_t *node, unsigned startl,
endl = IB_MAX_MCAST_LID;
}
- mapnd = remap_node_name(node_name_map, nodeguid, nd);
+ mapnd = remap_node_name(node_name_map, nodeguid, node->nodedesc);
printf("Multicast mlids [0x%x-0x%x] of switch %s guid 0x%016" PRIx64
" (%s):\n", startl, endl, portid2str(portid), nodeguid,
@@ -224,8 +222,6 @@ static int dump_lid(char *str, int str_len, int lid, int valid,
ibnd_fabric_t *fabric, int *last_port_lid,
int *base_port_lid, uint64_t *portguid)
{
- char nd[IB_SMP_DATA_SIZE + 1] = { 0 };
-
ibnd_port_t *port = NULL;
char ntype[50], sguid[30];
@@ -276,14 +272,12 @@ static int dump_lid(char *str, int str_len, int lid, int valid,
baselid = port->base_lid;
lmc = port->lmc;
- memcpy(nd, port->node->nodedesc, strlen(port->node->nodedesc));
-
if (lmc > 0) {
*base_port_lid = baselid;
*last_port_lid = baselid + (1 << lmc) - 1;
}
- mapnd = remap_node_name(node_name_map, nodeguid, nd);
+ mapnd = remap_node_name(node_name_map, nodeguid, port->node->nodedesc);
rc = snprintf(str, str_len, ": (%s portguid %s: '%s')",
mad_dump_val(IB_NODE_TYPE_F, ntype, sizeof ntype,
@@ -302,7 +296,6 @@ static void dump_unicast_tables(ibnd_node_t *node, int startl, int endl,
{
ib_portid_t * portid = &node->path_portid;
char lft[IB_SMP_DATA_SIZE] = { 0 };
- char nd[IB_SMP_DATA_SIZE + 1] = { 0 };
char str[200];
uint64_t nodeguid;
int block, i, e, top;
@@ -315,7 +308,6 @@ static void dump_unicast_tables(ibnd_node_t *node, int startl, int endl,
mad_decode_field(node->switchinfo, IB_SW_LINEAR_FDB_TOP_F, &top);
nodeguid = node->guid;
nports = node->numports;
- memcpy(nd, node->nodedesc, strlen(node->nodedesc));
if (!endl || endl > top)
endl = top;
@@ -326,7 +318,7 @@ static void dump_unicast_tables(ibnd_node_t *node, int startl, int endl,
endl = IB_MAX_UCAST_LID;
}
- mapnd = remap_node_name(node_name_map, nodeguid, nd);
+ mapnd = remap_node_name(node_name_map, nodeguid, node->nodedesc);
printf("Unicast lids [0x%x-0x%x] of switch %s guid 0x%016" PRIx64
" (%s):\n", startl, endl, portid2str(portid), nodeguid,
--
2.39.1

View File

@ -1,8 +1,8 @@
From eff6b07e92a1674818c5d8c9993651dbbeabccf4 Mon Sep 17 00:00:00 2001
From 214c673b2a66a0ceb86a21ddb8cd7beba86cc6f3 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Wed, 1 Feb 2023 15:24:23 +0100
Subject: [PATCH 3/5] CMakeLists: disable providers that were not enabled in
RHEL 9.1
Subject: [PATCH] CMakeLists: disable providers that were not enabled in RHEL
9.1
Doing a package rebase, but don't want to enable additional drivers
unless explicitly requested.
@ -11,14 +11,14 @@ Upstream Status: RHEL only
Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
---
CMakeLists.txt | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
CMakeLists.txt | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bac10516bb85..b7eca65f0fe2 100644
index 9b7462861012..cfe79bcfacf3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -711,23 +711,23 @@ add_subdirectory(providers/bnxt_re)
@@ -711,7 +711,7 @@ add_subdirectory(providers/bnxt_re)
add_subdirectory(providers/cxgb4) # NO SPARSE
add_subdirectory(providers/efa)
add_subdirectory(providers/efa/man)
@ -26,11 +26,8 @@ index bac10516bb85..b7eca65f0fe2 100644
+#add_subdirectory(providers/erdma)
add_subdirectory(providers/hns)
add_subdirectory(providers/irdma)
-add_subdirectory(providers/mana)
-add_subdirectory(providers/mana/man)
+#add_subdirectory(providers/mana)
+#add_subdirectory(providers/mana/man)
add_subdirectory(providers/mlx4)
add_subdirectory(providers/mana)
@@ -720,14 +720,14 @@ add_subdirectory(providers/mlx4)
add_subdirectory(providers/mlx4/man)
add_subdirectory(providers/mlx5)
add_subdirectory(providers/mlx5/man)
@ -49,5 +46,5 @@ index bac10516bb85..b7eca65f0fe2 100644
add_subdirectory(providers/rxe/man)
add_subdirectory(providers/siw)
--
2.39.1
2.40.1

View File

@ -1,38 +0,0 @@
From 45fcc7ad41216a93bafb452f7d7a4507d52722cd Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Wed, 1 Feb 2023 23:30:52 +0100
Subject: [PATCH 3/3] libibnetdisc: fix printing a possibly non-NUL-terminated
string
Found by a static check (covscan).
Fixes: d974c4e398d2 ("Fix max length of node description (ibnetdiscover and smpquery)")
Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
---
libibnetdisc/chassis.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libibnetdisc/chassis.c b/libibnetdisc/chassis.c
index a3ec1d82807c..bc1a8aff8acb 100644
--- a/libibnetdisc/chassis.c
+++ b/libibnetdisc/chassis.c
@@ -597,7 +597,7 @@ static int fill_mellanox_chassis_record(ibnd_node_t * node)
int p = 0;
ibnd_port_t *port;
- char node_desc[IB_SMP_DATA_SIZE];
+ char node_desc[IB_SMP_DATA_SIZE + 1];
char *system_name;
char *system_type;
char *system_slot_name;
@@ -617,6 +617,7 @@ static int fill_mellanox_chassis_record(ibnd_node_t * node)
*/
memcpy(node_desc, node->nodedesc, IB_SMP_DATA_SIZE);
+ node_desc[IB_SMP_DATA_SIZE] = '\0';
IBND_DEBUG("fill_mellanox_chassis_record: node_desc:%s \n",node_desc);
--
2.39.1

View File

@ -1,6 +1,6 @@
Name: rdma-core
Version: 44.0
Release: 2%{?dist}.1
Version: 46.0
Release: 1%{?dist}
Summary: RDMA core userspace libraries and daemons
# Almost everything is licensed under the OFA dual GPLv2, 2 Clause BSD license
@ -16,10 +16,6 @@ Source1: ibdev2netdev
# are extracted from libibverbs-26.0-8.el8 .
Source2: rxe_cfg
Source3: rxe_cfg.8.gz
# 0001-0003: https://github.com/linux-rdma/rdma-core/pull/1308
Patch1: 0001-util-fix-overflow-in-remap_node_name.patch
Patch2: 0002-infiniband-diags-drop-unnecessary-nodedesc-local-cop.patch
Patch3: 0003-libibnetdisc-fix-printing-a-possibly-non-NUL-termina.patch
# RHEL specific patch for OPA ibacm plugin
Patch300: 0001-ibacm-acm.c-load-plugin-while-it-is-soft-link.patch
Patch301: 0002-systemd-drop-Protect-options-not-supported-in-RHEL-8.patch
@ -149,6 +145,8 @@ Provides: libhfi1 = %{version}-%{release}
Obsoletes: libhfi1 < %{version}-%{release}
Provides: libirdma = %{version}-%{release}
Obsoletes: libirdma < %{version}-%{release}
Provides: libmana = %{version}-%{release}
Obsoletes: libmana < %{version}-%{release}
Provides: libmlx4 = %{version}-%{release}
Obsoletes: libmlx4 < %{version}-%{release}
%ifnarch s390
@ -173,6 +171,7 @@ Device-specific plug-in ibverbs userspace drivers are included:
- libhfi1: Intel Omni-Path HFI
- libhns: HiSilicon Hip06 SoC
- libirdma: Intel Ethernet Connection RDMA
- libmana: Microsoft Azure Network Adapter
- libmlx4: Mellanox ConnectX-3 InfiniBand HCA
- libmlx5: Mellanox Connect-IB/X-4+ InfiniBand HCA
- libqedr: QLogic QL4xxx RoCE HCA
@ -265,9 +264,6 @@ easy, object-oriented access to IB verbs.
%prep
%setup -q
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch300 -p1
%patch301 -p1
%if 0%{?fedora}
@ -454,9 +450,11 @@ fi
%ifnarch s390
%{_mandir}/man3/mlx5dv*
%{_mandir}/man3/mlx4dv*
%{_mandir}/man3/manadv*
%{_mandir}/man7/efadv*
%{_mandir}/man7/mlx5dv*
%{_mandir}/man7/mlx4dv*
%{_mandir}/man7/manadv*
%endif
%{_mandir}/man3/ibnd_*
@ -537,6 +535,7 @@ fi
%ifnarch s390
%{_libdir}/libmlx5.so.*
%{_libdir}/libmlx4.so.*
%{_libdir}/libmana.so.*
%endif
%config(noreplace) %{_sysconfdir}/libibverbs.d/*.driver
%doc %{_docdir}/%{name}/libibverbs.md
@ -632,6 +631,10 @@ fi
%endif
%changelog
* Thu May 25 2023 Kamal Heib <kheib@redhat.com> - 46.0-1
- Rebase to upstream release v46.0
- Resolves: rhbz#2170066, rhbz#2209685, rhbz#2159635, rhbz#2167517
* Wed Feb 08 2023 Michal Schmidt <mschmidt@redhat.com> - 44.0-2.1
- Do not use unsupported Protect* options in systemd unit files.
- Resolves: rhbz#2141462

BIN
rxe_cfg.8.gz Normal file

Binary file not shown.

View File

@ -1,2 +1 @@
SHA512 (rdma-core-44.0.tar.gz) = f31c63aee415fb4aa721fdec2e4d9fb2bef964b1bea93f0170d30fb03b1e798cb11d46bb123db4b2a5002dec17ec16dc6e6aeaebe9f84517bf538dd114726ae1
SHA512 (rxe_cfg.8.gz) = ea735d5fa8e1dbe02e1f1b70348deca7a4dc4c13218afcf62c65f1afaf8a44f3e7cdc654b62c3e9cdc35cbe113f5204ae8f296a955414d24fbb312c27353c29f
SHA512 (rdma-core-46.0.tar.gz) = 61130ae50c216d42f3483d032b2519c7d8d549bf5740cb96d1ab73d0fa2f5cbb22a0b72f0b90b7ce6cb479a1d82e23fc041338635303786524973b151ca9c230