OSDN Git Service

net: ping: dont call udp_ioctl()
authorEric Dumazet <eric.dumazet@gmail.com>
Sun, 15 May 2011 21:26:31 +0000 (21:26 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 16 May 2011 15:49:39 +0000 (11:49 -0400)
udp_ioctl() really handles UDP and UDPLite protocols.

1) It can increment UDP_MIB_INERRORS in case first_packet_length() finds
a frame with bad checksum.

2) It has a dependency on sizeof(struct udphdr), not applicable to
ICMP/PING

If ping sockets need to handle SIOCINQ/SIOCOUTQ ioctl, this should be
done differently.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Vasiliy Kulikov <segoon@openwall.com>
Acked-by: Vasiliy Kulikov <segoon@openwall.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/ping.c

index 7041d09..41836ab 100644 (file)
@@ -22,7 +22,6 @@
 
 #include <asm/system.h>
 #include <linux/uaccess.h>
-#include <asm/ioctls.h>
 #include <linux/types.h>
 #include <linux/fcntl.h>
 #include <linux/socket.h>
@@ -609,23 +608,6 @@ do_confirm:
        goto out;
 }
 
-/*
- *     IOCTL requests applicable to the UDP^H^H^HICMP protocol
- */
-
-int ping_ioctl(struct sock *sk, int cmd, unsigned long arg)
-{
-       pr_debug("ping_ioctl(sk=%p,sk->num=%u,cmd=%d,arg=%lu)\n",
-               inet_sk(sk), inet_sk(sk)->inet_num, cmd, arg);
-       switch (cmd) {
-       case SIOCOUTQ:
-       case SIOCINQ:
-               return udp_ioctl(sk, cmd, arg);
-       default:
-               return -ENOIOCTLCMD;
-       }
-}
-
 int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                 size_t len, int noblock, int flags, int *addr_len)
 {
@@ -735,7 +717,6 @@ struct proto ping_prot = {
        .close =        ping_close,
        .connect =      ip4_datagram_connect,
        .disconnect =   udp_disconnect,
-       .ioctl =        ping_ioctl,
        .setsockopt =   ip_setsockopt,
        .getsockopt =   ip_getsockopt,
        .sendmsg =      ping_sendmsg,