79c4324644
Change-Id: I2d302dda68298877c65c99147f5bf22186a59aac
69 lines
2.7 KiB
Diff
69 lines
2.7 KiB
Diff
From bfcbf70e99b9fb06468de8135d3a251ef22e0cd3 Mon Sep 17 00:00:00 2001
|
|
From: Michal Privoznik <mprivozn@redhat.com>
|
|
Date: Mon, 14 Jun 2021 12:46:02 +0200
|
|
Subject: [PATCH 094/108] Don't call qsort() over NULL
|
|
|
|
In a few places it may happen that the array we want to sort is
|
|
still NULL (e.g. because there were no leases found, no paths for
|
|
secdriver to lock or no cache banks). However, passing NULL to
|
|
qsort() is undefined and even though glibc plays nicely we
|
|
shouldn't rely on undefined behaviour.
|
|
|
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
|
|
(cherry picked from commit 1ab5a37c4a70434a1dacebbdababb91baaa29ef1)
|
|
---
|
|
src/conf/capabilities.c | 6 ++++--
|
|
src/security/security_manager.c | 3 ++-
|
|
tools/nss/libvirt_nss.c | 3 ++-
|
|
3 files changed, 8 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
|
|
index d6ec1f12f4..deb99cecd3 100644
|
|
--- a/src/conf/capabilities.c
|
|
+++ b/src/conf/capabilities.c
|
|
@@ -1982,8 +1982,10 @@ virCapabilitiesInitCaches(virCapsPtr caps)
|
|
/* Sort the array in order for the tests to be predictable. This way we can
|
|
* still traverse the directory instead of guessing names (in case there is
|
|
* 'index1' and 'index3' but no 'index2'). */
|
|
- qsort(caps->host.cache.banks, caps->host.cache.nbanks,
|
|
- sizeof(*caps->host.cache.banks), virCapsHostCacheBankSorter);
|
|
+ if (caps->host.cache.banks) {
|
|
+ qsort(caps->host.cache.banks, caps->host.cache.nbanks,
|
|
+ sizeof(*caps->host.cache.banks), virCapsHostCacheBankSorter);
|
|
+ }
|
|
|
|
if (virCapabilitiesInitResctrlMemory(caps) < 0)
|
|
goto cleanup;
|
|
diff --git a/src/security/security_manager.c b/src/security/security_manager.c
|
|
index 9d5dfec12b..a74b663685 100644
|
|
--- a/src/security/security_manager.c
|
|
+++ b/src/security/security_manager.c
|
|
@@ -1302,7 +1302,8 @@ virSecurityManagerMetadataLock(virSecurityManagerPtr mgr G_GNUC_UNUSED,
|
|
* paths in the same order and thus no deadlock can occur.
|
|
* Lastly, it makes searching for duplicate paths below
|
|
* simpler. */
|
|
- qsort(paths, npaths, sizeof(*paths), cmpstringp);
|
|
+ if (paths)
|
|
+ qsort(paths, npaths, sizeof(*paths), cmpstringp);
|
|
|
|
for (i = 0; i < npaths; i++) {
|
|
const char *p = paths[i];
|
|
diff --git a/tools/nss/libvirt_nss.c b/tools/nss/libvirt_nss.c
|
|
index 3b89f72742..265ef236cc 100644
|
|
--- a/tools/nss/libvirt_nss.c
|
|
+++ b/tools/nss/libvirt_nss.c
|
|
@@ -69,7 +69,8 @@ static void
|
|
sortAddr(leaseAddress *tmpAddress,
|
|
size_t ntmpAddress)
|
|
{
|
|
- qsort(tmpAddress, ntmpAddress, sizeof(*tmpAddress), leaseAddressSorter);
|
|
+ if (tmpAddress)
|
|
+ qsort(tmpAddress, ntmpAddress, sizeof(*tmpAddress), leaseAddressSorter);
|
|
}
|
|
|
|
|
|
--
|
|
2.33.0
|
|
|