diff --git a/include/net/ip.h b/include/net/ip.h
index 621eeb9f142e66e6160481bcdb4674de22fbabaa..e4f34bf49b86d5ec3181d6b85dbd983db15caf04 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -401,7 +401,7 @@ static inline unsigned int ip_dst_mtu_maybe_forward(const struct dst_entry *dst,
 	struct net *net = dev_net(dst->dev);
 	unsigned int mtu;
 
-	if (net->ipv4.sysctl_ip_fwd_use_pmtu ||
+	if (READ_ONCE(net->ipv4.sysctl_ip_fwd_use_pmtu) ||
 	    ip_mtu_locked(dst) ||
 	    !forwarding)
 		return dst_mtu(dst);
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index b79e67d79a97ce8e692bdafca4ca20c04ddf1d11..68f67bf99ed7e071fc88c08c645840519e7764ca 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -1415,7 +1415,7 @@ u32 ip_mtu_from_fib_result(struct fib_result *res, __be32 daddr)
 	struct net_device *dev = nh->nh_dev;
 	u32 mtu = 0;
 
-	if (dev_net(dev)->ipv4.sysctl_ip_fwd_use_pmtu ||
+	if (READ_ONCE(dev_net(dev)->ipv4.sysctl_ip_fwd_use_pmtu) ||
 	    fi->fib_metrics->metrics[RTAX_LOCK - 1] & (1 << RTAX_MTU))
 		mtu = fi->fib_mtu;