[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
getpeername.c
Description: Text Data
signature.asc
Description: This is a digitally signed message part.
- getpeername() bug with non-connected sockets,
Pino Toscano <=