All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] drivers/net/ethernet/3com: check the return value of vortex_up()
@ 2022-09-19  7:36 Li Zhong
  2022-09-20 10:01 ` Steffen Klassert
  0 siblings, 1 reply; 4+ messages in thread
From: Li Zhong @ 2022-09-19  7:36 UTC (permalink / raw)
  To: linux-kernel, netdev
  Cc: f.fainelli, pabeni, kuba, edumazet, davem, klassert, Li Zhong

Check the return value of vortex_up(), which could be error code when
the rx ring is not full.

Signed-off-by: Li Zhong <floridsleeves@gmail.com>
---
 drivers/net/ethernet/3com/3c59x.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
index ccf07667aa5e..7806c5f60ac8 100644
--- a/drivers/net/ethernet/3com/3c59x.c
+++ b/drivers/net/ethernet/3com/3c59x.c
@@ -1942,6 +1942,7 @@ vortex_error(struct net_device *dev, int status)
 	void __iomem *ioaddr = vp->ioaddr;
 	int do_tx_reset = 0, reset_mask = 0;
 	unsigned char tx_status = 0;
+	int err;
 
 	if (vortex_debug > 2) {
 		pr_err("%s: vortex_error(), status=0x%x\n", dev->name, status);
@@ -2016,7 +2017,9 @@ vortex_error(struct net_device *dev, int status)
 			/* Must not enter D3 or we can't legally issue the reset! */
 			vortex_down(dev, 0);
 			issue_and_wait(dev, TotalReset | 0xff);
-			vortex_up(dev);		/* AKPM: bug.  vortex_up() assumes that the rx ring is full. It may not be. */
+			err = vortex_up(dev);
+			if (err)
+				return;
 		} else if (fifo_diag & 0x0400)
 			do_tx_reset = 1;
 		if (fifo_diag & 0x3000) {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] drivers/net/ethernet/3com: check the return value of vortex_up()
  2022-09-19  7:36 [PATCH v1] drivers/net/ethernet/3com: check the return value of vortex_up() Li Zhong
@ 2022-09-20 10:01 ` Steffen Klassert
  2022-09-20 16:15   ` Li Zhong
  0 siblings, 1 reply; 4+ messages in thread
From: Steffen Klassert @ 2022-09-20 10:01 UTC (permalink / raw)
  To: Li Zhong
  Cc: linux-kernel, netdev, f.fainelli, pabeni, kuba, edumazet, davem,
	klassert

On Mon, Sep 19, 2022 at 12:36:31AM -0700, Li Zhong wrote:
> Check the return value of vortex_up(), which could be error code when
> the rx ring is not full.
> 
> Signed-off-by: Li Zhong <floridsleeves@gmail.com>
> ---
>  drivers/net/ethernet/3com/3c59x.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
> index ccf07667aa5e..7806c5f60ac8 100644
> --- a/drivers/net/ethernet/3com/3c59x.c
> +++ b/drivers/net/ethernet/3com/3c59x.c
> @@ -1942,6 +1942,7 @@ vortex_error(struct net_device *dev, int status)
>  	void __iomem *ioaddr = vp->ioaddr;
>  	int do_tx_reset = 0, reset_mask = 0;
>  	unsigned char tx_status = 0;
> +	int err;
>  
>  	if (vortex_debug > 2) {
>  		pr_err("%s: vortex_error(), status=0x%x\n", dev->name, status);
> @@ -2016,7 +2017,9 @@ vortex_error(struct net_device *dev, int status)
>  			/* Must not enter D3 or we can't legally issue the reset! */
>  			vortex_down(dev, 0);
>  			issue_and_wait(dev, TotalReset | 0xff);
> -			vortex_up(dev);		/* AKPM: bug.  vortex_up() assumes that the rx ring is full. It may not be. */
> +			err = vortex_up(dev);
> +			if (err)
> +				return;

Why does that fix the bug mentioned in the above comment?


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] drivers/net/ethernet/3com: check the return value of vortex_up()
  2022-09-20 10:01 ` Steffen Klassert
@ 2022-09-20 16:15   ` Li Zhong
  2022-09-21  7:44     ` Steffen Klassert
  0 siblings, 1 reply; 4+ messages in thread
From: Li Zhong @ 2022-09-20 16:15 UTC (permalink / raw)
  To: Steffen Klassert
  Cc: linux-kernel, netdev, f.fainelli, pabeni, kuba, edumazet, davem,
	klassert

