bin/71628: [PATCH] cleanup of the usr.sbin/rpcbind code

Giorgos Keramidas keramida at freebsd.org
Sun Sep 12 13:10:49 PDT 2004


The following reply was made to PR bin/71628; it has been noted by GNATS.

From: Giorgos Keramidas <keramida at freebsd.org>
To: Dan Lukes <dan at obluda.cz>
Cc: alfred at freebsd.org, bug-followup at freebsd.org
Subject: Re: bin/71628: [PATCH] cleanup of the usr.sbin/rpcbind code
Date: Sun, 12 Sep 2004 22:39:20 +0300

 On 2004-09-12 04:38, Dan Lukes <dan at obluda.cz> wrote:
 >   static int
 >   init_transport(struct netconfig *nconf)
 >   {
 > - 	int fd;
 > + 	int fd = fd;  /* init to suppres "may be used uninitialized" warning */
 
 Err, no please.  GCC complains that fd "may be used uninitialized" because
 of this construct near line 275 and the rest of the function body:
 
     275         if (nconf->nc_semantics != NC_TPI_CLTS) {
     276                 if ((fd = __rpc_nconf2fd(nconf)) < 0) {
     277                         int non_fatal = 0;
     ...
     283                         return (1);
     284                 }
     ...
     311         if (nconf->nc_semantics == NC_TPI_CLTS) {
     ...
     334                 while (nhostsbak > 0) {
     ...
     339                         if ((fd = __rpc_nconf2fd(nconf)) < 0) {
     ...
     452         } else {
     ...
     466                 if (bind(fd, sa, addrlen) < 0) {
 
 Pay attention to this last line.  GCC believes that fd can be used
 uninitialized because if NC_TPI_CLTS is not used the bind() call will
 receive an uninitialized value of `fd'.  I'm not acquainted with the
 internals of rpcbind() at all, but I know that Alfred Perlstein is.
 He's probably the best person to suggest a fix for this warning, if one
 is really needed.
 
 >   	struct t_bind taddr;
 >   	struct addrinfo hints, *res = NULL;
 >   	struct __rpc_sockinfo si;
 > - 	SVCXPRT	*my_xprt;
 > ! 	SVCXPRT	*my_xprt = my_xprt; /* init to suppres "may be used uninitialized" warning */
 
 No.  I don't know why you think that this is a good fix for all the
 uninitialized pointer warnings.  It's not.  Never :-/
 
 This warning is probably caused by GCC's inability to make sure that when
 `bar' is a pointer this construct is perfectly fine:
 
 	if (foo) {
 		...
 		if (bar = baz())
 			...
 	} else {
 		...
 		if (bar = baz2())
 			...
 	}
 
 	if (blah(bar))
 		...
 
 After a quick glance at the source of rpcbind() I think that there's no way
 that my_xrpt can be used uninitialized.  A proper fix for this warning
 would be then to just set my_xrpt to NULL at first and let the rest of the
 function unchanged regarding my_xrpt.
 


More information about the freebsd-bugs mailing list