Re: [PATCH net-next] net: stmmac: ptp: limit n_per_out
From: Simon Horman <horms@kernel.org>
Date: 2026-02-24 09:26:42
Also in:
netdev
On Mon, Feb 23, 2026 at 12:20:47PM +0000, Russell King (Oracle) wrote:
ptp_clock_ops.n_per_out sets the number of PPS outputs, which the PTP subsystem uses to validate userspace input, such as the index number used in a PTP_CLK_REQ_PEROUT request. stmmac_enable() uses this to index the priv->pps array, which is an array of size STMMAC_PPS_MAX. ptp_clock_ops.n_per_out is initialised using priv->dma_cap.pps_out_num, which is a three bit field read from hardware. Documentation that I've checked suggests that values >= 5 are reserved, but that doesn't mean such values won't appear, and if they do, we can overrun the priv->pps array in stmmac_enable(). stmmac_ptp_register() has protection against this in its loop, but it doesn't act to limit ptp_clock_ops.n_per_out. Fix this by introducing a local variable, pps_out_num which is limited to STMMAC_PPS_MAX, and use that when initialising the array and setting priv->ptp_clock_ops.n_per_out. Signed-off-by: Russell King (Oracle) <redacted> --- This could be a user exploitable bug (although one has to be root so the gun is already pointing at one's foot.) This is the commit which introduced the problem:
Hi Russell, From the description I assumed that for this problem to manifest out-of-range values would need to be turned by hardware. But maybe I misunderstand things. Could you elaborate on the vector you have in mind?
Fixes: 9a8a02c9d46d ("net: stmmac: Add Flexible PPS support")...