Avoid warnings for unused results in nscd/connections.c
Commit Message
This patch avoids warnings for unused results of setuid and setgid in
nscd/connections.c using an ignore_value macro along the lines
suggested by Paul in
<https://sourceware.org/ml/libc-alpha/2014-11/msg00733.html>.
(If anyone thinks the return values should not be ignored - that
ignoring them is a bug, whether security or otherwise - please file
that bug in Bugzilla. Having the warnings around hasn't done any good
to get any such bug fixed, and it's not useful for any such bug to
block use of -Werror.)
Tested for x86_64.
2014-11-26 Joseph Myers <joseph@codesourcery.com>
* include/libc-internal.h (ignore_value): New macro.
* nscd/connections.c (restart): Wrap calls to setuid and setgid
with ignore_value.
Comments
Thank you, this looks good.
@@ -70,4 +70,10 @@ extern void __init_misc (int, char **, char **);
#define PTR_ALIGN_UP(base, size) \
((__typeof__ (base)) ALIGN_UP ((uintptr_t) (base), (size)))
+/* Ignore the value of an expression when a cast to void does not
+ suffice (in particular, for a call to a function declared with
+ attribute warn_unused_result). */
+#define ignore_value(x) \
+ ({ __typeof__ (x) __ignored_value = (x); (void) __ignored_value; })
+
#endif /* _LIBC_INTERNAL */
@@ -1464,7 +1464,7 @@ cannot change to old UID: %s; disabling paranoia mode"),
cannot change to old GID: %s; disabling paranoia mode"),
strerror (errno));
- setuid (server_uid);
+ ignore_value (setuid (server_uid));
paranoia = 0;
return;
}
@@ -1479,8 +1479,8 @@ cannot change to old working directory: %s; disabling paranoia mode"),
if (server_user != NULL)
{
- setuid (server_uid);
- setgid (server_gid);
+ ignore_value (setuid (server_uid));
+ ignore_value (setgid (server_gid));
}
paranoia = 0;
return;
@@ -1524,8 +1524,8 @@ cannot change to old working directory: %s; disabling paranoia mode"),
if (server_user != NULL)
{
- setuid (server_uid);
- setgid (server_gid);
+ ignore_value (setuid (server_uid));
+ ignore_value (setgid (server_gid));
}
if (chdir ("/") != 0)
dbg_log (_("cannot change current working directory to \"/\": %s"),