Message ID | 20250305154410.3505642-1-juny24602@gmail.com (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | sched: address a potential NULL pointer dereference in the GRED scheduler. | expand |
On Wed, Mar 05, 2025 at 11:44:10PM +0800, Jun Yang wrote: > If kzalloc in gred_init returns a NULL pointer, the code follows the > error handling path, invoking gred_destroy. This, in turn, calls > gred_offload, where memset could receive a NULL pointer as input, > potentially leading to a kernel crash. > > Signed-off-by: Jun Yang <juny24602@gmail.com> When table->opt is NULL in gred_init(), gred_change_table_def() is not called yet, so it is not necessary to call ->ndo_setup_tc() in gred_offload(). Fixes: f25c0515c521 ("net: sched: gred: dynamically allocate tc_gred_qopt_offload") Reviewed-by: Cong Wang <xiyou.wangcong@gmail.com> Thanks!
diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c index ab6234b4fcd5..532fde548b88 100644 --- a/net/sched/sch_gred.c +++ b/net/sched/sch_gred.c @@ -913,7 +913,8 @@ static void gred_destroy(struct Qdisc *sch) for (i = 0; i < table->DPs; i++) gred_destroy_vq(table->tab[i]); - gred_offload(sch, TC_GRED_DESTROY); + if (table->opt) + gred_offload(sch, TC_GRED_DESTROY); kfree(table->opt); }
If kzalloc in gred_init returns a NULL pointer, the code follows the error handling path, invoking gred_destroy. This, in turn, calls gred_offload, where memset could receive a NULL pointer as input, potentially leading to a kernel crash. Signed-off-by: Jun Yang <juny24602@gmail.com> --- net/sched/sch_gred.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)