prototype for socket accept

Paul Whitfield paulw at omnitronics.com.au
Fri Jun 18 00:20:54 UTC 2010


Hello All,

I just helped someone sort out a tricky bug
where they were calling accept.

accept(fd, addr, &address_length);

However, address_length had not been initialised,
so was set to a random value from the stack.
If the address_length was a negative value then
program crashed.

The prototype/code (all versions + in cvs) is

int accept (int s, struct sockaddr *name, int *namelen)


And the code to check that the destination length is

   if (*namelen > nam->m_len)
	*namelen = nam->m_len;
   memcpy (name, mtod(nam, caddr_t), *namelen);

if *namelen is negative, the check fails and
a negative length is passed to memcpy.


Shouldn't the prototype for accept be

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

Thus avoiding this problem?

Regards


Paul
-- 
Message  protected by MailGuard: e-mail anti-virus, anti-spam and content filtering.http://www.mailguard.com.au/mg




More information about the users mailing list