aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/ping.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/ping.c')
-rw-r--r--net/ipv6/ping.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
index a83243c3d656..587bbdcb22b4 100644
--- a/net/ipv6/ping.c
+++ b/net/ipv6/ping.c
@@ -31,7 +31,7 @@ struct proto pingv6_prot = {
31 .owner = THIS_MODULE, 31 .owner = THIS_MODULE,
32 .init = ping_init_sock, 32 .init = ping_init_sock,
33 .close = ping_close, 33 .close = ping_close,
34 .connect = ip6_datagram_connect, 34 .connect = ip6_datagram_connect_v6_only,
35 .disconnect = udp_disconnect, 35 .disconnect = udp_disconnect,
36 .setsockopt = ipv6_setsockopt, 36 .setsockopt = ipv6_setsockopt,
37 .getsockopt = ipv6_getsockopt, 37 .getsockopt = ipv6_getsockopt,
@@ -62,10 +62,9 @@ static int dummy_ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len,
62{ 62{
63 return -EAFNOSUPPORT; 63 return -EAFNOSUPPORT;
64} 64}
65static int dummy_ip6_datagram_recv_ctl(struct sock *sk, struct msghdr *msg, 65static void dummy_ip6_datagram_recv_ctl(struct sock *sk, struct msghdr *msg,
66 struct sk_buff *skb) 66 struct sk_buff *skb)
67{ 67{
68 return -EAFNOSUPPORT;
69} 68}
70static int dummy_icmpv6_err_convert(u8 type, u8 code, int *err) 69static int dummy_icmpv6_err_convert(u8 type, u8 code, int *err)
71{ 70{
@@ -103,7 +102,7 @@ int ping_v6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
103 return err; 102 return err;
104 103
105 if (msg->msg_name) { 104 if (msg->msg_name) {
106 struct sockaddr_in6 *u = (struct sockaddr_in6 *) msg->msg_name; 105 DECLARE_SOCKADDR(struct sockaddr_in6 *, u, msg->msg_name);
107 if (msg->msg_namelen < sizeof(struct sockaddr_in6) || 106 if (msg->msg_namelen < sizeof(struct sockaddr_in6) ||
108 u->sin6_family != AF_INET6) { 107 u->sin6_family != AF_INET6) {
109 return -EINVAL; 108 return -EINVAL;
@@ -136,6 +135,7 @@ int ping_v6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
136 fl6.flowi6_proto = IPPROTO_ICMPV6; 135 fl6.flowi6_proto = IPPROTO_ICMPV6;
137 fl6.saddr = np->saddr; 136 fl6.saddr = np->saddr;
138 fl6.daddr = *daddr; 137 fl6.daddr = *daddr;
138 fl6.flowi6_mark = sk->sk_mark;
139 fl6.fl6_icmp_type = user_icmph.icmp6_type; 139 fl6.fl6_icmp_type = user_icmph.icmp6_type;
140 fl6.fl6_icmp_code = user_icmph.icmp6_code; 140 fl6.fl6_icmp_code = user_icmph.icmp6_code;
141 security_sk_classify_flow(sk, flowi6_to_flowi(&fl6)); 141 security_sk_classify_flow(sk, flowi6_to_flowi(&fl6));
@@ -145,7 +145,7 @@ int ping_v6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
145 else if (!fl6.flowi6_oif) 145 else if (!fl6.flowi6_oif)
146 fl6.flowi6_oif = np->ucast_oif; 146 fl6.flowi6_oif = np->ucast_oif;
147 147
148 dst = ip6_sk_dst_lookup_flow(sk, &fl6, daddr, 1); 148 dst = ip6_sk_dst_lookup_flow(sk, &fl6, daddr);
149 if (IS_ERR(dst)) 149 if (IS_ERR(dst))
150 return PTR_ERR(dst); 150 return PTR_ERR(dst);
151 rt = (struct rt6_info *) dst; 151 rt = (struct rt6_info *) dst;
@@ -254,7 +254,9 @@ int __init pingv6_init(void)
254 return ret; 254 return ret;
255#endif 255#endif
256 pingv6_ops.ipv6_recv_error = ipv6_recv_error; 256 pingv6_ops.ipv6_recv_error = ipv6_recv_error;
257 pingv6_ops.ip6_datagram_recv_ctl = ip6_datagram_recv_ctl; 257 pingv6_ops.ip6_datagram_recv_common_ctl = ip6_datagram_recv_common_ctl;
258 pingv6_ops.ip6_datagram_recv_specific_ctl =
259 ip6_datagram_recv_specific_ctl;
258 pingv6_ops.icmpv6_err_convert = icmpv6_err_convert; 260 pingv6_ops.icmpv6_err_convert = icmpv6_err_convert;
259 pingv6_ops.ipv6_icmp_error = ipv6_icmp_error; 261 pingv6_ops.ipv6_icmp_error = ipv6_icmp_error;
260 pingv6_ops.ipv6_chk_addr = ipv6_chk_addr; 262 pingv6_ops.ipv6_chk_addr = ipv6_chk_addr;
@@ -267,7 +269,8 @@ int __init pingv6_init(void)
267void pingv6_exit(void) 269void pingv6_exit(void)
268{ 270{
269 pingv6_ops.ipv6_recv_error = dummy_ipv6_recv_error; 271 pingv6_ops.ipv6_recv_error = dummy_ipv6_recv_error;
270 pingv6_ops.ip6_datagram_recv_ctl = dummy_ip6_datagram_recv_ctl; 272 pingv6_ops.ip6_datagram_recv_common_ctl = dummy_ip6_datagram_recv_ctl;
273 pingv6_ops.ip6_datagram_recv_specific_ctl = dummy_ip6_datagram_recv_ctl;
271 pingv6_ops.icmpv6_err_convert = dummy_icmpv6_err_convert; 274 pingv6_ops.icmpv6_err_convert = dummy_icmpv6_err_convert;
272 pingv6_ops.ipv6_icmp_error = dummy_ipv6_icmp_error; 275 pingv6_ops.ipv6_icmp_error = dummy_ipv6_icmp_error;
273 pingv6_ops.ipv6_chk_addr = dummy_ipv6_chk_addr; 276 pingv6_ops.ipv6_chk_addr = dummy_ipv6_chk_addr;