12745e
commit ed6b0fe710b631b99ed9fc28cefedfe69a16dc55
12745e
Author: Brad Hubbard <bhubbard@redhat.com>
12745e
Date:   Wed Mar 18 14:51:26 2015 +0530
12745e
12745e
    Use calloc to allocate xports (BZ #17542)
12745e
    
12745e
    If xports is NULL in xprt_register we malloc it but if sock >
12745e
    _rpc_dtablesize() that memory does not get initialised and may in theory
12745e
    contain any value. Later we make a conditional jump in svc_getreq_common
12745e
    based on the uninitialised memory and this caused a general protection
12745e
    fault in rpc.statd on an older version of glibc but this code has not
12745e
    changed since that version.
12745e
    
12745e
    Following is the valgrind warning.
12745e
    
12745e
    ==26802== Conditional jump or move depends on uninitialised value(s)
12745e
    ==26802==    at 0x5343A25: svc_getreq_common (in /lib64/libc-2.5.so)
12745e
    ==26802==    by 0x534357B: svc_getreqset (in /lib64/libc-2.5.so)
12745e
    ==26802==    by 0x10DE1F: ??? (in /sbin/rpc.statd)
12745e
    ==26802==    by 0x10D0EF: main (in /sbin/rpc.statd)
12745e
    ==26802==  Uninitialised value was created by a heap allocation
12745e
    ==26802==    at 0x4C2210C: malloc (vg_replace_malloc.c:195)
12745e
    ==26802==    by 0x53438BE: xprt_register (in /lib64/libc-2.5.so)
12745e
    ==26802==    by 0x53450DF: svcudp_bufcreate (in /lib64/libc-2.5.so)
12745e
    ==26802==    by 0x10FE32: ??? (in /sbin/rpc.statd)
12745e
    ==26802==    by 0x10D13E: main (in /sbin/rpc.statd)
12745e
12745e
diff --git glibc-2.17-c758a686/sunrpc/svc.c glibc-2.17-c758a686/sunrpc/svc.c
12745e
index 8c4e8a5..c6ccf10 100644
12745e
--- glibc-2.17-c758a686/sunrpc/svc.c
12745e
+++ glibc-2.17-c758a686/sunrpc/svc.c
12745e
@@ -97,8 +97,8 @@ xprt_register (SVCXPRT *xprt)
12745e
 
12745e
   if (xports == NULL)
12745e
     {
12745e
-      xports = (SVCXPRT **) malloc (_rpc_dtablesize () * sizeof (SVCXPRT *));
12745e
-      if (xports == NULL) /* DonĀ“t add handle */
12745e
+      xports = (SVCXPRT **) calloc (_rpc_dtablesize (), sizeof (SVCXPRT *));
12745e
+      if (xports == NULL) /* Don't add handle */
12745e
 	return;
12745e
     }
12745e