]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/ipv6/xfrm6_policy.c
[PATCH] ext4 calls journal_stop
[karo-tx-linux.git] / net / ipv6 / xfrm6_policy.c
index 73cee2ec07e8ed22fcba162427ce91622e5d7f59..8dffd4daae9ce4dbeb3ab8a7cc1f9887f495b669 100644 (file)
 static struct dst_ops xfrm6_dst_ops;
 static struct xfrm_policy_afinfo xfrm6_policy_afinfo;
 
-static int xfrm6_dst_lookup(struct xfrm_dst **dst, struct flowi *fl)
+static int xfrm6_dst_lookup(struct xfrm_dst **xdst, struct flowi *fl)
 {
-       int err = 0;
-       *dst = (struct xfrm_dst*)ip6_route_output(NULL, fl);
-       if (!*dst)
-               err = -ENETUNREACH;
+       struct dst_entry *dst = ip6_route_output(NULL, fl);
+       int err = dst->error;
+       if (!err)
+               *xdst = (struct xfrm_dst *) dst;
+       else
+               dst_release(dst);
        return err;
 }
 
@@ -272,11 +274,12 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl)
                        break;
 
                case IPPROTO_UDP:
+               case IPPROTO_UDPLITE:
                case IPPROTO_TCP:
                case IPPROTO_SCTP:
                case IPPROTO_DCCP:
                        if (pskb_may_pull(skb, skb->nh.raw + offset + 4 - skb->data)) {
-                               u16 *ports = (u16 *)exthdr;
+                               __be16 *ports = (__be16 *)exthdr;
 
                                fl->fl_ip_sport = ports[0];
                                fl->fl_ip_dport = ports[1];