RDS: Do not send a pong to an incoming ping with 0 src port
authorSowmini Varadhan <sowmini.varadhan@oracle.com>
Thu, 30 Jun 2016 23:11:18 +0000 (16:11 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 1 Jul 2016 20:45:18 +0000 (16:45 -0400)
RDS ping messages are sent with a non-zero src port to a zero
dst port, so that the rds pong messages can be sent back to the
originators src port. However if a confused/malicious sender
sends a ping with a 0 src port, we'd have an infinite ping-pong
loop. To avoid this, the receiver should ignore ping messages
with a 0 src port.

Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/rds/recv.c

index b58f50571782b1921036696d262bba145456dac1..fed53a6c28901c05aa4e4a10d12d2fb7793342d1 100644 (file)
@@ -226,6 +226,10 @@ void rds_recv_incoming(struct rds_connection *conn, __be32 saddr, __be32 daddr,
        cp->cp_next_rx_seq = be64_to_cpu(inc->i_hdr.h_sequence) + 1;
 
        if (rds_sysctl_ping_enable && inc->i_hdr.h_dport == 0) {
+               if (inc->i_hdr.h_sport == 0) {
+                       rdsdebug("ignore ping with 0 sport from 0x%x\n", saddr);
+                       goto out;
+               }
                rds_stats_inc(s_recv_ping);
                rds_send_pong(cp, inc->i_hdr.h_sport);
                goto out;