diff mbox series

[5.4,096/156] net: sched: sch: Bounds check priority

Message ID 20230220133606.471631231@linuxfoundation.org (mailing list archive)
State Not Applicable
Delegated to: Netdev Maintainers
Headers show
Series None | expand

Commit Message

Greg Kroah-Hartman Feb. 20, 2023, 1:35 p.m. UTC
From: Kees Cook <keescook@chromium.org>

[ Upstream commit de5ca4c3852f896cacac2bf259597aab5e17d9e3 ]

Nothing was explicitly bounds checking the priority index used to access
clpriop[]. WARN and bail out early if it's pathological. Seen with GCC 13:

../net/sched/sch_htb.c: In function 'htb_activate_prios':
../net/sched/sch_htb.c:437:44: warning: array subscript [0, 31] is outside array bounds of 'struct htb_prio[8]' [-Warray-bounds=]
  437 |                         if (p->inner.clprio[prio].feed.rb_node)
      |                             ~~~~~~~~~~~~~~~^~~~~~
../net/sched/sch_htb.c:131:41: note: while referencing 'clprio'
  131 |                         struct htb_prio clprio[TC_HTB_NUMPRIO];
      |                                         ^~~~~~

Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Cc: Cong Wang <xiyou.wangcong@gmail.com>
Cc: Jiri Pirko <jiri@resnulli.us>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: netdev@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Reviewed-by: Cong Wang <cong.wang@bytedance.com>
Link: https://lore.kernel.org/r/20230127224036.never.561-kees@kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 net/sched/sch_htb.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Paolo Abeni Feb. 21, 2023, 7:45 a.m. UTC | #1
Hello,

On Mon, 2023-02-20 at 14:35 +0100, Greg Kroah-Hartman wrote:
> From: Kees Cook <keescook@chromium.org>
> 
> [ Upstream commit de5ca4c3852f896cacac2bf259597aab5e17d9e3 ]
> 
> Nothing was explicitly bounds checking the priority index used to access
> clpriop[]. WARN and bail out early if it's pathological. Seen with GCC 13:
> 
> ../net/sched/sch_htb.c: In function 'htb_activate_prios':
> ../net/sched/sch_htb.c:437:44: warning: array subscript [0, 31] is outside array bounds of 'struct htb_prio[8]' [-Warray-bounds=]
>   437 |                         if (p->inner.clprio[prio].feed.rb_node)
>       |                             ~~~~~~~~~~~~~~~^~~~~~
> ../net/sched/sch_htb.c:131:41: note: while referencing 'clprio'
>   131 |                         struct htb_prio clprio[TC_HTB_NUMPRIO];
>       |                                         ^~~~~~
> 
> Cc: Jamal Hadi Salim <jhs@mojatatu.com>
> Cc: Cong Wang <xiyou.wangcong@gmail.com>
> Cc: Jiri Pirko <jiri@resnulli.us>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Eric Dumazet <edumazet@google.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: netdev@vger.kernel.org
> Signed-off-by: Kees Cook <keescook@chromium.org>
> Reviewed-by: Simon Horman <simon.horman@corigine.com>
> Reviewed-by: Cong Wang <cong.wang@bytedance.com>
> Link: https://lore.kernel.org/r/20230127224036.never.561-kees@kernel.org
> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
> Signed-off-by: Sasha Levin <sashal@kernel.org>

This one has a follow-up which I don't see among the patches reaching
the netdev ML:

commit 9cec2aaffe969f2a3e18b5ec105fc20bb908e475
Author: Dan Carpenter <error27@gmail.com>
Date:   Mon Feb 6 16:18:32 2023 +0300

    net: sched: sch: Fix off by one in htb_activate_prios()

Cheers,

Paolo
Greg Kroah-Hartman Feb. 21, 2023, 8:41 a.m. UTC | #2
On Tue, Feb 21, 2023 at 08:45:18AM +0100, Paolo Abeni wrote:
> Hello,
> 
> On Mon, 2023-02-20 at 14:35 +0100, Greg Kroah-Hartman wrote:
> > From: Kees Cook <keescook@chromium.org>
> > 
> > [ Upstream commit de5ca4c3852f896cacac2bf259597aab5e17d9e3 ]
> > 
> > Nothing was explicitly bounds checking the priority index used to access
> > clpriop[]. WARN and bail out early if it's pathological. Seen with GCC 13:
> > 
> > ../net/sched/sch_htb.c: In function 'htb_activate_prios':
> > ../net/sched/sch_htb.c:437:44: warning: array subscript [0, 31] is outside array bounds of 'struct htb_prio[8]' [-Warray-bounds=]
> >   437 |                         if (p->inner.clprio[prio].feed.rb_node)
> >       |                             ~~~~~~~~~~~~~~~^~~~~~
> > ../net/sched/sch_htb.c:131:41: note: while referencing 'clprio'
> >   131 |                         struct htb_prio clprio[TC_HTB_NUMPRIO];
> >       |                                         ^~~~~~
> > 
> > Cc: Jamal Hadi Salim <jhs@mojatatu.com>
> > Cc: Cong Wang <xiyou.wangcong@gmail.com>
> > Cc: Jiri Pirko <jiri@resnulli.us>
> > Cc: "David S. Miller" <davem@davemloft.net>
> > Cc: Eric Dumazet <edumazet@google.com>
> > Cc: Jakub Kicinski <kuba@kernel.org>
> > Cc: Paolo Abeni <pabeni@redhat.com>
> > Cc: netdev@vger.kernel.org
> > Signed-off-by: Kees Cook <keescook@chromium.org>
> > Reviewed-by: Simon Horman <simon.horman@corigine.com>
> > Reviewed-by: Cong Wang <cong.wang@bytedance.com>
> > Link: https://lore.kernel.org/r/20230127224036.never.561-kees@kernel.org
> > Signed-off-by: Paolo Abeni <pabeni@redhat.com>
> > Signed-off-by: Sasha Levin <sashal@kernel.org>
> 
> This one has a follow-up which I don't see among the patches reaching
> the netdev ML:
> 
> commit 9cec2aaffe969f2a3e18b5ec105fc20bb908e475
> Author: Dan Carpenter <error27@gmail.com>
> Date:   Mon Feb 6 16:18:32 2023 +0300
> 
>     net: sched: sch: Fix off by one in htb_activate_prios()

