]> Pileus Git - ~andy/linux/blobdiff - net/l2tp/l2tp_ip6.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
[~andy/linux] / net / l2tp / l2tp_ip6.c
index bb6e206ea70b84ed180eb73a302fb6349b0f3fe8..7704ea9502fdc9e49a2b8bb7fda4b9b9ec8d1722 100644 (file)
@@ -371,6 +371,9 @@ static int l2tp_ip6_connect(struct sock *sk, struct sockaddr *uaddr,
        if (addr_len < sizeof(*lsa))
                return -EINVAL;
 
+       if (usin->sin6_family != AF_INET6)
+               return -EINVAL;
+
        addr_type = ipv6_addr_type(&usin->sin6_addr);
        if (addr_type & IPV6_ADDR_MULTICAST)
                return -EINVAL;
@@ -481,8 +484,7 @@ static int l2tp_ip6_sendmsg(struct kiocb *iocb, struct sock *sk,
                            struct msghdr *msg, size_t len)
 {
        struct ipv6_txoptions opt_space;
-       struct sockaddr_l2tpip6 *lsa =
-               (struct sockaddr_l2tpip6 *) msg->msg_name;
+       DECLARE_SOCKADDR(struct sockaddr_l2tpip6 *, lsa, msg->msg_name);
        struct in6_addr *daddr, *final_p, final;
        struct ipv6_pinfo *np = inet6_sk(sk);
        struct ipv6_txoptions *opt = NULL;
@@ -597,7 +599,7 @@ static int l2tp_ip6_sendmsg(struct kiocb *iocb, struct sock *sk,
 
        security_sk_classify_flow(sk, flowi6_to_flowi(&fl6));
 
-       dst = ip6_dst_lookup_flow(sk, &fl6, final_p, true);
+       dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
        if (IS_ERR(dst)) {
                err = PTR_ERR(dst);
                goto out;
@@ -652,7 +654,7 @@ static int l2tp_ip6_recvmsg(struct kiocb *iocb, struct sock *sk,
                            int flags, int *addr_len)
 {
        struct ipv6_pinfo *np = inet6_sk(sk);
-       struct sockaddr_l2tpip6 *lsa = (struct sockaddr_l2tpip6 *)msg->msg_name;
+       DECLARE_SOCKADDR(struct sockaddr_l2tpip6 *, lsa, msg->msg_name);
        size_t copied = 0;
        int err = -EOPNOTSUPP;
        struct sk_buff *skb;