diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2013-11-13 19:42:50 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-11-14 16:22:10 -0500 |
commit | 810abe9bb3619c717115ae88a09a92cb35a83171 (patch) | |
tree | 85178bf18375bd5bfe6bdc330831e397b2493f78 /drivers/net/ethernet/oki-semi | |
parent | 62d7e3a2d00675970bc7afccc2e407e1df8f1d0f (diff) |
pch_gbe: Validate hwtstamp_config completely before applying it
hwtstamp_ioctl() should validate all fields of hwtstamp_config
before making any changes. Currently it sets the TX configuration
before validating the rx_filter field.
Compile-tested only.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/oki-semi')
-rw-r--r-- | drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c index 5a0f04c2c813..27ffe0ebf0a6 100644 --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | |||
@@ -245,16 +245,8 @@ static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) | |||
245 | /* Get ieee1588's dev information */ | 245 | /* Get ieee1588's dev information */ |
246 | pdev = adapter->ptp_pdev; | 246 | pdev = adapter->ptp_pdev; |
247 | 247 | ||
248 | switch (cfg.tx_type) { | 248 | if (cfg.tx_type != HWTSTAMP_TX_OFF && cfg.tx_type != HWTSTAMP_TX_ON) |
249 | case HWTSTAMP_TX_OFF: | ||
250 | adapter->hwts_tx_en = 0; | ||
251 | break; | ||
252 | case HWTSTAMP_TX_ON: | ||
253 | adapter->hwts_tx_en = 1; | ||
254 | break; | ||
255 | default: | ||
256 | return -ERANGE; | 249 | return -ERANGE; |
257 | } | ||
258 | 250 | ||
259 | switch (cfg.rx_filter) { | 251 | switch (cfg.rx_filter) { |
260 | case HWTSTAMP_FILTER_NONE: | 252 | case HWTSTAMP_FILTER_NONE: |
@@ -284,6 +276,8 @@ static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) | |||
284 | return -ERANGE; | 276 | return -ERANGE; |
285 | } | 277 | } |
286 | 278 | ||
279 | adapter->hwts_tx_en = cfg.tx_type == HWTSTAMP_TX_ON; | ||
280 | |||
287 | /* Clear out any old time stamps. */ | 281 | /* Clear out any old time stamps. */ |
288 | pch_ch_event_write(pdev, TX_SNAPSHOT_LOCKED | RX_SNAPSHOT_LOCKED); | 282 | pch_ch_event_write(pdev, TX_SNAPSHOT_LOCKED | RX_SNAPSHOT_LOCKED); |
289 | 283 | ||