Skip to content

Commit b6a177b

Browse files
vladimirolteankuba-moo
authored andcommitted
net: dsa: sja1105: reject other RX filters than HWTSTAMP_FILTER_PTP_V2_L2_EVENT
This is all that we can support timestamping, so we shouldn't accept anything else. Also see sja1105_hwtstamp_get(). To avoid erroring out in an inconsistent state, operate on copies of priv->hwts_rx_en and priv->hwts_tx_en, and write them back when nothing else can fail anymore. Fixes: a602afd ("net: dsa: sja1105: Expose PTP timestamping ioctls to userspace") Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20250318115716.2124395-3-vladimir.oltean@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 00eb887 commit b6a177b

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

drivers/net/dsa/sja1105/sja1105_ptp.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,33 +61,43 @@ enum sja1105_ptp_clk_mode {
6161
int sja1105_hwtstamp_set(struct dsa_switch *ds, int port, struct ifreq *ifr)
6262
{
6363
struct sja1105_private *priv = ds->priv;
64+
unsigned long hwts_tx_en, hwts_rx_en;
6465
struct hwtstamp_config config;
6566

6667
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
6768
return -EFAULT;
6869

70+
hwts_tx_en = priv->hwts_tx_en;
71+
hwts_rx_en = priv->hwts_rx_en;
72+
6973
switch (config.tx_type) {
7074
case HWTSTAMP_TX_OFF:
71-
priv->hwts_tx_en &= ~BIT(port);
75+
hwts_tx_en &= ~BIT(port);
7276
break;
7377
case HWTSTAMP_TX_ON:
74-
priv->hwts_tx_en |= BIT(port);
78+
hwts_tx_en |= BIT(port);
7579
break;
7680
default:
7781
return -ERANGE;
7882
}
7983

8084
switch (config.rx_filter) {
8185
case HWTSTAMP_FILTER_NONE:
82-
priv->hwts_rx_en &= ~BIT(port);
86+
hwts_rx_en &= ~BIT(port);
8387
break;
84-
default:
85-
priv->hwts_rx_en |= BIT(port);
88+
case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
89+
hwts_rx_en |= BIT(port);
8690
break;
91+
default:
92+
return -ERANGE;
8793
}
8894

8995
if (copy_to_user(ifr->ifr_data, &config, sizeof(config)))
9096
return -EFAULT;
97+
98+
priv->hwts_tx_en = hwts_tx_en;
99+
priv->hwts_rx_en = hwts_rx_en;
100+
91101
return 0;
92102
}
93103

0 commit comments

Comments
 (0)