All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Herbert Xu <herbert@gondor.apana.org.au>,
	Eric Dumazet <eric.dumazet@gmail.com>,
	"Gong, Sishuai" <sishuai@purdue.edu>,
	"tgraf@suug.ch" <tgraf@suug.ch>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"Sousa da Fonseca, Pedro Jose" <pfonseca@purdue.edu>
Cc: kbuild-all@lists.01.org
Subject: Re: [PATCH 2/2] rhashtable: Restore RCU marking on rhash_lock_head
Date: Fri, 24 Jul 2020 17:15:41 +0800	[thread overview]
Message-ID: <202007241732.CCLSy0N1%lkp@intel.com> (raw)
In-Reply-To: <20200724011830.GB8580@gondor.apana.org.au>

[-- Attachment #1: Type: text/plain, Size: 16520 bytes --]

Hi Herbert,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v5.8-rc6 next-20200723]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Herbert-Xu/rhashtable-Fix-unprotected-RCU-dereference-in-__rht_ptr/20200724-092031
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git d15be546031cf65a0fc34879beca02fd90fe7ac7
config: i386-randconfig-s002-20200724 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.2-93-g4c6cbe55-dirty
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)

   net/sched/cls_flower.c:211:19: sparse:     got restricted __be16 [usertype] dst
   net/sched/cls_flower.c:211:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:211:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:214:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:214:21: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] dst @@
   net/sched/cls_flower.c:214:21: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:214:21: sparse:     got restricted __be16 [usertype] dst
   net/sched/cls_flower.c:214:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:214:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:214:21: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:214:51: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:215:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:215:21: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] dst @@
   net/sched/cls_flower.c:215:21: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:215:21: sparse:     got restricted __be16 [usertype] dst
   net/sched/cls_flower.c:215:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:215:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:215:21: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:215:51: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:231:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:231:20: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:231:20: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:231:20: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:231:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:231:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:232:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:232:20: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:232:20: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:232:20: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:232:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:232:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:233:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:233:19: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:233:19: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:233:19: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:233:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:233:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:234:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:234:19: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:234:19: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:234:19: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:234:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:234:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:237:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:237:21: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:237:21: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:237:21: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:237:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:237:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:237:21: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:237:51: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:238:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:238:21: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:238:21: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:238:21: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:238:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:238:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:238:21: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:238:51: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:769:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:769:13: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] dst @@
   net/sched/cls_flower.c:769:13: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:769:13: sparse:     got restricted __be16 [usertype] dst
   net/sched/cls_flower.c:769:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:769:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:770:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:770:13: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] dst @@
   net/sched/cls_flower.c:770:13: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:770:13: sparse:     got restricted __be16 [usertype] dst
   net/sched/cls_flower.c:770:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:770:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:769:13: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:770:13: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:777:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:777:13: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:777:13: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:777:13: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:777:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:777:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:778:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:778:13: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:778:13: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:778:13: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:778:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:778:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:777:13: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:778:13: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c: note: in included file:
