diff options
Diffstat (limited to 'net/ipv6/ipv6_sockglue.c')
| -rw-r--r-- | net/ipv6/ipv6_sockglue.c | 5 | 
1 files changed, 5 insertions, 0 deletions
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 4e5eac301f9..2aa294be0c7 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -366,11 +366,16 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,  		}  		/* routing header option needs extra check */ +		retv = -EINVAL;  		if (optname == IPV6_RTHDR && opt && opt->srcrt) {  			struct ipv6_rt_hdr *rthdr = opt->srcrt;  			switch (rthdr->type) {  #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)  			case IPV6_SRCRT_TYPE_2: +				if (rthdr->hdrlen != 2 || +				    rthdr->segments_left != 1) +					goto sticky_done; +  				break;  #endif  			default:  |