diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/8021q/vlan_core.c | 2 | ||||
| -rw-r--r-- | net/atm/br2684.c | 7 | ||||
| -rw-r--r-- | net/bridge/br_if.c | 6 | ||||
| -rw-r--r-- | net/ipv6/ipv6_sockglue.c | 9 | ||||
| -rw-r--r-- | net/ipv6/sit.c | 3 | ||||
| -rw-r--r-- | net/sched/act_mirred.c | 3 |
6 files changed, 20 insertions, 10 deletions
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c index 5f27f8e30254..f1f2f7bb6661 100644 --- a/net/8021q/vlan_core.c +++ b/net/8021q/vlan_core.c | |||
| @@ -167,6 +167,8 @@ struct sk_buff *vlan_untag(struct sk_buff *skb) | |||
| 167 | if (unlikely(!skb)) | 167 | if (unlikely(!skb)) |
| 168 | goto err_free; | 168 | goto err_free; |
| 169 | 169 | ||
| 170 | skb_reset_network_header(skb); | ||
| 171 | skb_reset_transport_header(skb); | ||
| 170 | return skb; | 172 | return skb; |
| 171 | 173 | ||
| 172 | err_free: | 174 | err_free: |
diff --git a/net/atm/br2684.c b/net/atm/br2684.c index 52cfd0c3ea71..d07223c834af 100644 --- a/net/atm/br2684.c +++ b/net/atm/br2684.c | |||
| @@ -558,12 +558,13 @@ static int br2684_regvcc(struct atm_vcc *atmvcc, void __user * arg) | |||
| 558 | spin_unlock_irqrestore(&rq->lock, flags); | 558 | spin_unlock_irqrestore(&rq->lock, flags); |
| 559 | 559 | ||
| 560 | skb_queue_walk_safe(&queue, skb, tmp) { | 560 | skb_queue_walk_safe(&queue, skb, tmp) { |
| 561 | struct net_device *dev = skb->dev; | 561 | struct net_device *dev; |
| 562 | |||
| 563 | br2684_push(atmvcc, skb); | ||
| 564 | dev = skb->dev; | ||
| 562 | 565 | ||
| 563 | dev->stats.rx_bytes -= skb->len; | 566 | dev->stats.rx_bytes -= skb->len; |
| 564 | dev->stats.rx_packets--; | 567 | dev->stats.rx_packets--; |
| 565 | |||
| 566 | br2684_push(atmvcc, skb); | ||
| 567 | } | 568 | } |
| 568 | 569 | ||
| 569 | /* initialize netdev carrier state */ | 570 | /* initialize netdev carrier state */ |
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 2cdf0070419f..e73815456adf 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c | |||
| @@ -231,6 +231,7 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br, | |||
| 231 | int br_add_bridge(struct net *net, const char *name) | 231 | int br_add_bridge(struct net *net, const char *name) |
| 232 | { | 232 | { |
| 233 | struct net_device *dev; | 233 | struct net_device *dev; |
| 234 | int res; | ||
| 234 | 235 | ||
| 235 | dev = alloc_netdev(sizeof(struct net_bridge), name, | 236 | dev = alloc_netdev(sizeof(struct net_bridge), name, |
| 236 | br_dev_setup); | 237 | br_dev_setup); |
| @@ -240,7 +241,10 @@ int br_add_bridge(struct net *net, const char *name) | |||
| 240 | 241 | ||
| 241 | dev_net_set(dev, net); | 242 | dev_net_set(dev, net); |
| 242 | 243 | ||
| 243 | return register_netdev(dev); | 244 | res = register_netdev(dev); |
| 245 | if (res) | ||
| 246 | free_netdev(dev); | ||
| 247 | return res; | ||
| 244 | } | 248 | } |
| 245 | 249 | ||
| 246 | int br_del_bridge(struct net *net, const char *name) | 250 | int br_del_bridge(struct net *net, const char *name) |
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 9cb191ecaba8..147ede38ab48 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
| @@ -913,7 +913,7 @@ static int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_txoptions *opt, | |||
| 913 | } | 913 | } |
| 914 | 914 | ||
| 915 | static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, | 915 | static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, |
| 916 | char __user *optval, int __user *optlen) | 916 | char __user *optval, int __user *optlen, unsigned flags) |
| 917 | { | 917 | { |
| 918 | struct ipv6_pinfo *np = inet6_sk(sk); | 918 | struct ipv6_pinfo *np = inet6_sk(sk); |
| 919 | int len; | 919 | int len; |
| @@ -962,7 +962,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, | |||
| 962 | 962 | ||
| 963 | msg.msg_control = optval; | 963 | msg.msg_control = optval; |
| 964 | msg.msg_controllen = len; | 964 | msg.msg_controllen = len; |
| 965 | msg.msg_flags = 0; | 965 | msg.msg_flags = flags; |
| 966 | 966 | ||
| 967 | lock_sock(sk); | 967 | lock_sock(sk); |
| 968 | skb = np->pktoptions; | 968 | skb = np->pktoptions; |
| @@ -1222,7 +1222,7 @@ int ipv6_getsockopt(struct sock *sk, int level, int optname, | |||
| 1222 | if(level != SOL_IPV6) | 1222 | if(level != SOL_IPV6) |
| 1223 | return -ENOPROTOOPT; | 1223 | return -ENOPROTOOPT; |
| 1224 | 1224 | ||
| 1225 | err = do_ipv6_getsockopt(sk, level, optname, optval, optlen); | 1225 | err = do_ipv6_getsockopt(sk, level, optname, optval, optlen, 0); |
| 1226 | #ifdef CONFIG_NETFILTER | 1226 | #ifdef CONFIG_NETFILTER |
| 1227 | /* we need to exclude all possible ENOPROTOOPTs except default case */ | 1227 | /* we need to exclude all possible ENOPROTOOPTs except default case */ |
| 1228 | if (err == -ENOPROTOOPT && optname != IPV6_2292PKTOPTIONS) { | 1228 | if (err == -ENOPROTOOPT && optname != IPV6_2292PKTOPTIONS) { |
| @@ -1264,7 +1264,8 @@ int compat_ipv6_getsockopt(struct sock *sk, int level, int optname, | |||
| 1264 | return compat_mc_getsockopt(sk, level, optname, optval, optlen, | 1264 | return compat_mc_getsockopt(sk, level, optname, optval, optlen, |
| 1265 | ipv6_getsockopt); | 1265 | ipv6_getsockopt); |
| 1266 | 1266 | ||
| 1267 | err = do_ipv6_getsockopt(sk, level, optname, optval, optlen); | 1267 | err = do_ipv6_getsockopt(sk, level, optname, optval, optlen, |
| 1268 | MSG_CMSG_COMPAT); | ||
| 1268 | #ifdef CONFIG_NETFILTER | 1269 | #ifdef CONFIG_NETFILTER |
| 1269 | /* we need to exclude all possible ENOPROTOOPTs except default case */ | 1270 | /* we need to exclude all possible ENOPROTOOPTs except default case */ |
| 1270 | if (err == -ENOPROTOOPT && optname != IPV6_2292PKTOPTIONS) { | 1271 | if (err == -ENOPROTOOPT && optname != IPV6_2292PKTOPTIONS) { |
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index 07bf1085458f..00b15ac7a702 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c | |||
| @@ -672,6 +672,9 @@ static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb, | |||
| 672 | if (skb->protocol != htons(ETH_P_IPV6)) | 672 | if (skb->protocol != htons(ETH_P_IPV6)) |
| 673 | goto tx_error; | 673 | goto tx_error; |
| 674 | 674 | ||
| 675 | if (tos == 1) | ||
| 676 | tos = ipv6_get_dsfield(iph6); | ||
| 677 | |||
| 675 | /* ISATAP (RFC4214) - must come before 6to4 */ | 678 | /* ISATAP (RFC4214) - must come before 6to4 */ |
| 676 | if (dev->priv_flags & IFF_ISATAP) { | 679 | if (dev->priv_flags & IFF_ISATAP) { |
| 677 | struct neighbour *neigh = NULL; | 680 | struct neighbour *neigh = NULL; |
diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c index 102fc212cd64..e051398fdf6b 100644 --- a/net/sched/act_mirred.c +++ b/net/sched/act_mirred.c | |||
| @@ -196,8 +196,7 @@ static int tcf_mirred(struct sk_buff *skb, const struct tc_action *a, | |||
| 196 | 196 | ||
| 197 | skb2->skb_iif = skb->dev->ifindex; | 197 | skb2->skb_iif = skb->dev->ifindex; |
| 198 | skb2->dev = dev; | 198 | skb2->dev = dev; |
| 199 | dev_queue_xmit(skb2); | 199 | err = dev_queue_xmit(skb2); |
| 200 | err = 0; | ||
| 201 | 200 | ||
| 202 | out: | 201 | out: |
| 203 | if (err) { | 202 | if (err) { |
