Netdev List
 help / color / mirror / Atom feed
* Question regarding expected behavior of two udp sockets with SO_REUSEADDR set
@ 2010-11-20  0:48 Neil Horman
  2010-11-20  4:06 ` Eric Dumazet
  0 siblings, 1 reply; 6+ messages in thread
From: Neil Horman @ 2010-11-20  0:48 UTC (permalink / raw)
  To: netdev; +Cc: davem, eric.dumazet, nhorman

Hey all-

	Got a question regarding expected/desired behavior of $SUBJECT


I have a report of a problem with a program that opens two sockets:

The first socket is UDP and binds to 127.0.0.1 on a randomly selected port

The second socket is UDP and calls connect, sending to the first socket

Both sockets are part of the same process and have SO_REUSEADDR set

After the connect the second socket sends a message to the first socket.  The
first socket waits for the message by calling select().

Its observed that occasionally the first socket fails to receive the message,
which is odd, given that the system is unloaded, and this is the only message
being sent.  A little investigation shows that when this happens, the client and
the server wind up bound to the same port.

This happens because the second socket calls inet_autobind during the connect
call, and since both it and the server have SO_REUSEADDR set, it is possible
that the autobind will select the same port that the first socket is bound to.
When this happens the sendmsg path can get confused.  Specifically, when the skb
is delivered to the destination socket, the hash lookup might find the wrong
entry and enqueue the skb to the second socket instead of the first.

Questions:

1) Is that expected?

2) If not, what do you think the best way to fix it is?

	a) Deny autobinds to the same port when SO_REUSEADDR is set, but allow
explicity binds to the same port?

	b) Deny both autobinds and explicit binds to the same port/addr,
effectively disablind SO_REUSEADDR with UDP, kind of like with listening TCP
sockets

	c) Add magic to udp_rcv to detect skbs originating from local sockets,
and _dont_ deliver to the socket it originated from

I'm inclined to say, no this is not expected behavior, and that we should fix it
with option A, but I'm interested in getting other opinions before I go down any
particular path.

Thanks!
Neil


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2010-11-21  0:54 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-20  0:48 Question regarding expected behavior of two udp sockets with SO_REUSEADDR set Neil Horman
2010-11-20  4:06 ` Eric Dumazet
2010-11-20 15:04   ` Neil Horman
2010-11-20 15:38     ` Eric Dumazet
2010-11-20 15:44     ` Eric Dumazet
2010-11-21  0:50       ` Neil Horman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox