diff options
Diffstat (limited to 'net/ipv4/ip_sockglue.c')
-rw-r--r-- | net/ipv4/ip_sockglue.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index f72457b4b0a7..d6e76f5229cc 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c | |||
@@ -57,7 +57,7 @@ | |||
57 | static void ip_cmsg_recv_pktinfo(struct msghdr *msg, struct sk_buff *skb) | 57 | static void ip_cmsg_recv_pktinfo(struct msghdr *msg, struct sk_buff *skb) |
58 | { | 58 | { |
59 | struct in_pktinfo info; | 59 | struct in_pktinfo info; |
60 | struct rtable *rt = (struct rtable *)skb->dst; | 60 | struct rtable *rt = skb->rtable; |
61 | 61 | ||
62 | info.ipi_addr.s_addr = ip_hdr(skb)->daddr; | 62 | info.ipi_addr.s_addr = ip_hdr(skb)->daddr; |
63 | if (rt) { | 63 | if (rt) { |
@@ -163,7 +163,7 @@ void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb) | |||
163 | ip_cmsg_recv_security(msg, skb); | 163 | ip_cmsg_recv_security(msg, skb); |
164 | } | 164 | } |
165 | 165 | ||
166 | int ip_cmsg_send(struct msghdr *msg, struct ipcm_cookie *ipc) | 166 | int ip_cmsg_send(struct net *net, struct msghdr *msg, struct ipcm_cookie *ipc) |
167 | { | 167 | { |
168 | int err; | 168 | int err; |
169 | struct cmsghdr *cmsg; | 169 | struct cmsghdr *cmsg; |
@@ -176,7 +176,7 @@ int ip_cmsg_send(struct msghdr *msg, struct ipcm_cookie *ipc) | |||
176 | switch (cmsg->cmsg_type) { | 176 | switch (cmsg->cmsg_type) { |
177 | case IP_RETOPTS: | 177 | case IP_RETOPTS: |
178 | err = cmsg->cmsg_len - CMSG_ALIGN(sizeof(struct cmsghdr)); | 178 | err = cmsg->cmsg_len - CMSG_ALIGN(sizeof(struct cmsghdr)); |
179 | err = ip_options_get(&ipc->opt, CMSG_DATA(cmsg), err < 40 ? err : 40); | 179 | err = ip_options_get(net, &ipc->opt, CMSG_DATA(cmsg), err < 40 ? err : 40); |
180 | if (err) | 180 | if (err) |
181 | return err; | 181 | return err; |
182 | break; | 182 | break; |
@@ -449,7 +449,8 @@ static int do_ip_setsockopt(struct sock *sk, int level, | |||
449 | struct ip_options * opt = NULL; | 449 | struct ip_options * opt = NULL; |
450 | if (optlen > 40 || optlen < 0) | 450 | if (optlen > 40 || optlen < 0) |
451 | goto e_inval; | 451 | goto e_inval; |
452 | err = ip_options_get_from_user(&opt, optval, optlen); | 452 | err = ip_options_get_from_user(sock_net(sk), &opt, |
453 | optval, optlen); | ||
453 | if (err) | 454 | if (err) |
454 | break; | 455 | break; |
455 | if (inet->is_icsk) { | 456 | if (inet->is_icsk) { |
@@ -589,13 +590,13 @@ static int do_ip_setsockopt(struct sock *sk, int level, | |||
589 | err = 0; | 590 | err = 0; |
590 | break; | 591 | break; |
591 | } | 592 | } |
592 | dev = ip_dev_find(&init_net, mreq.imr_address.s_addr); | 593 | dev = ip_dev_find(sock_net(sk), mreq.imr_address.s_addr); |
593 | if (dev) { | 594 | if (dev) { |
594 | mreq.imr_ifindex = dev->ifindex; | 595 | mreq.imr_ifindex = dev->ifindex; |
595 | dev_put(dev); | 596 | dev_put(dev); |
596 | } | 597 | } |
597 | } else | 598 | } else |
598 | dev = __dev_get_by_index(&init_net, mreq.imr_ifindex); | 599 | dev = __dev_get_by_index(sock_net(sk), mreq.imr_ifindex); |
599 | 600 | ||
600 | 601 | ||
601 | err = -EADDRNOTAVAIL; | 602 | err = -EADDRNOTAVAIL; |