Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[cascardo/linux.git] / net / ipv6 / ipv6_sockglue.c
index af0ecb9..0a00f44 100644 (file)
@@ -1002,10 +1002,8 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
                release_sock(sk);
 
                if (skb) {
-                       int err = ip6_datagram_recv_ctl(sk, &msg, skb);
+                       ip6_datagram_recv_ctl(sk, &msg, skb);
                        kfree_skb(skb);
-                       if (err)
-                               return err;
                } else {
                        if (np->rxopt.bits.rxinfo) {
                                struct in6_pktinfo src_info;
@@ -1019,7 +1017,8 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
                                put_cmsg(&msg, SOL_IPV6, IPV6_HOPLIMIT, sizeof(hlim), &hlim);
                        }
                        if (np->rxopt.bits.rxtclass) {
-                               int tclass = ntohl(np->rcv_flowinfo & IPV6_TCLASS_MASK) >> 20;
+                               int tclass = (int)ip6_tclass(np->rcv_flowinfo);
+
                                put_cmsg(&msg, SOL_IPV6, IPV6_TCLASS, sizeof(tclass), &tclass);
                        }
                        if (np->rxopt.bits.rxoinfo) {
@@ -1220,6 +1219,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
        case IPV6_FLOWLABEL_MGR:
        {
                struct in6_flowlabel_req freq;
+               int flags;
 
                if (len < sizeof(freq))
                        return -EINVAL;
@@ -1231,9 +1231,11 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
                        return -EINVAL;
 
                len = sizeof(freq);
+               flags = freq.flr_flags;
+
                memset(&freq, 0, sizeof(freq));
 
-               val = ipv6_flowlabel_opt_get(sk, &freq);
+               val = ipv6_flowlabel_opt_get(sk, &freq, flags);
                if (val < 0)
                        return val;