Commit 1eb2cded authored by Eric Dumazet's avatar Eric Dumazet Committed by Jakub Kicinski
Browse files

net: annotate writes on dev->mtu from ndo_change_mtu()



Simon reported that ndo_change_mtu() methods were never
updated to use WRITE_ONCE(dev->mtu, new_mtu) as hinted
in commit 501a90c9 ("inet: protect against too small
mtu values.")

We read dev->mtu without holding RTNL in many places,
with READ_ONCE() annotations.

It is time to take care of ndo_change_mtu() methods
to use corresponding WRITE_ONCE()

Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Reported-by: default avatarSimon Horman <horms@kernel.org>
Closes: https://lore.kernel.org/netdev/20240505144608.GB67882@kernel.org/


Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Reviewed-by: default avatarSabrina Dubroca <sd@queasysnail.net>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Acked-by: default avatarShannon Nelson <shannon.nelson@amd.com>
Link: https://lore.kernel.org/r/20240506102812.3025432-1-edumazet@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent feb8c2b7
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ static int ipoib_change_mtu(struct net_device *dev, int new_mtu)
			ipoib_warn(priv, "mtu > %d will cause multicast packet drops.\n",
				   priv->mcast_mtu);

		dev->mtu = new_mtu;
		WRITE_ONCE(dev->mtu, new_mtu);
		return 0;
	}

@@ -265,7 +265,7 @@ static int ipoib_change_mtu(struct net_device *dev, int new_mtu)
		if (carrier_status)
			netif_carrier_on(dev);
	} else {
		dev->mtu = new_mtu;
		WRITE_ONCE(dev->mtu, new_mtu);
	}

	return ret;
+1 −1
Original line number Diff line number Diff line
@@ -4710,7 +4710,7 @@ static int bond_change_mtu(struct net_device *bond_dev, int new_mtu)
		}
	}

	bond_dev->mtu = new_mtu;
	WRITE_ONCE(bond_dev->mtu, new_mtu);

	return 0;

+1 −1
Original line number Diff line number Diff line
@@ -338,7 +338,7 @@ int can_change_mtu(struct net_device *dev, int new_mtu)
		return -EINVAL;
	}

	dev->mtu = new_mtu;
	WRITE_ONCE(dev->mtu, new_mtu);
	return 0;
}
EXPORT_SYMBOL_GPL(can_change_mtu);
+1 −1
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ static int vcan_change_mtu(struct net_device *dev, int new_mtu)
	    !can_is_canxl_dev_mtu(new_mtu))
		return -EINVAL;

	dev->mtu = new_mtu;
	WRITE_ONCE(dev->mtu, new_mtu);
	return 0;
}

+1 −1
Original line number Diff line number Diff line
@@ -135,7 +135,7 @@ static int vxcan_change_mtu(struct net_device *dev, int new_mtu)
	    !can_is_canxl_dev_mtu(new_mtu))
		return -EINVAL;

	dev->mtu = new_mtu;
	WRITE_ONCE(dev->mtu, new_mtu);
	return 0;
}

Loading