set_tun->ttl = ip6_dst_hoplimit(dst);
                        dst_release(dst);
                } else {
-                       set_tun->ttl = net->ipv6.devconf_all->hop_limit;
+                       set_tun->ttl = READ_ONCE(net->ipv6.devconf_all->hop_limit);
                }
 #endif
        } else {
 
                }
 
                if (val < 0)
-                       val = sock_net(sk)->ipv6.devconf_all->hop_limit;
+                       val = READ_ONCE(sock_net(sk)->ipv6.devconf_all->hop_limit);
                break;
        }
 
 
        if (in6_dev->cnf.accept_ra_min_hop_limit < 256 &&
            ra_msg->icmph.icmp6_hop_limit) {
                if (in6_dev->cnf.accept_ra_min_hop_limit <= ra_msg->icmph.icmp6_hop_limit) {
-                       in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit;
+                       WRITE_ONCE(in6_dev->cnf.hop_limit, ra_msg->icmph.icmp6_hop_limit);
                        fib6_metric_set(rt, RTAX_HOPLIMIT,
                                        ra_msg->icmph.icmp6_hop_limit);
                } else {
 
 
        skb_reserve(nskb, LL_MAX_HEADER);
        nip6h = nf_reject_ip6hdr_put(nskb, oldskb, IPPROTO_TCP,
-                                    net->ipv6.devconf_all->hop_limit);
+                                    READ_ONCE(net->ipv6.devconf_all->hop_limit));
        nf_reject_ip6_tcphdr_put(nskb, oldskb, oth, otcplen);
        nip6h->payload_len = htons(nskb->len - sizeof(struct ipv6hdr));
 
 
        skb_reserve(nskb, LL_MAX_HEADER);
        nip6h = nf_reject_ip6hdr_put(nskb, oldskb, IPPROTO_ICMPV6,
-                                    net->ipv6.devconf_all->hop_limit);
+                                    READ_ONCE(net->ipv6.devconf_all->hop_limit));
 
        skb_reset_transport_header(nskb);
        icmp6h = skb_put_zero(nskb, sizeof(struct icmp6hdr));
 
                rcu_read_lock();
                idev = __in6_dev_get(dev);
                if (idev)
-                       hoplimit = idev->cnf.hop_limit;
+                       hoplimit = READ_ONCE(idev->cnf.hop_limit);
                else
-                       hoplimit = dev_net(dev)->ipv6.devconf_all->hop_limit;
+                       hoplimit = READ_ONCE(dev_net(dev)->ipv6.devconf_all->hop_limit);
                rcu_read_unlock();
        }
        return hoplimit;
 
        skb_reset_network_header(skb);
        iph = skb_put(skb, sizeof(*iph));
        ip6_flow_hdr(iph, 0, 0);
-       iph->hop_limit  = net->ipv6.devconf_all->hop_limit;
+       iph->hop_limit  = READ_ONCE(net->ipv6.devconf_all->hop_limit);
        iph->nexthdr    = IPPROTO_TCP;
        iph->saddr      = *saddr;
        iph->daddr      = *daddr;