]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
sched: address a potential NULL pointer dereference in the GRED scheduler.
authorJun Yang <juny24602@gmail.com>
Wed, 5 Mar 2025 15:44:10 +0000 (23:44 +0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 7 Mar 2025 00:35:14 +0000 (16:35 -0800)
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.

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().

Signed-off-by: Jun Yang <juny24602@gmail.com>
Reviewed-by: Cong Wang <xiyou.wangcong@gmail.com>
Fixes: f25c0515c521 ("net: sched: gred: dynamically allocate tc_gred_qopt_offload")
Link: https://patch.msgid.link/20250305154410.3505642-1-juny24602@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/sched/sch_gred.c

index ab6234b4fcd541956ce0bdb0773de448df4c9e51..532fde548b88f6c6e10236975b0a73669b2cf059 100644 (file)
@@ -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);
 }