Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: tcp: Revert 'process defer accept as established' changes. ipv6: Fix duplicate initialization of rawv6_prot.destroy bnx2x: Updating the Maintainer net: Eliminate flush_scheduled_work() calls while RTNL is held. drivers/net/r6040.c: correct bad use of round_jiffies() fec_mpc52xx: MPC52xx_MESSAGES_DEFAULT: 2nd NETIF_MSG_IFDOWN => IFUP ipg: fix receivemode IPG_RM_RECEIVEMULTICAST{,HASH} in ipg_nic_set_multicast_list() netfilter: nf_conntrack: fix ctnetlink related crash in nf_nat_setup_info() netfilter: Make nflog quiet when no one listen in userspace. ipv6: Fail with appropriate error code when setting not-applicable sockopt. ipv6: Check IPV6_MULTICAST_LOOP option value. ipv6: Check the hop limit setting in ancillary data. ipv6 route: Fix route lifetime in netlink message. ipv6 mcast: Check address family of gf_group in getsockopt(MS_FILTER). dccp: Bug in initial acknowledgment number assignment dccp ccid-3: X truncated due to type conversion dccp ccid-3: TFRC reverse-lookup Bug-Fix dccp ccid-2: Bug-Fix - Ack Vectors need to be ignored on request sockets dccp: Fix sparse warnings dccp ccid-3: Bug-Fix - Zero RTT is possible
This commit is contained in:
@@ -705,6 +705,11 @@ int datagram_send_ctl(struct net *net,
|
||||
}
|
||||
|
||||
*hlimit = *(int *)CMSG_DATA(cmsg);
|
||||
if (*hlimit < -1 || *hlimit > 0xff) {
|
||||
err = -EINVAL;
|
||||
goto exit_f;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case IPV6_TCLASS:
|
||||
|
@@ -67,7 +67,7 @@ int ip6_ra_control(struct sock *sk, int sel, void (*destructor)(struct sock *))
|
||||
|
||||
/* RA packet may be delivered ONLY to IPPROTO_RAW socket */
|
||||
if (sk->sk_type != SOCK_RAW || inet_sk(sk)->num != IPPROTO_RAW)
|
||||
return -EINVAL;
|
||||
return -ENOPROTOOPT;
|
||||
|
||||
new_ra = (sel>=0) ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL;
|
||||
|
||||
@@ -446,7 +446,7 @@ done:
|
||||
|
||||
case IPV6_MULTICAST_HOPS:
|
||||
if (sk->sk_type == SOCK_STREAM)
|
||||
goto e_inval;
|
||||
break;
|
||||
if (optlen < sizeof(int))
|
||||
goto e_inval;
|
||||
if (val > 255 || val < -1)
|
||||
@@ -458,13 +458,15 @@ done:
|
||||
case IPV6_MULTICAST_LOOP:
|
||||
if (optlen < sizeof(int))
|
||||
goto e_inval;
|
||||
if (val != valbool)
|
||||
goto e_inval;
|
||||
np->mc_loop = valbool;
|
||||
retv = 0;
|
||||
break;
|
||||
|
||||
case IPV6_MULTICAST_IF:
|
||||
if (sk->sk_type == SOCK_STREAM)
|
||||
goto e_inval;
|
||||
break;
|
||||
if (optlen < sizeof(int))
|
||||
goto e_inval;
|
||||
|
||||
@@ -860,7 +862,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
||||
if (sk->sk_protocol != IPPROTO_UDP &&
|
||||
sk->sk_protocol != IPPROTO_UDPLITE &&
|
||||
sk->sk_protocol != IPPROTO_TCP)
|
||||
return -EINVAL;
|
||||
return -ENOPROTOOPT;
|
||||
if (sk->sk_state != TCP_ESTABLISHED)
|
||||
return -ENOTCONN;
|
||||
val = sk->sk_family;
|
||||
@@ -874,6 +876,8 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
||||
return -EINVAL;
|
||||
if (copy_from_user(&gsf, optval, GROUP_FILTER_SIZE(0)))
|
||||
return -EFAULT;
|
||||
if (gsf.gf_group.ss_family != AF_INET6)
|
||||
return -EADDRNOTAVAIL;
|
||||
lock_sock(sk);
|
||||
err = ip6_mc_msfget(sk, &gsf,
|
||||
(struct group_filter __user *)optval, optlen);
|
||||
|
@@ -1169,7 +1169,8 @@ static int raw6_destroy(struct sock *sk)
|
||||
lock_sock(sk);
|
||||
ip6_flush_pending_frames(sk);
|
||||
release_sock(sk);
|
||||
return 0;
|
||||
|
||||
return inet6_destroy_sock(sk);
|
||||
}
|
||||
|
||||
static int rawv6_init_sk(struct sock *sk)
|
||||
@@ -1200,7 +1201,6 @@ struct proto rawv6_prot = {
|
||||
.disconnect = udp_disconnect,
|
||||
.ioctl = rawv6_ioctl,
|
||||
.init = rawv6_init_sk,
|
||||
.destroy = inet6_destroy_sock,
|
||||
.setsockopt = rawv6_setsockopt,
|
||||
.getsockopt = rawv6_getsockopt,
|
||||
.sendmsg = rawv6_sendmsg,
|
||||
|
@@ -2196,8 +2196,12 @@ static int rt6_fill_node(struct sk_buff *skb, struct rt6_info *rt,
|
||||
|
||||
NLA_PUT_U32(skb, RTA_PRIORITY, rt->rt6i_metric);
|
||||
|
||||
expires = (rt->rt6i_flags & RTF_EXPIRES) ?
|
||||
rt->rt6i_expires - jiffies : 0;
|
||||
if (!(rt->rt6i_flags & RTF_EXPIRES))
|
||||
expires = 0;
|
||||
else if (rt->rt6i_expires - jiffies < INT_MAX)
|
||||
expires = rt->rt6i_expires - jiffies;
|
||||
else
|
||||
expires = INT_MAX;
|
||||
|
||||
if (rtnl_put_cacheinfo(skb, &rt->u.dst, 0, 0, 0,
|
||||
expires, rt->u.dst.error) < 0)
|
||||
|
Reference in New Issue
Block a user