>> include/linux/rhashtable.h:1156:13: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct rhash_lock_head **bkt @@     got struct rhash_lock_head [noderef] __rcu ** @@
>> include/linux/rhashtable.h:1156:13: sparse:     expected struct rhash_lock_head **bkt
>> include/linux/rhashtable.h:1156:13: sparse:     got struct rhash_lock_head [noderef] __rcu **
>> include/linux/rhashtable.h:1161:23: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct rhash_lock_head [noderef] __rcu **bkt @@     got struct rhash_lock_head **bkt @@
>> include/linux/rhashtable.h:1161:23: sparse:     expected struct rhash_lock_head [noderef] __rcu **bkt
>> include/linux/rhashtable.h:1161:23: sparse:     got struct rhash_lock_head **bkt
>> include/linux/rhashtable.h:1163:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct rhash_lock_head [noderef] __rcu *const *bkt @@     got struct rhash_lock_head **bkt @@
>> include/linux/rhashtable.h:1163:9: sparse:     expected struct rhash_lock_head [noderef] __rcu *const *bkt
   include/linux/rhashtable.h:1163:9: sparse:     got struct rhash_lock_head **bkt
   include/linux/rhashtable.h:1172:41: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct rhash_lock_head [noderef] __rcu **bkt @@     got struct rhash_lock_head **bkt @@
   include/linux/rhashtable.h:1172:41: sparse:     expected struct rhash_lock_head [noderef] __rcu **bkt
   include/linux/rhashtable.h:1172:41: sparse:     got struct rhash_lock_head **bkt
   include/linux/rhashtable.h:1174:48: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct rhash_lock_head [noderef] __rcu **bkt @@     got struct rhash_lock_head **bkt @@
   include/linux/rhashtable.h:1174:48: sparse:     expected struct rhash_lock_head [noderef] __rcu **bkt
   include/linux/rhashtable.h:1174:48: sparse:     got struct rhash_lock_head **bkt
   include/linux/rhashtable.h:1180:25: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct rhash_lock_head [noderef] __rcu **bkt @@     got struct rhash_lock_head **bkt @@
   include/linux/rhashtable.h:1180:25: sparse:     expected struct rhash_lock_head [noderef] __rcu **bkt
   include/linux/rhashtable.h:1180:25: sparse:     got struct rhash_lock_head **bkt

vim +1156 include/linux/rhashtable.h

02fd97c3d4a8a14 Herbert Xu  2015-03-20  1136  
3502cad73c4bbf8 Tom Herbert 2015-12-15  1137  /* Internal function, please use rhashtable_replace_fast() instead */
3502cad73c4bbf8 Tom Herbert 2015-12-15  1138  static inline int __rhashtable_replace_fast(
3502cad73c4bbf8 Tom Herbert 2015-12-15  1139  	struct rhashtable *ht, struct bucket_table *tbl,
3502cad73c4bbf8 Tom Herbert 2015-12-15  1140  	struct rhash_head *obj_old, struct rhash_head *obj_new,
3502cad73c4bbf8 Tom Herbert 2015-12-15  1141  	const struct rhashtable_params params)
3502cad73c4bbf8 Tom Herbert 2015-12-15  1142  {
ba6306e3f648a85 Herbert Xu  2019-05-16  1143  	struct rhash_lock_head **bkt;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1144  	struct rhash_head __rcu **pprev;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1145  	struct rhash_head *he;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1146  	unsigned int hash;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1147  	int err = -ENOENT;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1148  
3502cad73c4bbf8 Tom Herbert 2015-12-15  1149  	/* Minimally, the old and new objects must have same hash
3502cad73c4bbf8 Tom Herbert 2015-12-15  1150  	 * (which should mean identifiers are the same).
3502cad73c4bbf8 Tom Herbert 2015-12-15  1151  	 */
3502cad73c4bbf8 Tom Herbert 2015-12-15  1152  	hash = rht_head_hashfn(ht, tbl, obj_old, params);
3502cad73c4bbf8 Tom Herbert 2015-12-15  1153  	if (hash != rht_head_hashfn(ht, tbl, obj_new, params))
3502cad73c4bbf8 Tom Herbert 2015-12-15  1154  		return -EINVAL;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1155  
8f0db018006a421 NeilBrown   2019-04-02 @1156  	bkt = rht_bucket_var(tbl, hash);
8f0db018006a421 NeilBrown   2019-04-02  1157  	if (!bkt)
8f0db018006a421 NeilBrown   2019-04-02  1158  		return -ENOENT;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1159  
8f0db018006a421 NeilBrown   2019-04-02  1160  	pprev = NULL;
149212f07856b25 NeilBrown   2019-04-02 @1161  	rht_lock(tbl, bkt);
3502cad73c4bbf8 Tom Herbert 2015-12-15  1162  
adc6a3ab192eb40 NeilBrown   2019-04-12 @1163  	rht_for_each_from(he, rht_ptr(bkt, tbl, hash), tbl, hash) {
3502cad73c4bbf8 Tom Herbert 2015-12-15  1164  		if (he != obj_old) {
3502cad73c4bbf8 Tom Herbert 2015-12-15  1165  			pprev = &he->next;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1166  			continue;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1167  		}
3502cad73c4bbf8 Tom Herbert 2015-12-15  1168  
3502cad73c4bbf8 Tom Herbert 2015-12-15  1169  		rcu_assign_pointer(obj_new->next, obj_old->next);
8f0db018006a421 NeilBrown   2019-04-02  1170  		if (pprev) {
3502cad73c4bbf8 Tom Herbert 2015-12-15  1171  			rcu_assign_pointer(*pprev, obj_new);
149212f07856b25 NeilBrown   2019-04-02  1172  			rht_unlock(tbl, bkt);
8f0db018006a421 NeilBrown   2019-04-02  1173  		} else {
149212f07856b25 NeilBrown   2019-04-02  1174  			rht_assign_unlock(tbl, bkt, obj_new);
8f0db018006a421 NeilBrown   2019-04-02  1175  		}
3502cad73c4bbf8 Tom Herbert 2015-12-15  1176  		err = 0;
8f0db018006a421 NeilBrown   2019-04-02  1177  		goto unlocked;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1178  	}
3502cad73c4bbf8 Tom Herbert 2015-12-15  1179  
149212f07856b25 NeilBrown   2019-04-02  1180  	rht_unlock(tbl, bkt);
8f0db018006a421 NeilBrown   2019-04-02  1181  
8f0db018006a421 NeilBrown   2019-04-02  1182  unlocked:
3502cad73c4bbf8 Tom Herbert 2015-12-15  1183  	return err;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1184  }
3502cad73c4bbf8 Tom Herbert 2015-12-15  1185  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28936 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 2/2] rhashtable: Restore RCU marking on rhash_lock_head
Date: Fri, 24 Jul 2020 17:15:41 +0800	[thread overview]
Message-ID: <202007241732.CCLSy0N1%lkp@intel.com> (raw)
In-Reply-To: <20200724011830.GB8580@gondor.apana.org.au>

