rpc.statd: Bind downcall socket to loopback address
authorChuck Lever <chuck.lever@oracle.com>
Wed, 3 Aug 2011 17:22:52 +0000 (13:22 -0400)
committerLuk Claes <luk@debian.org>
Sun, 2 Oct 2011 14:16:46 +0000 (16:16 +0200)
commit46f5abb0acd3f10999428ee20c1e087c0e96ed06
tree635b435f36ddb727e6f8d6690db0caad08884c02
parent99d9d6e00a325dd876ac11052c1acaeea5cf35f5
rpc.statd: Bind downcall socket to loopback address

In the past, rpc.statd posted SM_NOTIFY requests using the same socket
it used for sending downcalls to the kernel.  To receive replies from
remote hosts, the socket was bound to INADDR_ANY.

With commit f113db52 "Remove notify functionality from statd in
favour of sm-notify" (Mar 20, 2007), the downcall socket is no longer
used for sending requests to remote hosts.  However, the downcall
socket is still bound to INADDR_ANY.

Thus a remote host can inject data on this socket since it is an
unconnected UDP socket listening for RPC replies.  Thanks to f113db52,
the port number of this socket is no longer controlled by a command
line option, making it difficult to firewall.

We have demonstrated that data injection on this socket can result in
a DoS by causing rpc.statd to consume CPU and log bandwidth, but so
far we have not found a breach.

To prevent unwanted data injection, bind this socket to the loopback
address.

BugLink: https://bugzilla.linux-nfs.org/show_bug.cgi?id=177
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
utils/statd/rmtcall.c