From f018fbac78ae5b0d9928ee9a4724b2f17c38efef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Tue, 14 Jan 2020 15:59:35 +0000 Subject: [PATCH] src: remove use of the INT_MULTIPLY_OVERFLOW macro MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The GLib g_size_checked_mul() function is not quite the same signature, and gives compiler warnings due to not correctly casting from gsize to guint64/32. Implementing a replacement for INT_MULTIPLY_OVERFLOW is easy enough to do ourselves. Reviewed-by: Pavel Hrdina Signed-off-by: Daniel P. Berrangé --- build-aux/syntax-check.mk | 15 --------------- src/internal.h | 2 ++ src/libvirt-domain.c | 6 ++---- src/remote/remote_daemon_dispatch.c | 5 ++--- src/remote/remote_driver.c | 5 ++--- 5 files changed, 8 insertions(+), 25 deletions(-) diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index 7e7c59c3df..6e9328ee63 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -1606,20 +1606,6 @@ sc_prohibit_strings_without_use: re='\<(strn?casecmp|ffs(ll)?)\>' \ $(_sc_header_without_use) -# Extract the raw list of symbol names with this: -gl_extract_define_simple = \ - /^\# *define ([A-Z]\w+)\(/ and print $$1 -# Filter out duplicates and convert to a space-separated list: -_intprops_names = \ - $(shell f=$(gnulib_dir)/lib/intprops.h; \ - perl -lne '$(gl_extract_define_simple)' $$f | sort -u | tr '\n' ' ') -# Remove trailing space and convert to a regular expression: -_intprops_syms_re = $(subst $(_sp),|,$(strip $(_intprops_names))) -# Prohibit the inclusion of intprops.h without an actual use. -sc_prohibit_intprops_without_use: - @h='intprops.h' \ - re='\<($(_intprops_syms_re)) *\(' \ - $(_sc_header_without_use) _stddef_syms_re = NULL|offsetof|ptrdiff_t|size_t|wchar_t # Prohibit the inclusion of stddef.h without an actual use. @@ -1714,7 +1700,6 @@ sc_prohibit_defined_have_decl_tests: # ================================================================== gl_other_headers_ ?= \ - intprops.h \ openat.h \ stat-macros.h diff --git a/src/internal.h b/src/internal.h index 686b7cfcc2..e356db6c78 100644 --- a/src/internal.h +++ b/src/internal.h @@ -38,6 +38,8 @@ # define sa_assert(expr) /* empty */ #endif +#define VIR_INT_MULTIPLY_OVERFLOW(a,b) (G_UNLIKELY ((b) > 0 && (a) > G_MAXINT / (b))) + /* The library itself is allowed to use deprecated functions / * variables, so effectively undefine the deprecated attribute * which would otherwise be defined in libvirt.h. diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 204e1785aa..4074397b30 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -21,8 +21,6 @@ #include #include -#include "intprops.h" - #include "datatypes.h" #include "viralloc.h" #include "virfile.h" @@ -7302,7 +7300,7 @@ virDomainGetVcpuPinInfo(virDomainPtr domain, int ncpumaps, virCheckPositiveArgGoto(ncpumaps, error); virCheckPositiveArgGoto(maplen, error); - if (INT_MULTIPLY_OVERFLOW(ncpumaps, maplen)) { + if (VIR_INT_MULTIPLY_OVERFLOW(ncpumaps, maplen)) { virReportError(VIR_ERR_OVERFLOW, _("input too large: %d * %d"), ncpumaps, maplen); goto error; @@ -7503,7 +7501,7 @@ virDomainGetVcpus(virDomainPtr domain, virVcpuInfoPtr info, int maxinfo, else virCheckZeroArgGoto(maplen, error); - if (cpumaps && INT_MULTIPLY_OVERFLOW(maxinfo, maplen)) { + if (cpumaps && VIR_INT_MULTIPLY_OVERFLOW(maxinfo, maplen)) { virReportError(VIR_ERR_OVERFLOW, _("input too large: %d * %d"), maxinfo, maplen); goto error; diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c index 70fdb7f36b..458fc060d7 100644 --- a/src/remote/remote_daemon_dispatch.c +++ b/src/remote/remote_daemon_dispatch.c @@ -31,7 +31,6 @@ #include "remote_daemon_stream.h" #include "viruuid.h" #include "vircommand.h" -#include "intprops.h" #include "virnetserverservice.h" #include "virnetserver.h" #include "virfile.h" @@ -2755,7 +2754,7 @@ remoteDispatchDomainGetVcpuPinInfo(virNetServerPtr server G_GNUC_UNUSED, goto cleanup; } - if (INT_MULTIPLY_OVERFLOW(args->ncpumaps, args->maplen) || + if (VIR_INT_MULTIPLY_OVERFLOW(args->ncpumaps, args->maplen) || args->ncpumaps * args->maplen > REMOTE_CPUMAPS_MAX) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("maxinfo * maplen > REMOTE_CPUMAPS_MAX")); goto cleanup; @@ -2898,7 +2897,7 @@ remoteDispatchDomainGetVcpus(virNetServerPtr server G_GNUC_UNUSED, goto cleanup; } - if (INT_MULTIPLY_OVERFLOW(args->maxinfo, args->maplen) || + if (VIR_INT_MULTIPLY_OVERFLOW(args->maxinfo, args->maplen) || args->maxinfo * args->maplen > REMOTE_CPUMAPS_MAX) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("maxinfo * maplen > REMOTE_CPUMAPS_MAX")); goto cleanup; diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index c11f73ab4d..66472a6cc1 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -43,7 +43,6 @@ #include "viralloc.h" #include "virfile.h" #include "vircommand.h" -#include "intprops.h" #include "virtypedparam.h" #include "viruri.h" #include "virauth.h" @@ -2236,7 +2235,7 @@ remoteDomainGetVcpuPinInfo(virDomainPtr domain, goto done; } - if (INT_MULTIPLY_OVERFLOW(ncpumaps, maplen) || + if (VIR_INT_MULTIPLY_OVERFLOW(ncpumaps, maplen) || ncpumaps * maplen > REMOTE_CPUMAPS_MAX) { virReportError(VIR_ERR_RPC, _("vCPU map buffer length exceeds maximum: %d > %d"), @@ -2405,7 +2404,7 @@ remoteDomainGetVcpus(virDomainPtr domain, maxinfo, REMOTE_VCPUINFO_MAX); goto done; } - if (INT_MULTIPLY_OVERFLOW(maxinfo, maplen) || + if (VIR_INT_MULTIPLY_OVERFLOW(maxinfo, maplen) || maxinfo * maplen > REMOTE_CPUMAPS_MAX) { virReportError(VIR_ERR_RPC, _("vCPU map buffer length exceeds maximum: %d > %d"), -- GitLab