[-- Attachment #1: Type: text/plain, Size: 16723 bytes --]

Hi Herbert,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v5.8-rc6 next-20200723]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Herbert-Xu/rhashtable-Fix-unprotected-RCU-dereference-in-__rht_ptr/20200724-092031
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git d15be546031cf65a0fc34879beca02fd90fe7ac7
config: i386-randconfig-s002-20200724 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.2-93-g4c6cbe55-dirty
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)

   net/sched/cls_flower.c:211:19: sparse:     got restricted __be16 [usertype] dst
   net/sched/cls_flower.c:211:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:211:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:214:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:214:21: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] dst @@
   net/sched/cls_flower.c:214:21: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:214:21: sparse:     got restricted __be16 [usertype] dst
   net/sched/cls_flower.c:214:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:214:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:214:21: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:214:51: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:215:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:215:21: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] dst @@
   net/sched/cls_flower.c:215:21: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:215:21: sparse:     got restricted __be16 [usertype] dst
   net/sched/cls_flower.c:215:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:215:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:215:21: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:215:51: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:231:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:231:20: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:231:20: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:231:20: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:231:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:231:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:232:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:232:20: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:232:20: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:232:20: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:232:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:232:20: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:233:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:233:19: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:233:19: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:233:19: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:233:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:233:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:234:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:234:19: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:234:19: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:234:19: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:234:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:234:19: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:237:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:237:21: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:237:21: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:237:21: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:237:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:237:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:237:21: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:237:51: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:238:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:238:21: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:238:21: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:238:21: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:238:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:238:21: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:238:21: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:238:51: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:769:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:769:13: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] dst @@
   net/sched/cls_flower.c:769:13: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:769:13: sparse:     got restricted __be16 [usertype] dst
   net/sched/cls_flower.c:769:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:769:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:770:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:770:13: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] dst @@
   net/sched/cls_flower.c:770:13: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:770:13: sparse:     got restricted __be16 [usertype] dst
   net/sched/cls_flower.c:770:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:770:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:769:13: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:770:13: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:777:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:777:13: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:777:13: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:777:13: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:777:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:777:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:778:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:778:13: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned short [usertype] val @@     got restricted __be16 [usertype] src @@
   net/sched/cls_flower.c:778:13: sparse:     expected unsigned short [usertype] val
   net/sched/cls_flower.c:778:13: sparse:     got restricted __be16 [usertype] src
   net/sched/cls_flower.c:778:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:778:13: sparse: sparse: cast from restricted __be16
   net/sched/cls_flower.c:777:13: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:778:13: sparse: sparse: restricted __be16 degrades to integer
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1030:15: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c:1031:16: sparse: sparse: cast to restricted __be32
   net/sched/cls_flower.c: note: in included file:
