]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/ipv6/ip6_output.c
net: fix bogus cast in skb_pagelen() and use unsigned variables
[karo-tx-linux.git] / net / ipv6 / ip6_output.c
index 6001e781164eb6d49cf604e7d8067a42ebc7dc3d..312cbd0e5038de3031c87d600d13006472b2432d 100644 (file)
@@ -203,7 +203,8 @@ int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6,
                if (opt->opt_flen)
                        ipv6_push_frag_opts(skb, opt, &proto);
                if (opt->opt_nflen)
-                       ipv6_push_nfrag_opts(skb, opt, &proto, &first_hop);
+                       ipv6_push_nfrag_opts(skb, opt, &proto, &first_hop,
+                                            &fl6->saddr);
        }
 
        skb_push(skb, sizeof(struct ipv6hdr));
@@ -624,7 +625,7 @@ int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
 
        hroom = LL_RESERVED_SPACE(rt->dst.dev);
        if (skb_has_frag_list(skb)) {
-               int first_len = skb_pagelen(skb);
+               unsigned int first_len = skb_pagelen(skb);
                struct sk_buff *frag2;
 
                if (first_len - hlen > mtu ||
@@ -1366,7 +1367,7 @@ emsgsize:
        if (((length > mtu) ||
             (skb && skb_is_gso(skb))) &&
            (sk->sk_protocol == IPPROTO_UDP) &&
-           (rt->dst.dev->features & NETIF_F_UFO) &&
+           (rt->dst.dev->features & NETIF_F_UFO) && !rt->dst.header_len &&
            (sk->sk_type == SOCK_DGRAM) && !udp_get_no_check6_tx(sk)) {
                err = ip6_ufo_append_data(sk, queue, getfrag, from, length,
                                          hh_len, fragheaderlen, exthdrlen,
@@ -1672,7 +1673,7 @@ struct sk_buff *__ip6_make_skb(struct sock *sk,
        if (opt && opt->opt_flen)
                ipv6_push_frag_opts(skb, opt, &proto);
        if (opt && opt->opt_nflen)
-               ipv6_push_nfrag_opts(skb, opt, &proto, &final_dst);
+               ipv6_push_nfrag_opts(skb, opt, &proto, &final_dst, &fl6->saddr);
 
        skb_push(skb, sizeof(struct ipv6hdr));
        skb_reset_network_header(skb);