|
@@ -913,7 +913,7 @@ static int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_txoptions *opt,
|
|
}
|
|
}
|
|
|
|
|
|
static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
|
static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
|
- char __user *optval, int __user *optlen)
|
|
|
|
|
|
+ char __user *optval, int __user *optlen, unsigned flags)
|
|
{
|
|
{
|
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
|
int len;
|
|
int len;
|
|
@@ -962,7 +962,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
|
|
|
|
|
msg.msg_control = optval;
|
|
msg.msg_control = optval;
|
|
msg.msg_controllen = len;
|
|
msg.msg_controllen = len;
|
|
- msg.msg_flags = 0;
|
|
|
|
|
|
+ msg.msg_flags = flags;
|
|
|
|
|
|
lock_sock(sk);
|
|
lock_sock(sk);
|
|
skb = np->pktoptions;
|
|
skb = np->pktoptions;
|
|
@@ -1222,7 +1222,7 @@ int ipv6_getsockopt(struct sock *sk, int level, int optname,
|
|
if(level != SOL_IPV6)
|
|
if(level != SOL_IPV6)
|
|
return -ENOPROTOOPT;
|
|
return -ENOPROTOOPT;
|
|
|
|
|
|
- err = do_ipv6_getsockopt(sk, level, optname, optval, optlen);
|
|
|
|
|
|
+ err = do_ipv6_getsockopt(sk, level, optname, optval, optlen, 0);
|
|
#ifdef CONFIG_NETFILTER
|
|
#ifdef CONFIG_NETFILTER
|
|
/* we need to exclude all possible ENOPROTOOPTs except default case */
|
|
/* we need to exclude all possible ENOPROTOOPTs except default case */
|
|
if (err == -ENOPROTOOPT && optname != IPV6_2292PKTOPTIONS) {
|
|
if (err == -ENOPROTOOPT && optname != IPV6_2292PKTOPTIONS) {
|
|
@@ -1264,7 +1264,8 @@ int compat_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
|
return compat_mc_getsockopt(sk, level, optname, optval, optlen,
|
|
return compat_mc_getsockopt(sk, level, optname, optval, optlen,
|
|
ipv6_getsockopt);
|
|
ipv6_getsockopt);
|
|
|
|
|
|
- err = do_ipv6_getsockopt(sk, level, optname, optval, optlen);
|
|
|
|
|
|
+ err = do_ipv6_getsockopt(sk, level, optname, optval, optlen,
|
|
|
|
+ MSG_CMSG_COMPAT);
|
|
#ifdef CONFIG_NETFILTER
|
|
#ifdef CONFIG_NETFILTER
|
|
/* we need to exclude all possible ENOPROTOOPTs except default case */
|
|
/* we need to exclude all possible ENOPROTOOPTs except default case */
|
|
if (err == -ENOPROTOOPT && optname != IPV6_2292PKTOPTIONS) {
|
|
if (err == -ENOPROTOOPT && optname != IPV6_2292PKTOPTIONS) {
|