CC: [email protected] BCC: [email protected] In-Reply-To: <dfcfe03e01c364599e92715828b24713d955e7c8.1651764848.git.pab...@redhat.com> References: <dfcfe03e01c364599e92715828b24713d955e7c8.1651764848.git.pab...@redhat.com> TO: Paolo Abeni <[email protected]>
Hi Paolo, I love your patch! Perhaps something to improve: [auto build test WARNING on net/master] url: https://github.com/intel-lab-lkp/linux/commits/Paolo-Abeni/net-sched-act_pedit-really-ensure-the-skb-is-writable/20220505-235513 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git 4071bf121d59944d5cd2238de0642f3d7995a997 :::::: branch date: 2 hours ago :::::: commit date: 2 hours ago config: i386-randconfig-c001 (https://download.01.org/0day-ci/archive/20220506/[email protected]/config) compiler: gcc-11 (Debian 11.2.0-20) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Julia Lawall <[email protected]> cocci warnings: (new ones prefixed by >>) >> net/sched/act_pedit.c:333:2-8: preceding lock on line 326 vim +333 net/sched/act_pedit.c 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 318 6a2b401cd17d41 net/sched/act_pedit.c Jamal Hadi Salim 2018-08-12 319 static int tcf_pedit_act(struct sk_buff *skb, const struct tc_action *a, e9ce1cd3cf6cf3 net/sched/act_pedit.c David S. Miller 2006-08-21 320 struct tcf_result *res) ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 321 { a85a970af265f1 net/sched/act_pedit.c WANG Cong 2016-07-25 322 struct tcf_pedit *p = to_pedit(a); 5453f7744a582e net/sched/act_pedit.c Paolo Abeni 2022-05-05 323 u32 max_offset; 4749c3ef854e3a net/sched/act_pedit.c Florian Westphal 2015-04-30 324 int i; ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 325 e9ce1cd3cf6cf3 net/sched/act_pedit.c David S. Miller 2006-08-21 @326 spin_lock(&p->tcf_lock); ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 327 5453f7744a582e net/sched/act_pedit.c Paolo Abeni 2022-05-05 328 max_offset = (skb_transport_header_was_set(skb) ? 5453f7744a582e net/sched/act_pedit.c Paolo Abeni 2022-05-05 329 skb_transport_offset(skb) : 5453f7744a582e net/sched/act_pedit.c Paolo Abeni 2022-05-05 330 skb_network_offset(skb)) + 5453f7744a582e net/sched/act_pedit.c Paolo Abeni 2022-05-05 331 p->tcfp_off_max_hint; 5453f7744a582e net/sched/act_pedit.c Paolo Abeni 2022-05-05 332 if (skb_ensure_writable(skb, min(skb->len, max_offset))) 5453f7744a582e net/sched/act_pedit.c Paolo Abeni 2022-05-05 @333 return p->tcf_action; 5453f7744a582e net/sched/act_pedit.c Paolo Abeni 2022-05-05 334 9c4a4e488bc8f5 net/sched/act_pedit.c Jamal Hadi Salim 2016-06-06 335 tcf_lastuse_update(&p->tcf_tm); ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 336 e9ce1cd3cf6cf3 net/sched/act_pedit.c David S. Miller 2006-08-21 337 if (p->tcfp_nkeys > 0) { e9ce1cd3cf6cf3 net/sched/act_pedit.c David S. Miller 2006-08-21 338 struct tc_pedit_key *tkey = p->tcfp_keys; 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 339 struct tcf_pedit_key_ex *tkey_ex = p->tcfp_keys_ex; 80f0f574cc615b net/sched/act_pedit.c Roman Mashak 2018-06-27 340 enum pedit_header_type htype = 80f0f574cc615b net/sched/act_pedit.c Roman Mashak 2018-06-27 341 TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK; 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 342 enum pedit_cmd cmd = TCA_PEDIT_KEY_EX_CMD_SET; ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 343 e9ce1cd3cf6cf3 net/sched/act_pedit.c David S. Miller 2006-08-21 344 for (i = p->tcfp_nkeys; i > 0; i--, tkey++) { 544377cd2545f3 net/sched/act_pedit.c Roman Mashak 2018-06-27 345 u32 *ptr, hdata; ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 346 int offset = tkey->off; 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 347 int hoffset; 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 348 u32 val; 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 349 int rc; 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 350 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 351 if (tkey_ex) { 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 352 htype = tkey_ex->htype; 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 353 cmd = tkey_ex->cmd; 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 354 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 355 tkey_ex++; 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 356 } 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 357 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 358 rc = pedit_skb_hdr_offset(skb, htype, &hoffset); 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 359 if (rc) { 95b0d2dc13c7e7 net/sched/act_pedit.c Roman Mashak 2018-06-27 360 pr_info("tc action pedit bad header type specified (0x%x)\n", 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 361 htype); 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 362 goto bad; 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 363 } ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 364 ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 365 if (tkey->offmask) { 430527415398cf net/sched/act_pedit.c Roman Mashak 2018-06-27 366 u8 *d, _d; db2c24175d149b net/sched/act_pedit.c Changli Gao 2010-06-02 367 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 368 if (!offset_valid(skb, hoffset + tkey->at)) { 95b0d2dc13c7e7 net/sched/act_pedit.c Roman Mashak 2018-06-27 369 pr_info("tc action pedit 'at' offset %d out of bounds\n", 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 370 hoffset + tkey->at); 95c2027bfeda21 net/sched/act_pedit.c Amir Vadai 2016-11-28 371 goto bad; 95c2027bfeda21 net/sched/act_pedit.c Amir Vadai 2016-11-28 372 } 80f0f574cc615b net/sched/act_pedit.c Roman Mashak 2018-06-27 373 d = skb_header_pointer(skb, hoffset + tkey->at, 6ff7586e382cb4 net/sched/act_pedit.c Roman Mashak 2018-06-27 374 sizeof(_d), &_d); db2c24175d149b net/sched/act_pedit.c Changli Gao 2010-06-02 375 if (!d) ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 376 goto bad; db2c24175d149b net/sched/act_pedit.c Changli Gao 2010-06-02 377 offset += (*d & tkey->offmask) >> tkey->shift; ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 378 } ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 379 ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 380 if (offset % 4) { 95b0d2dc13c7e7 net/sched/act_pedit.c Roman Mashak 2018-06-27 381 pr_info("tc action pedit offset must be on 32 bit boundaries\n"); ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 382 goto bad; ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 383 } 95c2027bfeda21 net/sched/act_pedit.c Amir Vadai 2016-11-28 384 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 385 if (!offset_valid(skb, hoffset + offset)) { 95b0d2dc13c7e7 net/sched/act_pedit.c Roman Mashak 2018-06-27 386 pr_info("tc action pedit offset %d out of bounds\n", 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 387 hoffset + offset); ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 388 goto bad; ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 389 } ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 390 80f0f574cc615b net/sched/act_pedit.c Roman Mashak 2018-06-27 391 ptr = skb_header_pointer(skb, hoffset + offset, 6ff7586e382cb4 net/sched/act_pedit.c Roman Mashak 2018-06-27 392 sizeof(hdata), &hdata); db2c24175d149b net/sched/act_pedit.c Changli Gao 2010-06-02 393 if (!ptr) db2c24175d149b net/sched/act_pedit.c Changli Gao 2010-06-02 394 goto bad; ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 395 /* just do it, baby */ 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 396 switch (cmd) { 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 397 case TCA_PEDIT_KEY_EX_CMD_SET: 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 398 val = tkey->val; 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 399 break; 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 400 case TCA_PEDIT_KEY_EX_CMD_ADD: 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 401 val = (*ptr + tkey->val) & ~tkey->mask; 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 402 break; 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 403 default: 95b0d2dc13c7e7 net/sched/act_pedit.c Roman Mashak 2018-06-27 404 pr_info("tc action pedit bad command (%d)\n", 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 405 cmd); 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 406 goto bad; 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 407 } 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 408 853a14ba4682f8 net/sched/act_pedit.c Amir Vadai 2017-02-07 409 *ptr = ((*ptr & tkey->mask) ^ val); 544377cd2545f3 net/sched/act_pedit.c Roman Mashak 2018-06-27 410 if (ptr == &hdata) 71d0ed7079dffb net/sched/act_pedit.c Amir Vadai 2017-02-07 411 skb_store_bits(skb, hoffset + offset, ptr, 4); ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 412 } ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 413 ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 414 goto done; 80f0f574cc615b net/sched/act_pedit.c Roman Mashak 2018-06-27 415 } else { 6ff9c3644e72bf net/sched/act_pedit.c stephen hemminger 2010-05-12 416 WARN(1, "pedit BUG: index %d\n", p->tcf_index); 80f0f574cc615b net/sched/act_pedit.c Roman Mashak 2018-06-27 417 } ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 418 ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 419 bad: e9ce1cd3cf6cf3 net/sched/act_pedit.c David S. Miller 2006-08-21 420 p->tcf_qstats.overlimits++; ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 421 done: bfe0d0298f2a67 net/sched/act_pedit.c Eric Dumazet 2011-01-09 422 bstats_update(&p->tcf_bstats, skb); e9ce1cd3cf6cf3 net/sched/act_pedit.c David S. Miller 2006-08-21 423 spin_unlock(&p->tcf_lock); e9ce1cd3cf6cf3 net/sched/act_pedit.c David S. Miller 2006-08-21 424 return p->tcf_action; ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 425 } ^1da177e4c3f41 net/sched/pedit.c Linus Torvalds 2005-04-16 426 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
