This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] inet/net-internal.h: Fix uninitalised clntudp_call() variable
- From: Alistair Francis <alistair dot francis at wdc dot com>
- To: libc-alpha at sourceware dot org
- Cc: law at redhat dot com, joseph at codesourcery dot com, zackw at panix dot com, alistair dot francis at wdc dot com, macro at wdc dot com, alistair23 at gmail dot com
- Date: Mon, 16 Sep 2019 15:15:36 -0700
- Subject: [PATCH] inet/net-internal.h: Fix uninitalised clntudp_call() variable
- Ironport-sdr: dvdTLW18x/Ajg8OViOhAZMwTsiZKJnXKjXrPDTi4Zrx8UHWBrZk630ak+mxOoDhiYrc8iuXHHq Ehf3xHaWTp+wAszkZdWSfladNy8JIye1h1qtMonVE9CG28dn68F3fZcdGTf00JxO9qsMlq8cSw caY4uBbuLCidyWRLT2j0Ed1d5W0eX9BIs2AIqv4cNWRhAGnQMDyWdMDQLPaHPdff5aduU6UlJb hnBDLEOz3YXgIpX2KYXMmN3COfBzDaogMIGPFkf572n5H+IOoL2U39U6l0bycTVU3cr6LvTQex lSw=
- Ironport-sdr: LbKoRigmtjq2ldxvjRWekeMtUGcHkZfgmxeVlepyxCWpKdezqH3X2K9NERyOpqn6RhD/YibN1u um0d+p2OGfbknicUHVO4o86Y5KOOwH6Quq1dFoAZ+/Y4R89CL/xbxi9YgI44DBz/cmaefsnCPF C+gH0d9uZadaOCU+LG6Se62NZeJlORVq0Ex09ujv0vRu9vGIxh9FawrHsRbN2S6UNGFi5P0RHn 5fwApnkD85yWUP5hU+SEDSzCk2NOykQmC5g+pqyp1wDCBA8p4w3GojmyCDizsz+2aWGVbJggn6 CiFGa2t4ysRMnppca+W41rX4
- Ironport-sdr: T38ankBPAhOCHZllP7okB24v8t5rH0wnZ3A9PMoyO0llnCPao0OR//0qCwOZIaG1WNqFCybLBF NOPWRMxi6b7ts2HrTH1AVxDPL9OoYBhN0XgksGSDhWTmepR0fwotUkRN4rxL9Tc2cLZP8VkFZD hfaFh7PTolEL2rGtII/TKHt6qpBg8KP3k0Yc9EWJbjOuzVz+0xrgAE6OTo5Dcn/0Tuh/13uJqO vvM7UmSJSb7HB8briURbedHVMdU0ubLO7/hMGtlb6cnLTimczmwTBoUzsPer0kirZSH9Ic8KIV AVQ=
- Wdcironportexception: Internal
The total_deadline variable inside the clntudp_call() function inside
sunrpc/clnt_udp.c can cause uninitalised variable warnings when building
with GCC 8.3 or 9.2 on a platform with a 64-bit tv_nsec on a 32-bit
architecture. To fix the warning let's use the DIAG_* macros to hide the
warning.
A GCC bug case has also been submitted:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91691
2019-09-16 Alistair Francis <alistair.francis@wdc.com>
* inet/net-internal.h: Fix uninitalised clntudp_call() variable
---
inet/net-internal.h | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/inet/net-internal.h b/inet/net-internal.h
index 2f522eef555..c774de2b78a 100644
--- a/inet/net-internal.h
+++ b/inet/net-internal.h
@@ -23,6 +23,7 @@
#include <stdbool.h>
#include <stdint.h>
#include <sys/time.h>
+#include <libc-diag.h>
int __inet6_scopeid_pton (const struct in6_addr *address,
const char *scope, uint32_t *result);
@@ -96,6 +97,16 @@ __deadline_is_infinite (struct deadline deadline)
return deadline.absolute.tv_nsec < 0;
}
+/* GCC 8.3 and 9.2 both incorrectly report total_deadline
+ * (from sunrpc/clnt_udp.c) as maybe-uninitialized when tv_sec is 8 bytes
+ * (64-bits) wide on 32-bit systems. We have to set -Wmaybe-uninitialized
+ * here as it won't fix the error in sunrpc/clnt_udp.c.
+ * A GCC bug has been filed here:
+ * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91691
+ */
+DIAG_PUSH_NEEDS_COMMENT;
+DIAG_IGNORE_NEEDS_COMMENT (9, "-Wmaybe-uninitialized");
+
/* Return true if the current time is at the deadline or past it. */
static inline bool
__deadline_elapsed (struct deadline_current_time current,
@@ -120,6 +131,8 @@ __deadline_first (struct deadline left, struct deadline right)
return right;
}
+DIAG_POP_NEEDS_COMMENT;
+
/* Add TV to the current time and return it. Returns a special
infinite absolute deadline on overflow. */
struct deadline __deadline_from_timeval (struct deadline_current_time,
--
2.23.0