>> include/linux/rhashtable.h:1156:13: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct rhash_lock_head **bkt @@     got struct rhash_lock_head [noderef] __rcu ** @@
>> include/linux/rhashtable.h:1156:13: sparse:     expected struct rhash_lock_head **bkt
>> include/linux/rhashtable.h:1156:13: sparse:     got struct rhash_lock_head [noderef] __rcu **
>> include/linux/rhashtable.h:1161:23: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct rhash_lock_head [noderef] __rcu **bkt @@     got struct rhash_lock_head **bkt @@
>> include/linux/rhashtable.h:1161:23: sparse:     expected struct rhash_lock_head [noderef] __rcu **bkt
>> include/linux/rhashtable.h:1161:23: sparse:     got struct rhash_lock_head **bkt
>> include/linux/rhashtable.h:1163:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct rhash_lock_head [noderef] __rcu *const *bkt @@     got struct rhash_lock_head **bkt @@
>> include/linux/rhashtable.h:1163:9: sparse:     expected struct rhash_lock_head [noderef] __rcu *const *bkt
   include/linux/rhashtable.h:1163:9: sparse:     got struct rhash_lock_head **bkt
   include/linux/rhashtable.h:1172:41: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct rhash_lock_head [noderef] __rcu **bkt @@     got struct rhash_lock_head **bkt @@
   include/linux/rhashtable.h:1172:41: sparse:     expected struct rhash_lock_head [noderef] __rcu **bkt
   include/linux/rhashtable.h:1172:41: sparse:     got struct rhash_lock_head **bkt
   include/linux/rhashtable.h:1174:48: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct rhash_lock_head [noderef] __rcu **bkt @@     got struct rhash_lock_head **bkt @@
   include/linux/rhashtable.h:1174:48: sparse:     expected struct rhash_lock_head [noderef] __rcu **bkt
   include/linux/rhashtable.h:1174:48: sparse:     got struct rhash_lock_head **bkt
   include/linux/rhashtable.h:1180:25: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct rhash_lock_head [noderef] __rcu **bkt @@     got struct rhash_lock_head **bkt @@
   include/linux/rhashtable.h:1180:25: sparse:     expected struct rhash_lock_head [noderef] __rcu **bkt
   include/linux/rhashtable.h:1180:25: sparse:     got struct rhash_lock_head **bkt

vim +1156 include/linux/rhashtable.h

