From: Lino Sanfilippo <linosanfili...@gmx.de> Date: Thu, 4 May 2017 18:48:12 +0200
> Hi Pavel, > > On 04.05.2017 18:33, Pavel Belous wrote: >> From: Pavel Belous <pavel.bel...@aquantia.com> >> >> This patch fixes the crash that happens when driver tries to collect >> statistics >> from already released "aq_vec" object. >> >> Fixes: 97bde5c4f909 ("net: ethernet: aquantia: Support for NIC-specific >> code") >> Signed-off-by: Pavel Belous <pavel.bel...@aquantia.com> >> --- >> drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c >> b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c >> index cdb0299..3a32573 100644 >> --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c >> +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c >> @@ -755,7 +755,7 @@ void aq_nic_get_stats(struct aq_nic_s *self, u64 *data) >> count = 0U; >> >> for (i = 0U, aq_vec = self->aq_vec[0]; >> - self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) { >> + aq_vec && self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) { >> data += count; >> aq_vec_get_sw_stats(aq_vec, data, &count); >> } >> @@ -961,6 +961,7 @@ void aq_nic_free_hot_resources(struct aq_nic_s *self) >> for (i = AQ_DIMOF(self->aq_vec); i--;) { >> if (self->aq_vec[i]) >> aq_vec_free(self->aq_vec[i]); >> + self->aq_vec[i] = NULL; >> } >> >> err_exit:; >> > > if the driver does not support statistics when the interface is down, would > not it be clearer > to check if netif_running() in get_stats() instead? Yes, much cleaner. Much better would be to have a cached software copy so that statistics can be reported regardless of whether the device is down or not.