CVE-2026-22976CVE-2026-22976是Linux内核中的一个中等严重性安全漏洞,存在于网络流量调度子系统(net/sched)的QFQ(Quick Fair Queueing)调度器实现中。该漏洞在qfq_reset函数执行时,可能对处于非活跃状态的聚合体进行去激活操作,从而触发空指针解引用错误。攻击者可通过本地低权限访问触发此漏洞,导致内核崩溃(拒绝服务)。该漏洞的CVSS评分为5.5,属于中危级别,无需用户交互即可触发。
该漏洞的根本原因在于QFQ调度器的状态检查逻辑存在缺陷。在qfq_reset函数中,代码通过检查`qfq_class->leaf_qdisc->q.qlen > 0`来判断类别是否活跃,但这个假设在特定场景下是不成立的。具体来说,当两个QFQ qdisc对象共享同一个leaf_qdisc时(如一个作为根qdisc,另一个通过qdisc_get()/qdisc_put()临时引用),数据包通过根QFQ qdisc入队会导致共享的leaf_qdisc->q.qlen增加。当第二个QFQ qdisc触发qdisc_put和qdisc_destroy时,其自身的q->q.qlen为0,但其类的leaf_qdisc->q.qlen仍大于0。这导致qfq_reset错误地调用qfq_deactivate_agg对不活跃的聚合体进行去激活操作,最终在访问NULL指针时导致内核崩溃。漏洞触发路径为:tc_new_tfilter -> __qdisc_destroy -> qdisc_reset -> qfq_reset_qdisc -> qfq_deactivate_agg。