02fd97c3d4a8a14 Herbert Xu  2015-03-20  1136  
3502cad73c4bbf8 Tom Herbert 2015-12-15  1137  /* Internal function, please use rhashtable_replace_fast() instead */
3502cad73c4bbf8 Tom Herbert 2015-12-15  1138  static inline int __rhashtable_replace_fast(
3502cad73c4bbf8 Tom Herbert 2015-12-15  1139  	struct rhashtable *ht, struct bucket_table *tbl,
3502cad73c4bbf8 Tom Herbert 2015-12-15  1140  	struct rhash_head *obj_old, struct rhash_head *obj_new,
3502cad73c4bbf8 Tom Herbert 2015-12-15  1141  	const struct rhashtable_params params)
3502cad73c4bbf8 Tom Herbert 2015-12-15  1142  {
ba6306e3f648a85 Herbert Xu  2019-05-16  1143  	struct rhash_lock_head **bkt;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1144  	struct rhash_head __rcu **pprev;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1145  	struct rhash_head *he;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1146  	unsigned int hash;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1147  	int err = -ENOENT;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1148  
3502cad73c4bbf8 Tom Herbert 2015-12-15  1149  	/* Minimally, the old and new objects must have same hash
3502cad73c4bbf8 Tom Herbert 2015-12-15  1150  	 * (which should mean identifiers are the same).
3502cad73c4bbf8 Tom Herbert 2015-12-15  1151  	 */
3502cad73c4bbf8 Tom Herbert 2015-12-15  1152  	hash = rht_head_hashfn(ht, tbl, obj_old, params);
3502cad73c4bbf8 Tom Herbert 2015-12-15  1153  	if (hash != rht_head_hashfn(ht, tbl, obj_new, params))
3502cad73c4bbf8 Tom Herbert 2015-12-15  1154  		return -EINVAL;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1155  
8f0db018006a421 NeilBrown   2019-04-02 @1156  	bkt = rht_bucket_var(tbl, hash);
8f0db018006a421 NeilBrown   2019-04-02  1157  	if (!bkt)
8f0db018006a421 NeilBrown   2019-04-02  1158  		return -ENOENT;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1159  
8f0db018006a421 NeilBrown   2019-04-02  1160  	pprev = NULL;
149212f07856b25 NeilBrown   2019-04-02 @1161  	rht_lock(tbl, bkt);
3502cad73c4bbf8 Tom Herbert 2015-12-15  1162  
adc6a3ab192eb40 NeilBrown   2019-04-12 @1163  	rht_for_each_from(he, rht_ptr(bkt, tbl, hash), tbl, hash) {
3502cad73c4bbf8 Tom Herbert 2015-12-15  1164  		if (he != obj_old) {
3502cad73c4bbf8 Tom Herbert 2015-12-15  1165  			pprev = &he->next;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1166  			continue;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1167  		}
3502cad73c4bbf8 Tom Herbert 2015-12-15  1168  
3502cad73c4bbf8 Tom Herbert 2015-12-15  1169  		rcu_assign_pointer(obj_new->next, obj_old->next);
8f0db018006a421 NeilBrown   2019-04-02  1170  		if (pprev) {
3502cad73c4bbf8 Tom Herbert 2015-12-15  1171  			rcu_assign_pointer(*pprev, obj_new);
149212f07856b25 NeilBrown   2019-04-02  1172  			rht_unlock(tbl, bkt);
8f0db018006a421 NeilBrown   2019-04-02  1173  		} else {
149212f07856b25 NeilBrown   2019-04-02  1174  			rht_assign_unlock(tbl, bkt, obj_new);
8f0db018006a421 NeilBrown   2019-04-02  1175  		}
3502cad73c4bbf8 Tom Herbert 2015-12-15  1176  		err = 0;
8f0db018006a421 NeilBrown   2019-04-02  1177  		goto unlocked;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1178  	}
3502cad73c4bbf8 Tom Herbert 2015-12-15  1179  
149212f07856b25 NeilBrown   2019-04-02  1180  	rht_unlock(tbl, bkt);
8f0db018006a421 NeilBrown   2019-04-02  1181  
8f0db018006a421 NeilBrown   2019-04-02  1182  unlocked:
3502cad73c4bbf8 Tom Herbert 2015-12-15  1183  	return err;
3502cad73c4bbf8 Tom Herbert 2015-12-15  1184  }
3502cad73c4bbf8 Tom Herbert 2015-12-15  1185  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 28936 bytes --]

  reply	other threads:[~2020-07-24  9:29 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-24  1:08 [PATCH 0/2] rhashtable: Fix unprotected RCU dereference in __rht_ptr Herbert Xu
2020-07-24  1:13 ` [PATCH 1/2] " Herbert Xu
2020-07-24  1:18 ` [PATCH 2/2] rhashtable: Restore RCU marking on rhash_lock_head Herbert Xu
2020-07-24  9:15   ` kernel test robot [this message]
2020-07-24  9:15     ` kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202007241732.CCLSy0N1%lkp@intel.com \
    --to=lkp@intel.com \
    --cc=eric.dumazet@gmail.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=kbuild-all@lists.01.org \
    --cc=netdev@vger.kernel.org \
    --cc=pfonseca@purdue.edu \
    --cc=sishuai@purdue.edu \
    --cc=tgraf@suug.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.