diff options
Diffstat (limited to 'net/ipv6/ipv6_sockglue.c')
| -rw-r--r-- | net/ipv6/ipv6_sockglue.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 14f54eb5a7f..430454ee5ea 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -64,7 +64,7 @@ int ip6_ra_control(struct sock *sk, int sel)  	struct ip6_ra_chain *ra, *new_ra, **rap;  	/* RA packet may be delivered ONLY to IPPROTO_RAW socket */ -	if (sk->sk_type != SOCK_RAW || inet_sk(sk)->num != IPPROTO_RAW) +	if (sk->sk_type != SOCK_RAW || inet_sk(sk)->inet_num != IPPROTO_RAW)  		return -ENOPROTOOPT;  	new_ra = (sel>=0) ? kmalloc(sizeof(*new_ra), GFP_KERNEL) : NULL; @@ -106,7 +106,7 @@ struct ipv6_txoptions *ipv6_update_options(struct sock *sk,  	if (inet_sk(sk)->is_icsk) {  		if (opt &&  		    !((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE)) && -		    inet_sk(sk)->daddr != LOOPBACK4_IPV6) { +		    inet_sk(sk)->inet_daddr != LOOPBACK4_IPV6) {  			struct inet_connection_sock *icsk = inet_csk(sk);  			icsk->icsk_ext_hdr_len = opt->opt_flen + opt->opt_nflen;  			icsk->icsk_sync_mss(sk, icsk->icsk_pmtu_cookie); @@ -234,7 +234,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,  	case IPV6_V6ONLY:  		if (optlen < sizeof(int) || -		    inet_sk(sk)->num) +		    inet_sk(sk)->inet_num)  			goto e_inval;  		np->ipv6only = valbool;  		retv = 0; @@ -424,6 +424,7 @@ sticky_done:  		fl.fl6_flowlabel = 0;  		fl.oif = sk->sk_bound_dev_if; +		fl.mark = sk->sk_mark;  		if (optlen == 0)  			goto update; @@ -496,13 +497,17 @@ done:  			goto e_inval;  		if (val) { +			struct net_device *dev; +  			if (sk->sk_bound_dev_if && sk->sk_bound_dev_if != val)  				goto e_inval; -			if (__dev_get_by_index(net, val) == NULL) { +			dev = dev_get_by_index(net, val); +			if (!dev) {  				retv = -ENODEV;  				break;  			} +			dev_put(dev);  		}  		np->mcast_oif = val;  		retv = 0; @@ -661,7 +666,7 @@ done:  	case IPV6_MTU_DISCOVER:  		if (optlen < sizeof(int))  			goto e_inval; -		if (val<0 || val>3) +		if (val < IP_PMTUDISC_DONT || val > IP_PMTUDISC_PROBE)  			goto e_inval;  		np->pmtudisc = val;  		retv = 0;  |