[Spread-users] Vlagrind reports uninitialised or unaddressable byte(s) in SP_disconnect

John Schultz jschultz at spreadconcepts.com
Thu May 27 13:13:15 EDT 2004

Shlomi Yaakobovich wrote:
> Hi all, 
> I ran valgrind on a client using the spread library to connect to a spread daemon, and got the following error:
> ==25325== Syscall param socketcall.send(msg) contains uninitialised or unaddressable byte(s)
> ==25325==    at 0x3C66D146: send (in /lib/i686/libc-2.3.2.so)
> ==25325==    by 0x3C2B4396: SP_disconnect (sp.c:882)
> It is repeatable, and happens every SP_disconnect call. I tracked down the reason, and it seems that send_group, which is declared like this: 
> 	char		send_group[MAX_GROUP_NAME];
> Is NOT initialized completely, only by:
> 	strcpy(send_group, Sessions[ses].private_group_name );
> And then it is passed to SP_internal_multicast, which uses it as is, without further modifying it:
> 	memcpy( group_ptr, groups, MAX_GROUP_NAME * num_groups );
> Note that the memcpy call copies the entire buffer, including the bytes after the NULL terminator, and these bytes are uninitialized. 
> I am not sure this is a REAL problem, but valgrind still cries about it. It's quite easy to fix this of course, if this is indeed a problem. What do you guys think ?
> Shlomi Yaakobovich

I'm pretty sure this is not a REAL problem.  However, all the Spread 
code should adopt a uniform way of initializing, copying and passing 
group names around.

I believe that the "right" way to do this is to zero out one past the 
last character of the name and the rest of the buffer, which is what 
most of the Spread code does.  So, that strcpy should probably be 
changed to a memcpy, or the pointer should just be passed directly.  The 
Spread daemon should ensure that these bytes are zeroed out in group 
names anyway so it doesn't actually hurt to not set them to zero in the 

John Lane Schultz
Spread Concepts LLC
Phn: 443 838 2200

More information about the Spread-users mailing list