This too is in the queue for 5.4 and newer kernels, are you sure you
didn't miss that in this series?

thanks,

greg k-h
Paolo Abeni Feb. 21, 2023, 9:12 a.m. UTC | #3
On Tue, 2023-02-21 at 09:41 +0100, Greg Kroah-Hartman wrote:
> On Tue, Feb 21, 2023 at 08:45:18AM +0100, Paolo Abeni wrote:
> > Hello,
> > 
> > On Mon, 2023-02-20 at 14:35 +0100, Greg Kroah-Hartman wrote:
> > > From: Kees Cook <keescook@chromium.org>
> > > 
> > > [ Upstream commit de5ca4c3852f896cacac2bf259597aab5e17d9e3 ]
> > > 
> > > Nothing was explicitly bounds checking the priority index used to access
> > > clpriop[]. WARN and bail out early if it's pathological. Seen with GCC 13:
> > > 
> > > ../net/sched/sch_htb.c: In function 'htb_activate_prios':
> > > ../net/sched/sch_htb.c:437:44: warning: array subscript [0, 31] is outside array bounds of 'struct htb_prio[8]' [-Warray-bounds=]
> > >   437 |                         if (p->inner.clprio[prio].feed.rb_node)
> > >       |                             ~~~~~~~~~~~~~~~^~~~~~
> > > ../net/sched/sch_htb.c:131:41: note: while referencing 'clprio'
> > >   131 |                         struct htb_prio clprio[TC_HTB_NUMPRIO];
> > >       |                                         ^~~~~~
> > > 
> > > Cc: Jamal Hadi Salim <jhs@mojatatu.com>
> > > Cc: Cong Wang <xiyou.wangcong@gmail.com>
> > > Cc: Jiri Pirko <jiri@resnulli.us>
> > > Cc: "David S. Miller" <davem@davemloft.net>
> > > Cc: Eric Dumazet <edumazet@google.com>
> > > Cc: Jakub Kicinski <kuba@kernel.org>
> > > Cc: Paolo Abeni <pabeni@redhat.com>
> > > Cc: netdev@vger.kernel.org
> > > Signed-off-by: Kees Cook <keescook@chromium.org>
> > > Reviewed-by: Simon Horman <simon.horman@corigine.com>
> > > Reviewed-by: Cong Wang <cong.wang@bytedance.com>
> > > Link: https://lore.kernel.org/r/20230127224036.never.561-kees@kernel.org
> > > Signed-off-by: Paolo Abeni <pabeni@redhat.com>
> > > Signed-off-by: Sasha Levin <sashal@kernel.org>
> > 
> > This one has a follow-up which I don't see among the patches reaching
> > the netdev ML:
> > 
> > commit 9cec2aaffe969f2a3e18b5ec105fc20bb908e475
> > Author: Dan Carpenter <error27@gmail.com>
> > Date:   Mon Feb 6 16:18:32 2023 +0300
> > 
> >     net: sched: sch: Fix off by one in htb_activate_prios()
> 
> This too is in the queue for 5.4 and newer kernels, are you sure you
> didn't miss that in this series?

I missed it, sorry. I checked only my inbox and netdev, and it was not
there, but I see it in the stable queue.

Sorry for the noise,

Paolo
diff mbox series

Patch

diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
index 8184c87da8bec..e635713cb41dd 100644
--- a/net/sched/sch_htb.c
+++ b/net/sched/sch_htb.c
@@ -405,7 +405,10 @@  static void htb_activate_prios(struct htb_sched *q, struct htb_class *cl)
 	while (cl->cmode == HTB_MAY_BORROW && p && mask) {
 		m = mask;
 		while (m) {
-			int prio = ffz(~m);
+			unsigned int prio = ffz(~m);
+
+			if (WARN_ON_ONCE(prio > ARRAY_SIZE(p->inner.clprio)))
+				break;
 			m &= ~(1 << prio);
 
 			if (p->inner.clprio[prio].feed.rb_node)