On Tue, Sep 20, 2022 at 3:02 AM Steffen Klassert
<steffen.klassert@secunet.com> wrote:
>
> On Mon, Sep 19, 2022 at 12:36:31AM -0700, Li Zhong wrote:
> > Check the return value of vortex_up(), which could be error code when
> > the rx ring is not full.
> >
> > Signed-off-by: Li Zhong <floridsleeves@gmail.com>
> > ---
> >  drivers/net/ethernet/3com/3c59x.c | 5 ++++-
> >  1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
> > index ccf07667aa5e..7806c5f60ac8 100644
> > --- a/drivers/net/ethernet/3com/3c59x.c
> > +++ b/drivers/net/ethernet/3com/3c59x.c
> > @@ -1942,6 +1942,7 @@ vortex_error(struct net_device *dev, int status)
> >       void __iomem *ioaddr = vp->ioaddr;
> >       int do_tx_reset = 0, reset_mask = 0;
> >       unsigned char tx_status = 0;
> > +     int err;
> >
> >       if (vortex_debug > 2) {
> >               pr_err("%s: vortex_error(), status=0x%x\n", dev->name, status);
> > @@ -2016,7 +2017,9 @@ vortex_error(struct net_device *dev, int status)
> >                       /* Must not enter D3 or we can't legally issue the reset! */
> >                       vortex_down(dev, 0);
> >                       issue_and_wait(dev, TotalReset | 0xff);
> > -                     vortex_up(dev);         /* AKPM: bug.  vortex_up() assumes that the rx ring is full. It may not be. */
> > +                     err = vortex_up(dev);
> > +                     if (err)
> > +                             return;
>
> Why does that fix the bug mentioned in the above comment?
>

Since the bug is an unchecked error, we detect it with static analysis and
validate it's a bug by the comment we see above the code. So we fix this bug
following the guide of this comment.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] drivers/net/ethernet/3com: check the return value of vortex_up()
  2022-09-20 16:15   ` Li Zhong
@ 2022-09-21  7:44     ` Steffen Klassert
  0 siblings, 0 replies; 4+ messages in thread
From: Steffen Klassert @ 2022-09-21  7:44 UTC (permalink / raw)
  To: Li Zhong
  Cc: linux-kernel, netdev, f.fainelli, pabeni, kuba, edumazet, davem,
	klassert

On Tue, Sep 20, 2022 at 09:15:35AM -0700, Li Zhong wrote:
> On Tue, Sep 20, 2022 at 3:02 AM Steffen Klassert
> <steffen.klassert@secunet.com> wrote:
> >
> > On Mon, Sep 19, 2022 at 12:36:31AM -0700, Li Zhong wrote:
> > > Check the return value of vortex_up(), which could be error code when
> > > the rx ring is not full.
> > >
> > > Signed-off-by: Li Zhong <floridsleeves@gmail.com>
> > > ---
> > >  drivers/net/ethernet/3com/3c59x.c | 5 ++++-
> > >  1 file changed, 4 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
> > > index ccf07667aa5e..7806c5f60ac8 100644
> > > --- a/drivers/net/ethernet/3com/3c59x.c
> > > +++ b/drivers/net/ethernet/3com/3c59x.c
> > > @@ -1942,6 +1942,7 @@ vortex_error(struct net_device *dev, int status)
> > >       void __iomem *ioaddr = vp->ioaddr;
> > >       int do_tx_reset = 0, reset_mask = 0;
> > >       unsigned char tx_status = 0;
> > > +     int err;
> > >
> > >       if (vortex_debug > 2) {
> > >               pr_err("%s: vortex_error(), status=0x%x\n", dev->name, status);
> > > @@ -2016,7 +2017,9 @@ vortex_error(struct net_device *dev, int status)
> > >                       /* Must not enter D3 or we can't legally issue the reset! */
> > >                       vortex_down(dev, 0);
> > >                       issue_and_wait(dev, TotalReset | 0xff);
> > > -                     vortex_up(dev);         /* AKPM: bug.  vortex_up() assumes that the rx ring is full. It may not be. */
> > > +                     err = vortex_up(dev);
> > > +                     if (err)
> > > +                             return;
> >
> > Why does that fix the bug mentioned in the above comment?
> >
> 
> Since the bug is an unchecked error

No, it is not. It is completely pointless to check the error value here.

> we detect it with static analysis and
> validate it's a bug by the comment we see above the code.

This code is from the nineties, so it is unfixed for more
then 20 years. Do you really think Andrew Morton would have
added this comment if the fix is that easy?


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-09-21  7:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-19  7:36 [PATCH v1] drivers/net/ethernet/3com: check the return value of vortex_up() Li Zhong
2022-09-20 10:01 ` Steffen Klassert
2022-09-20 16:15   ` Li Zhong
2022-09-21  7:44     ` Steffen Klassert

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.