[IPV6]: Fix the data length of get destination options with short length
authorYang Hongyang <yanghy@cn.fujitsu.com>
Wed, 28 May 2008 08:27:28 +0000 (16:27 +0800)
committerYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Wed, 4 Jun 2008 19:02:35 +0000 (04:02 +0900)
 If get destination options with length which is not enough for that
option,getsockopt() will still return the real length of the option,
which is larger then the buffer space.
 This is because ipv6_getsockopt_sticky() returns the real length of
the option.

This patch fix this problem.

Signed-off-by: Yang Hongyang <yanghy@cn.fujitsu.com>
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
net/ipv6/ipv6_sockglue.c

index aa7bedf780e53cd6641e2a4831e00e27f867d902..9293b9f0ac232134473c22d50c9ba38b651086ab 100644 (file)
@@ -832,7 +832,7 @@ static int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_txoptions *opt,
        len = min_t(unsigned int, len, ipv6_optlen(hdr));
        if (copy_to_user(optval, hdr, len))
                return -EFAULT;
-       return ipv6_optlen(hdr);
+       return len;
 }
 
 static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,