diff options
Diffstat (limited to 'net/ipv6/sit.c')
-rw-r--r-- | net/ipv6/sit.c | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index 1693c8d885f0..e5a453ca302e 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c | |||
@@ -974,8 +974,9 @@ static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb, | |||
974 | goto out; | 974 | goto out; |
975 | } | 975 | } |
976 | 976 | ||
977 | err = iptunnel_xmit(rt, skb, fl4.saddr, fl4.daddr, IPPROTO_IPV6, tos, | 977 | err = iptunnel_xmit(skb->sk, rt, skb, fl4.saddr, fl4.daddr, |
978 | ttl, df, !net_eq(tunnel->net, dev_net(dev))); | 978 | IPPROTO_IPV6, tos, ttl, df, |
979 | !net_eq(tunnel->net, dev_net(dev))); | ||
979 | iptunnel_xmit_stats(err, &dev->stats, dev->tstats); | 980 | iptunnel_xmit_stats(err, &dev->stats, dev->tstats); |
980 | return NETDEV_TX_OK; | 981 | return NETDEV_TX_OK; |
981 | 982 | ||
@@ -1126,8 +1127,8 @@ ipip6_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
1126 | int err = 0; | 1127 | int err = 0; |
1127 | struct ip_tunnel_parm p; | 1128 | struct ip_tunnel_parm p; |
1128 | struct ip_tunnel_prl prl; | 1129 | struct ip_tunnel_prl prl; |
1129 | struct ip_tunnel *t; | 1130 | struct ip_tunnel *t = netdev_priv(dev); |
1130 | struct net *net = dev_net(dev); | 1131 | struct net *net = t->net; |
1131 | struct sit_net *sitn = net_generic(net, sit_net_id); | 1132 | struct sit_net *sitn = net_generic(net, sit_net_id); |
1132 | #ifdef CONFIG_IPV6_SIT_6RD | 1133 | #ifdef CONFIG_IPV6_SIT_6RD |
1133 | struct ip_tunnel_6rd ip6rd; | 1134 | struct ip_tunnel_6rd ip6rd; |
@@ -1138,16 +1139,15 @@ ipip6_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
1138 | #ifdef CONFIG_IPV6_SIT_6RD | 1139 | #ifdef CONFIG_IPV6_SIT_6RD |
1139 | case SIOCGET6RD: | 1140 | case SIOCGET6RD: |
1140 | #endif | 1141 | #endif |
1141 | t = NULL; | ||
1142 | if (dev == sitn->fb_tunnel_dev) { | 1142 | if (dev == sitn->fb_tunnel_dev) { |
1143 | if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p))) { | 1143 | if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p))) { |
1144 | err = -EFAULT; | 1144 | err = -EFAULT; |
1145 | break; | 1145 | break; |
1146 | } | 1146 | } |
1147 | t = ipip6_tunnel_locate(net, &p, 0); | 1147 | t = ipip6_tunnel_locate(net, &p, 0); |
1148 | if (t == NULL) | ||
1149 | t = netdev_priv(dev); | ||
1148 | } | 1150 | } |
1149 | if (t == NULL) | ||
1150 | t = netdev_priv(dev); | ||
1151 | 1151 | ||
1152 | err = -EFAULT; | 1152 | err = -EFAULT; |
1153 | if (cmd == SIOCGETTUNNEL) { | 1153 | if (cmd == SIOCGETTUNNEL) { |
@@ -1243,9 +1243,6 @@ ipip6_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
1243 | err = -EINVAL; | 1243 | err = -EINVAL; |
1244 | if (dev == sitn->fb_tunnel_dev) | 1244 | if (dev == sitn->fb_tunnel_dev) |
1245 | goto done; | 1245 | goto done; |
1246 | err = -ENOENT; | ||
1247 | if (!(t = netdev_priv(dev))) | ||
1248 | goto done; | ||
1249 | err = ipip6_tunnel_get_prl(t, ifr->ifr_ifru.ifru_data); | 1246 | err = ipip6_tunnel_get_prl(t, ifr->ifr_ifru.ifru_data); |
1250 | break; | 1247 | break; |
1251 | 1248 | ||
@@ -1261,9 +1258,6 @@ ipip6_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
1261 | err = -EFAULT; | 1258 | err = -EFAULT; |
1262 | if (copy_from_user(&prl, ifr->ifr_ifru.ifru_data, sizeof(prl))) | 1259 | if (copy_from_user(&prl, ifr->ifr_ifru.ifru_data, sizeof(prl))) |
1263 | goto done; | 1260 | goto done; |
1264 | err = -ENOENT; | ||
1265 | if (!(t = netdev_priv(dev))) | ||
1266 | goto done; | ||
1267 | 1261 | ||
1268 | switch (cmd) { | 1262 | switch (cmd) { |
1269 | case SIOCDELPRL: | 1263 | case SIOCDELPRL: |
@@ -1291,8 +1285,6 @@ ipip6_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
1291 | sizeof(ip6rd))) | 1285 | sizeof(ip6rd))) |
1292 | goto done; | 1286 | goto done; |
1293 | 1287 | ||
1294 | t = netdev_priv(dev); | ||
1295 | |||
1296 | if (cmd != SIOCDEL6RD) { | 1288 | if (cmd != SIOCDEL6RD) { |
1297 | err = ipip6_tunnel_update_6rd(t, &ip6rd); | 1289 | err = ipip6_tunnel_update_6rd(t, &ip6rd); |
1298 | if (err < 0) | 1290 | if (err < 0) |