From: Gustavo A. R. Silva <hidden> Date: 2018-02-15 18:31:48
_port_ is being used as index to array port_hwtstamp before verifying
it is a non-negative number and a valid index at line 209 and 258:
if (port < 0 || port >= mv88e6xxx_num_ports(chip))
Fix this by checking _port_ before using it as index to array
port_hwtstamp.
Addresses-Coverity-ID: 1465287 ("Negative array index read")
Addresses-Coverity-ID: 1465291 ("Negative array index read")
Fixes: c6fe0ad2c349 ("net: dsa: mv88e6xxx: add rx/tx timestamping support")
Signed-off-by: Gustavo A. R. Silva <redacted>
---
Changes in v2:
-Fix the same issue in mv88e6xxx_should_tstamp.
-Update commit message.
drivers/net/dsa/mv88e6xxx/hwtstamp.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
@@ -200,8 +200,8 @@ int mv88e6xxx_port_hwtstamp_get(struct dsa_switch *ds, int port,structifreq*ifr){structmv88e6xxx_chip*chip=ds->priv;-structmv88e6xxx_port_hwtstamp*ps=&chip->port_hwtstamp[port];-structhwtstamp_config*config=&ps->tstamp_config;+structmv88e6xxx_port_hwtstamp*ps;+structhwtstamp_config*config;if(!chip->info->ptp_support)return-EOPNOTSUPP;
@@ -209,6 +209,9 @@ int mv88e6xxx_port_hwtstamp_get(struct dsa_switch *ds, int port,if(port<0||port>=mv88e6xxx_num_ports(chip))return-EINVAL;+ps=&chip->port_hwtstamp[port];+config=&ps->tstamp_config;+returncopy_to_user(ifr->ifr_data,config,sizeof(*config))?-EFAULT:0;}
From: Andrew Lunn <andrew@lunn.ch> Date: 2018-02-15 21:13:09
On Thu, Feb 15, 2018 at 12:31:39PM -0600, Gustavo A. R. Silva wrote:
_port_ is being used as index to array port_hwtstamp before verifying
it is a non-negative number and a valid index at line 209 and 258:
if (port < 0 || port >= mv88e6xxx_num_ports(chip))
Fix this by checking _port_ before using it as index to array
port_hwtstamp.
Addresses-Coverity-ID: 1465287 ("Negative array index read")
Addresses-Coverity-ID: 1465291 ("Negative array index read")
Fixes: c6fe0ad2c349 ("net: dsa: mv88e6xxx: add rx/tx timestamping support")
Signed-off-by: Gustavo A. R. Silva <redacted>
From: Richard Cochran <richardcochran@gmail.com> Date: 2018-02-16 15:48:52
On Thu, Feb 15, 2018 at 12:31:39PM -0600, Gustavo A. R. Silva wrote:
_port_ is being used as index to array port_hwtstamp before verifying
it is a non-negative number and a valid index at line 209 and 258:
if (port < 0 || port >= mv88e6xxx_num_ports(chip))
Fix this by checking _port_ before using it as index to array
port_hwtstamp.
NAK. Port is already known to be valid in the callers.
See:
*** net/dsa/slave.c: dsa_slave_ioctl[266]
*** net/dsa/slave.c: dsa_skb_tx_timestamp[416]
*** net/dsa/dsa.c: dsa_skb_defer_rx_timestamp[152]
Addresses-Coverity-ID: 1465287 ("Negative array index read")
Addresses-Coverity-ID: 1465291 ("Negative array index read")
Please check the code before posting. These false positives are
really annoying.
Thanks,
Richard
From: Andrew Lunn <andrew@lunn.ch> Date: 2018-02-16 15:55:54
On Fri, Feb 16, 2018 at 07:48:46AM -0800, Richard Cochran wrote:
On Thu, Feb 15, 2018 at 12:31:39PM -0600, Gustavo A. R. Silva wrote:
quoted
_port_ is being used as index to array port_hwtstamp before verifying
it is a non-negative number and a valid index at line 209 and 258:
if (port < 0 || port >= mv88e6xxx_num_ports(chip))
Fix this by checking _port_ before using it as index to array
port_hwtstamp.
NAK. Port is already known to be valid in the callers.
Then we should take out the check. It is probably this check which is
causing the false positives.
Andrew
From: Richard Cochran <richardcochran@gmail.com> Date: 2018-02-16 15:56:22
On Fri, Feb 16, 2018 at 07:48:46AM -0800, Richard Cochran wrote:
On Thu, Feb 15, 2018 at 12:31:39PM -0600, Gustavo A. R. Silva wrote:
quoted
_port_ is being used as index to array port_hwtstamp before verifying
it is a non-negative number and a valid index at line 209 and 258:
if (port < 0 || port >= mv88e6xxx_num_ports(chip))
Fix this by checking _port_ before using it as index to array
port_hwtstamp.
NAK. Port is already known to be valid in the callers.
And so the real bug is the pointless range checking tests. I would
welcome patches to remove those.
Thanks,
Richard
From: Gustavo A. R. Silva <hidden> Date: 2018-02-16 17:49:51
On 02/16/2018 09:56 AM, Richard Cochran wrote:
On Fri, Feb 16, 2018 at 07:48:46AM -0800, Richard Cochran wrote:
quoted
On Thu, Feb 15, 2018 at 12:31:39PM -0600, Gustavo A. R. Silva wrote:
quoted
_port_ is being used as index to array port_hwtstamp before verifying
it is a non-negative number and a valid index at line 209 and 258:
if (port < 0 || port >= mv88e6xxx_num_ports(chip))
Fix this by checking _port_ before using it as index to array
port_hwtstamp.
NAK. Port is already known to be valid in the callers.
And so the real bug is the pointless range checking tests. I would
welcome patches to remove those.
I just sent a patch for this.
Thank you both, Andrew and Richard for the feedback.
--
Gustavo