bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

getpeername() bug with non-connected sockets


From: Pino Toscano
Subject: getpeername() bug with non-connected sockets
Date: Sun, 10 Oct 2010 23:46:10 +0200
User-agent: KMail/1.13.5 (Linux/2.6.32-5-amd64; KDE/4.4.5; x86_64; ; )

Hi,

looking at the Python test suite output, I found an actual bug related 
to getpeername(). When called on non-connected sockets, it shall return 
ENOTCONN, but instead it returns -ENOTCONN. The attached testcase shows 
the issue:
  $ ./getpeername
  <socket value>, -1, -1073741881 vs 1073741881
while it should be:
  <socket value>, -1, 1073741881 vs 1073741881

Investigating a bit in the sources of hurd/pfinet, socket-
ops.c:S_socket_peername() just return straight the return value of 
misc.c:make_sockaddr_port().
make_sockaddr_port() calls the getname function of the sock-ops of the 
current sock struct, which can be one of
- linux-src/net/ipv6/af_inet6.c:inet6_getname()
- linux-src/net/ipv4/af_inet.c:inet_getname()
- linux-src/net/core/sock.c:sock_no_getname()
all of them return negative errno values, which make_sockaddr_port() 
return straight those as well. 
Not totally sure about where to fix, i.e. a "return -err" in 
make_sockaddr_port() after the getname call, or in all the callers of 
make_sockaddr_port().

-- 
Pino Toscano

Attachment: getpeername.c
Description: Text Data

Attachment: signature.asc
Description: This is a digitally signed message part.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]