Re: [PATCH net 1/1] net/sched: sch_teql: Introduce slaves_lock to avoid race condition and UAF
From: kernel test robot <hidden>
Date: 2026-06-24 07:16:45
Also in:
oe-kbuild-all, stable
Hi Jamal, kernel test robot noticed the following build warnings: [auto build test WARNING on net/main] url: https://github.com/intel-lab-lkp/linux/commits/Jamal-Hadi-Salim/net-sched-sch_teql-Introduce-slaves_lock-to-avoid-race-condition-and-UAF/20260624-024432 base: net/main patch link: https://lore.kernel.org/r/20260623184247.508956-1-jhs%40mojatatu.com patch subject: [PATCH net 1/1] net/sched: sch_teql: Introduce slaves_lock to avoid race condition and UAF config: sparc-randconfig-r133-20260624 (https://download.01.org/0day-ci/archive/20260624/202606241501.XQBMu4b8-lkp@intel.com/config) compiler: sparc64-linux-gcc (GCC) 15.2.0 sparse: v0.6.5-rc1 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260624/202606241501.XQBMu4b8-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot [off-list ref] | Closes: https://lore.kernel.org/oe-kbuild-all/202606241501.XQBMu4b8-lkp@intel.com/ (local) sparse warnings: (new ones prefixed by >>)
quoted
net/sched/sch_teql.c:106:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:106:25: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:106:25: sparse: struct Qdisc *
net/sched/sch_teql.c:217:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:217:17: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:217:17: sparse: struct Qdisc *
net/sched/sch_teql.c:220:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:220:17: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:220:17: sparse: struct Qdisc *
net/sched/sch_teql.c:300:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:300:17: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:300:17: sparse: struct Qdisc *
net/sched/sch_teql.c:359:23: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:359:23: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:359:23: sparse: struct Qdisc *
net/sched/sch_teql.c:333:41: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:333:41: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:333:41: sparse: struct Qdisc *
net/sched/sch_teql.c:333:41: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:333:41: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:333:41: sparse: struct Qdisc *
net/sched/sch_teql.c:333:41: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:333:41: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:333:41: sparse: struct Qdisc *
net/sched/sch_teql.c:349:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:349:25: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:349:25: sparse: struct Qdisc *
net/sched/sch_teql.c:349:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:349:25: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:349:25: sparse: struct Qdisc *
net/sched/sch_teql.c:349:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
net/sched/sch_teql.c:349:25: sparse: struct Qdisc [noderef] __rcu *
net/sched/sch_teql.c:349:25: sparse: struct Qdisc *
vim +106 net/sched/sch_teql.c
89
90 static struct sk_buff *
91 teql_dequeue(struct Qdisc *sch)
92 {
93 struct teql_sched_data *dat = qdisc_priv(sch);
94 struct netdev_queue *dat_queue;
95 struct sk_buff *skb;
96 struct Qdisc *q;
97
98 skb = __skb_dequeue(&dat->q);
99 dat_queue = netdev_get_tx_queue(dat->m->dev, 0);
100 q = rcu_dereference_bh(dat_queue->qdisc);
101
102 if (skb == NULL) {
103 struct net_device *m = qdisc_dev(q);
104 if (m) {
105 spin_lock_bh(&dat->m->slaves_lock);
> 106 rcu_assign_pointer(dat->m->slaves, sch);
107 spin_unlock_bh(&dat->m->slaves_lock);
108 netif_wake_queue(m);
109 }
110 } else {
111 qdisc_bstats_update(sch, skb);
112 }
113 WRITE_ONCE(sch->q.qlen, dat->q.qlen + READ_ONCE(q->q.qlen));
114 return skb;
115 }
116
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki