]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
src: remove use of the INT_MULTIPLY_OVERFLOW macro
authorDaniel P. Berrangé <berrange@redhat.com>
Tue, 14 Jan 2020 15:59:35 +0000 (15:59 +0000)
committerDaniel P. Berrangé <berrange@redhat.com>
Fri, 17 Jan 2020 09:59:05 +0000 (09:59 +0000)
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 <phrdina@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
build-aux/syntax-check.mk
src/internal.h
src/libvirt-domain.c
src/remote/remote_daemon_dispatch.c
src/remote/remote_driver.c

index 7e7c59c3dfaa01a422eb5fd20bad04f95a8475a5..6e9328ee63469376810d21583e9fc9dd50a00e61 100644 (file)
@@ -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
 
index 686b7cfcc25e9cefe5caa42c06a4ca2a763f2e20..e356db6c7842d40783680db5a2bf5e23f9919952 100644 (file)
@@ -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.
index 204e1785aaff40b4622d9865f228c7dc5e990e57..4074397b30c3bba8b57d2058b3608234dd7a20ec 100644 (file)
@@ -21,8 +21,6 @@
 #include <config.h>
 #include <sys/stat.h>
 
-#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;
index 70fdb7f36b5c6e405354d5fc94c27b133ed08a48..458fc060d718ff8c880a55452bc66e8fe3cf440d 100644 (file)
@@ -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;
index c11f73ab4d2d6c527e4b46a67e76c392426eac68..66472a6cc186539c536a62d9d897c9dc0ec9fe8e 100644 (file)
@@ -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"),