:::::: :::::: Manual check reason: "low confidence bisect report" :::::: Manual check reason: "low confidence static check first_new_problem: net/netfilter/ipset/ip_set_hash_gen.h:894:26: warning: dereference of NULL '*h_201->table.bucket[<unknown>]' [CWE-476] [-Wanalyzer-null-dereference]" ::::::
CC: [email protected] BCC: [email protected] CC: [email protected] TO: Kees Cook <[email protected]> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 4b35035bcf80ddb47c0112c4fbd84a63a2836a18 commit: f68f2ff91512c199ec24883001245912afc17873 fortify: Detect struct member overflows in memcpy() at compile-time date: 4 months ago :::::: branch date: 2 days ago :::::: commit date: 4 months ago config: arm-randconfig-c002-20220617 (https://download.01.org/0day-ci/archive/20220619/[email protected]/config) compiler: arm-linux-gnueabi-gcc (GCC) 11.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f68f2ff91512c199ec24883001245912afc17873 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout f68f2ff91512c199ec24883001245912afc17873 # save the config file ARCH=arm KBUILD_USERCFLAGS='-fanalyzer -Wno-error' If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> gcc-analyzer warnings: (new ones prefixed by >>) In file included from net/netfilter/ipset/ip_set_hash_netportnet.c:433: net/netfilter/ipset/ip_set_hash_gen.h: In function 'hash_netportnet6_add': >> net/netfilter/ipset/ip_set_hash_gen.h:894:26: warning: dereference of NULL >> '*h_201->table.bucket[<unknown>]' [CWE-476] [-Wanalyzer-null-dereference] 894 | for (i = 0; i < n->pos; i++) { | ~^~~~~ 'hash_netportnet6_add': event 1 | |net/netfilter/ipset/ip_set_hash_netportnet.c:430:25: | 430 | #define MTYPE hash_netportnet6 | | ^~~~~~~~~~~~~~~~ | | | | | (1) entry to 'hash_netportnet6_add' include/linux/netfilter/ipset/ip_set.h:526:41: note: in definition of macro 'IPSET_CONCAT' | 526 | #define IPSET_CONCAT(a, b) a##b | | ^ net/netfilter/ipset/ip_set_hash_gen.h:267:33: note: in expansion of macro 'IPSET_TOKEN' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~~~~~~~ net/netfilter/ipset/ip_set_hash_gen.h:267:45: note: in expansion of macro 'MTYPE' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~ net/netfilter/ipset/ip_set_hash_gen.h:841:1: note: in expansion of macro 'mtype_add' | 841 | mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, | | ^~~~~~~~~ | 'hash_netportnet6_add': event 2 | | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling 'jhash2' from 'hash_netportnet6_add' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | +--> 'jhash2': events 3-5 | |include/linux/jhash.h:117:19: | 117 | static inline u32 jhash2(const u32 *k, u32 length, u32 initval) | | ^~~~~~ | | | | | (3) entry to 'jhash2' |...... | 125 | while (length > 3) { | | ~~~~~~~~~~ | | | | | (4) following 'true' branch (when 'length > 3')... | 126 | a += k[0]; | | ~~~~ | | | | | (5) ...to here | <------+ | 'hash_netportnet6_add': event 6 | |net/netfilter/ipset/ip_set_hash_gen.h:296:9: | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) returning to 'hash_netportnet6_add' from 'jhash2' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | 'hash_netportnet6_add': event 7 | | 861 | if (elements >= maxelem) { | | ^ | | | | | (7) following 'true' branch (when 'elements >= maxelem')... | 'hash_netportnet6_add': event 8 | |include/linux/netfilter/ipset/ip_set.h:64:37: | 64 | #define SET_WITH_TIMEOUT(s) ((s)->extensions & IPSET_EXT_TIMEOUT) | | ~~~^~~~~~~~~~~~ | | | | | (8) ...to here net/netfilter/ipset/ip_set_hash_gen.h:863:21: note: in expansion of macro 'SET_WITH_TIMEOUT' | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^~~~~~~~~~~~~~~~ | 'hash_netportnet6_add': event 9 | | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^ | | | | | (9) following 'true' branch... | 'hash_netportnet6_add': event 10 | |include/linux/instruction_pointer.h:6:41: | 6 | #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) | | ^~~~~~ | | | | | (10) ...to here include/linux/bottom_half.h:33:30: note: in expansion of macro '_THIS_IP_' | 33 | __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); | | ^~~~~~~~~ | 'hash_netportnet6_add': event 11 | -- In file included from net/netfilter/ipset/ip_set_hash_ipmac.c:194: include/linux/jhash.h: In function 'hash_ipmac6_add': >> net/netfilter/ipset/ip_set_hash_gen.h:894:26: warning: dereference of NULL >> '*h_187->table.bucket[<unknown>]' [CWE-476] [-Wanalyzer-null-dereference] 894 | for (i = 0; i < n->pos; i++) { | ~^~~~~ 'hash_ipmac6_add': event 1 | |net/netfilter/ipset/ip_set_hash_ipmac.c:189:25: | 189 | #define MTYPE hash_ipmac6 | | ^~~~~~~~~~~ | | | | | (1) entry to 'hash_ipmac6_add' include/linux/netfilter/ipset/ip_set.h:526:41: note: in definition of macro 'IPSET_CONCAT' | 526 | #define IPSET_CONCAT(a, b) a##b | | ^ net/netfilter/ipset/ip_set_hash_gen.h:267:33: note: in expansion of macro 'IPSET_TOKEN' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~~~~~~~ net/netfilter/ipset/ip_set_hash_gen.h:267:45: note: in expansion of macro 'MTYPE' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~ net/netfilter/ipset/ip_set_hash_gen.h:841:1: note: in expansion of macro 'mtype_add' | 841 | mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, | | ^~~~~~~~~ | 'hash_ipmac6_add': event 2 | | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling 'jhash2' from 'hash_ipmac6_add' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | +--> 'jhash2': events 3-5 | |include/linux/jhash.h:117:19: | 117 | static inline u32 jhash2(const u32 *k, u32 length, u32 initval) | | ^~~~~~ | | | | | (3) entry to 'jhash2' |...... | 125 | while (length > 3) { | | ~~~~~~~~~~ | | | | | (4) following 'true' branch (when 'length > 3')... | 126 | a += k[0]; | | ~~~~ | | | | | (5) ...to here | <------+ | 'hash_ipmac6_add': event 6 | |net/netfilter/ipset/ip_set_hash_gen.h:296:9: | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) returning to 'hash_ipmac6_add' from 'jhash2' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | 'hash_ipmac6_add': event 7 | | 861 | if (elements >= maxelem) { | | ^ | | | | | (7) following 'true' branch (when 'elements >= maxelem')... | 'hash_ipmac6_add': event 8 | |include/linux/netfilter/ipset/ip_set.h:64:37: | 64 | #define SET_WITH_TIMEOUT(s) ((s)->extensions & IPSET_EXT_TIMEOUT) | | ~~~^~~~~~~~~~~~ | | | | | (8) ...to here net/netfilter/ipset/ip_set_hash_gen.h:863:21: note: in expansion of macro 'SET_WITH_TIMEOUT' | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^~~~~~~~~~~~~~~~ | 'hash_ipmac6_add': event 9 | | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^ | | | | | (9) following 'true' branch... | 'hash_ipmac6_add': event 10 | |include/linux/instruction_pointer.h:6:41: | 6 | #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) | | ^~~~~~ | | | | | (10) ...to here include/linux/bottom_half.h:33:30: note: in expansion of macro '_THIS_IP_' | 33 | __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); | | ^~~~~~~~~ | 'hash_ipmac6_add': event 11 | -- In file included from net/netfilter/ipset/ip_set_hash_ipmark.c:211: include/linux/jhash.h: In function 'hash_ipmark6_add': >> net/netfilter/ipset/ip_set_hash_gen.h:894:26: warning: dereference of NULL >> '*h_187->table.bucket[<unknown>]' [CWE-476] [-Wanalyzer-null-dereference] 894 | for (i = 0; i < n->pos; i++) { | ~^~~~~ 'hash_ipmark6_add': event 1 | |net/netfilter/ipset/ip_set_hash_ipmark.c:208:25: | 208 | #define MTYPE hash_ipmark6 | | ^~~~~~~~~~~~ | | | | | (1) entry to 'hash_ipmark6_add' include/linux/netfilter/ipset/ip_set.h:526:41: note: in definition of macro 'IPSET_CONCAT' | 526 | #define IPSET_CONCAT(a, b) a##b | | ^ net/netfilter/ipset/ip_set_hash_gen.h:267:33: note: in expansion of macro 'IPSET_TOKEN' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~~~~~~~ net/netfilter/ipset/ip_set_hash_gen.h:267:45: note: in expansion of macro 'MTYPE' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~ net/netfilter/ipset/ip_set_hash_gen.h:841:1: note: in expansion of macro 'mtype_add' | 841 | mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, | | ^~~~~~~~~ | 'hash_ipmark6_add': event 2 | | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling 'jhash2' from 'hash_ipmark6_add' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | +--> 'jhash2': events 3-5 | |include/linux/jhash.h:117:19: | 117 | static inline u32 jhash2(const u32 *k, u32 length, u32 initval) | | ^~~~~~ | | | | | (3) entry to 'jhash2' |...... | 125 | while (length > 3) { | | ~~~~~~~~~~ | | | | | (4) following 'true' branch (when 'length > 3')... | 126 | a += k[0]; | | ~~~~ | | | | | (5) ...to here | <------+ | 'hash_ipmark6_add': event 6 | |net/netfilter/ipset/ip_set_hash_gen.h:296:9: | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) returning to 'hash_ipmark6_add' from 'jhash2' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | 'hash_ipmark6_add': event 7 | | 861 | if (elements >= maxelem) { | | ^ | | | | | (7) following 'true' branch (when 'elements >= maxelem')... | 'hash_ipmark6_add': event 8 | |include/linux/netfilter/ipset/ip_set.h:64:37: | 64 | #define SET_WITH_TIMEOUT(s) ((s)->extensions & IPSET_EXT_TIMEOUT) | | ~~~^~~~~~~~~~~~ | | | | | (8) ...to here net/netfilter/ipset/ip_set_hash_gen.h:863:21: note: in expansion of macro 'SET_WITH_TIMEOUT' | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^~~~~~~~~~~~~~~~ | 'hash_ipmark6_add': event 9 | | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^ | | | | | (9) following 'true' branch... | 'hash_ipmark6_add': event 10 | |include/linux/instruction_pointer.h:6:41: | 6 | #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) | | ^~~~~~ | | | | | (10) ...to here include/linux/bottom_half.h:33:30: note: in expansion of macro '_THIS_IP_' | 33 | __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); | | ^~~~~~~~~ | 'hash_ipmark6_add': event 11 | -- In file included from net/netfilter/ipset/ip_set_hash_ipport.c:246: include/linux/jhash.h: In function 'hash_ipport6_add': >> net/netfilter/ipset/ip_set_hash_gen.h:894:26: warning: dereference of NULL >> '*h_187->table.bucket[<unknown>]' [CWE-476] [-Wanalyzer-null-dereference] 894 | for (i = 0; i < n->pos; i++) { | ~^~~~~ 'hash_ipport6_add': event 1 | |net/netfilter/ipset/ip_set_hash_ipport.c:243:25: | 243 | #define MTYPE hash_ipport6 | | ^~~~~~~~~~~~ | | | | | (1) entry to 'hash_ipport6_add' include/linux/netfilter/ipset/ip_set.h:526:41: note: in definition of macro 'IPSET_CONCAT' | 526 | #define IPSET_CONCAT(a, b) a##b | | ^ net/netfilter/ipset/ip_set_hash_gen.h:267:33: note: in expansion of macro 'IPSET_TOKEN' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~~~~~~~ net/netfilter/ipset/ip_set_hash_gen.h:267:45: note: in expansion of macro 'MTYPE' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~ net/netfilter/ipset/ip_set_hash_gen.h:841:1: note: in expansion of macro 'mtype_add' | 841 | mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, | | ^~~~~~~~~ | 'hash_ipport6_add': event 2 | | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling 'jhash2' from 'hash_ipport6_add' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | +--> 'jhash2': events 3-5 | |include/linux/jhash.h:117:19: | 117 | static inline u32 jhash2(const u32 *k, u32 length, u32 initval) | | ^~~~~~ | | | | | (3) entry to 'jhash2' |...... | 125 | while (length > 3) { | | ~~~~~~~~~~ | | | | | (4) following 'true' branch (when 'length > 3')... | 126 | a += k[0]; | | ~~~~ | | | | | (5) ...to here | <------+ | 'hash_ipport6_add': event 6 | |net/netfilter/ipset/ip_set_hash_gen.h:296:9: | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) returning to 'hash_ipport6_add' from 'jhash2' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | 'hash_ipport6_add': event 7 | | 861 | if (elements >= maxelem) { | | ^ | | | | | (7) following 'true' branch (when 'elements >= maxelem')... | 'hash_ipport6_add': event 8 | |include/linux/netfilter/ipset/ip_set.h:64:37: | 64 | #define SET_WITH_TIMEOUT(s) ((s)->extensions & IPSET_EXT_TIMEOUT) | | ~~~^~~~~~~~~~~~ | | | | | (8) ...to here net/netfilter/ipset/ip_set_hash_gen.h:863:21: note: in expansion of macro 'SET_WITH_TIMEOUT' | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^~~~~~~~~~~~~~~~ | 'hash_ipport6_add': event 9 | | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^ | | | | | (9) following 'true' branch... | 'hash_ipport6_add': event 10 | |include/linux/instruction_pointer.h:6:41: | 6 | #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) | | ^~~~~~ | | | | | (10) ...to here include/linux/bottom_half.h:33:30: note: in expansion of macro '_THIS_IP_' | 33 | __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); | | ^~~~~~~~~ | 'hash_ipport6_add': event 11 | -- In file included from net/netfilter/ipset/ip_set_hash_ipportip.c:256: include/linux/jhash.h: In function 'hash_ipportip6_add': >> net/netfilter/ipset/ip_set_hash_gen.h:894:26: warning: dereference of NULL >> '*h_187->table.bucket[<unknown>]' [CWE-476] [-Wanalyzer-null-dereference] 894 | for (i = 0; i < n->pos; i++) { | ~^~~~~ 'hash_ipportip6_add': event 1 | |net/netfilter/ipset/ip_set_hash_ipportip.c:253:25: | 253 | #define MTYPE hash_ipportip6 | | ^~~~~~~~~~~~~~ | | | | | (1) entry to 'hash_ipportip6_add' include/linux/netfilter/ipset/ip_set.h:526:41: note: in definition of macro 'IPSET_CONCAT' | 526 | #define IPSET_CONCAT(a, b) a##b | | ^ net/netfilter/ipset/ip_set_hash_gen.h:267:33: note: in expansion of macro 'IPSET_TOKEN' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~~~~~~~ net/netfilter/ipset/ip_set_hash_gen.h:267:45: note: in expansion of macro 'MTYPE' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~ net/netfilter/ipset/ip_set_hash_gen.h:841:1: note: in expansion of macro 'mtype_add' | 841 | mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, | | ^~~~~~~~~ | 'hash_ipportip6_add': event 2 | | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling 'jhash2' from 'hash_ipportip6_add' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | +--> 'jhash2': events 3-5 | |include/linux/jhash.h:117:19: | 117 | static inline u32 jhash2(const u32 *k, u32 length, u32 initval) | | ^~~~~~ | | | | | (3) entry to 'jhash2' |...... | 125 | while (length > 3) { | | ~~~~~~~~~~ | | | | | (4) following 'true' branch (when 'length > 3')... | 126 | a += k[0]; | | ~~~~ | | | | | (5) ...to here | <------+ | 'hash_ipportip6_add': event 6 | |net/netfilter/ipset/ip_set_hash_gen.h:296:9: | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) returning to 'hash_ipportip6_add' from 'jhash2' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | 'hash_ipportip6_add': event 7 | | 861 | if (elements >= maxelem) { | | ^ | | | | | (7) following 'true' branch (when 'elements >= maxelem')... | 'hash_ipportip6_add': event 8 | |include/linux/netfilter/ipset/ip_set.h:64:37: | 64 | #define SET_WITH_TIMEOUT(s) ((s)->extensions & IPSET_EXT_TIMEOUT) | | ~~~^~~~~~~~~~~~ | | | | | (8) ...to here net/netfilter/ipset/ip_set_hash_gen.h:863:21: note: in expansion of macro 'SET_WITH_TIMEOUT' | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^~~~~~~~~~~~~~~~ | 'hash_ipportip6_add': event 9 | | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^ | | | | | (9) following 'true' branch... | 'hash_ipportip6_add': event 10 | |include/linux/instruction_pointer.h:6:41: | 6 | #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) | | ^~~~~~ | | | | | (10) ...to here include/linux/bottom_half.h:33:30: note: in expansion of macro '_THIS_IP_' | 33 | __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); | | ^~~~~~~~~ | 'hash_ipportip6_add': event 11 | -- In file included from net/netfilter/ipset/ip_set_hash_ipportnet.c:385: net/netfilter/ipset/ip_set_hash_gen.h: In function 'hash_ipportnet6_add': >> net/netfilter/ipset/ip_set_hash_gen.h:894:26: warning: dereference of NULL >> '*h_199->table.bucket[<unknown>]' [CWE-476] [-Wanalyzer-null-dereference] 894 | for (i = 0; i < n->pos; i++) { | ~^~~~~ 'hash_ipportnet6_add': event 1 | |net/netfilter/ipset/ip_set_hash_ipportnet.c:382:25: | 382 | #define MTYPE hash_ipportnet6 | | ^~~~~~~~~~~~~~~ | | | | | (1) entry to 'hash_ipportnet6_add' include/linux/netfilter/ipset/ip_set.h:526:41: note: in definition of macro 'IPSET_CONCAT' | 526 | #define IPSET_CONCAT(a, b) a##b | | ^ net/netfilter/ipset/ip_set_hash_gen.h:267:33: note: in expansion of macro 'IPSET_TOKEN' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~~~~~~~ net/netfilter/ipset/ip_set_hash_gen.h:267:45: note: in expansion of macro 'MTYPE' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~ net/netfilter/ipset/ip_set_hash_gen.h:841:1: note: in expansion of macro 'mtype_add' | 841 | mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, | | ^~~~~~~~~ | 'hash_ipportnet6_add': event 2 | | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling 'jhash2' from 'hash_ipportnet6_add' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | +--> 'jhash2': events 3-5 | |include/linux/jhash.h:117:19: | 117 | static inline u32 jhash2(const u32 *k, u32 length, u32 initval) | | ^~~~~~ | | | | | (3) entry to 'jhash2' |...... | 125 | while (length > 3) { | | ~~~~~~~~~~ | | | | | (4) following 'true' branch (when 'length > 3')... | 126 | a += k[0]; | | ~~~~ | | | | | (5) ...to here | <------+ | 'hash_ipportnet6_add': event 6 | |net/netfilter/ipset/ip_set_hash_gen.h:296:9: | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) returning to 'hash_ipportnet6_add' from 'jhash2' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | 'hash_ipportnet6_add': event 7 | | 861 | if (elements >= maxelem) { | | ^ | | | | | (7) following 'true' branch (when 'elements >= maxelem')... | 'hash_ipportnet6_add': event 8 | |include/linux/netfilter/ipset/ip_set.h:64:37: | 64 | #define SET_WITH_TIMEOUT(s) ((s)->extensions & IPSET_EXT_TIMEOUT) | | ~~~^~~~~~~~~~~~ | | | | | (8) ...to here net/netfilter/ipset/ip_set_hash_gen.h:863:21: note: in expansion of macro 'SET_WITH_TIMEOUT' | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^~~~~~~~~~~~~~~~ | 'hash_ipportnet6_add': event 9 | | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^ | | | | | (9) following 'true' branch... | 'hash_ipportnet6_add': event 10 | |include/linux/instruction_pointer.h:6:41: | 6 | #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) | | ^~~~~~ | | | | | (10) ...to here include/linux/bottom_half.h:33:30: note: in expansion of macro '_THIS_IP_' | 33 | __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); | | ^~~~~~~~~ | 'hash_ipportnet6_add': event 11 | -- In file included from net/netfilter/ipset/ip_set_hash_netiface.c:378: net/netfilter/ipset/ip_set_hash_gen.h: In function 'hash_netiface6_add': >> net/netfilter/ipset/ip_set_hash_gen.h:894:26: warning: dereference of NULL >> '*h_202->table.bucket[<unknown>]' [CWE-476] [-Wanalyzer-null-dereference] 894 | for (i = 0; i < n->pos; i++) { | ~^~~~~ 'hash_netiface6_add': event 1 | |net/netfilter/ipset/ip_set_hash_netiface.c:374:25: | 374 | #define MTYPE hash_netiface6 | | ^~~~~~~~~~~~~~ | | | | | (1) entry to 'hash_netiface6_add' include/linux/netfilter/ipset/ip_set.h:526:41: note: in definition of macro 'IPSET_CONCAT' | 526 | #define IPSET_CONCAT(a, b) a##b | | ^ net/netfilter/ipset/ip_set_hash_gen.h:267:33: note: in expansion of macro 'IPSET_TOKEN' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~~~~~~~ net/netfilter/ipset/ip_set_hash_gen.h:267:45: note: in expansion of macro 'MTYPE' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~ net/netfilter/ipset/ip_set_hash_gen.h:841:1: note: in expansion of macro 'mtype_add' | 841 | mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, | | ^~~~~~~~~ | 'hash_netiface6_add': event 2 | | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling 'jhash2' from 'hash_netiface6_add' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | +--> 'jhash2': events 3-5 | |include/linux/jhash.h:117:19: | 117 | static inline u32 jhash2(const u32 *k, u32 length, u32 initval) | | ^~~~~~ | | | | | (3) entry to 'jhash2' |...... | 125 | while (length > 3) { | | ~~~~~~~~~~ | | | | | (4) following 'true' branch (when 'length > 3')... | 126 | a += k[0]; | | ~~~~ | | | | | (5) ...to here | <------+ | 'hash_netiface6_add': event 6 | |net/netfilter/ipset/ip_set_hash_gen.h:296:9: | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) returning to 'hash_netiface6_add' from 'jhash2' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | 'hash_netiface6_add': event 7 | | 861 | if (elements >= maxelem) { | | ^ | | | | | (7) following 'true' branch (when 'elements >= maxelem')... | 'hash_netiface6_add': event 8 | |include/linux/netfilter/ipset/ip_set.h:64:37: | 64 | #define SET_WITH_TIMEOUT(s) ((s)->extensions & IPSET_EXT_TIMEOUT) | | ~~~^~~~~~~~~~~~ | | | | | (8) ...to here net/netfilter/ipset/ip_set_hash_gen.h:863:21: note: in expansion of macro 'SET_WITH_TIMEOUT' | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^~~~~~~~~~~~~~~~ | 'hash_netiface6_add': event 9 | | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^ | | | | | (9) following 'true' branch... | 'hash_netiface6_add': event 10 | |include/linux/instruction_pointer.h:6:41: | 6 | #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) | | ^~~~~~ | | | | | (10) ...to here include/linux/bottom_half.h:33:30: note: in expansion of macro '_THIS_IP_' | 33 | __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); | | ^~~~~~~~~ | 'hash_netiface6_add': event 11 | -- In file included from net/netfilter/ipset/ip_set_hash_netnet.c:378: net/netfilter/ipset/ip_set_hash_gen.h: In function 'hash_netnet6_add': >> net/netfilter/ipset/ip_set_hash_gen.h:894:26: warning: dereference of NULL >> '*h_201->table.bucket[<unknown>]' [CWE-476] [-Wanalyzer-null-dereference] 894 | for (i = 0; i < n->pos; i++) { | ~^~~~~ 'hash_netnet6_add': event 1 | |net/netfilter/ipset/ip_set_hash_netnet.c:375:25: | 375 | #define MTYPE hash_netnet6 | | ^~~~~~~~~~~~ | | | | | (1) entry to 'hash_netnet6_add' include/linux/netfilter/ipset/ip_set.h:526:41: note: in definition of macro 'IPSET_CONCAT' | 526 | #define IPSET_CONCAT(a, b) a##b | | ^ net/netfilter/ipset/ip_set_hash_gen.h:267:33: note: in expansion of macro 'IPSET_TOKEN' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~~~~~~~ net/netfilter/ipset/ip_set_hash_gen.h:267:45: note: in expansion of macro 'MTYPE' | 267 | #define mtype_add IPSET_TOKEN(MTYPE, _add) | | ^~~~~ net/netfilter/ipset/ip_set_hash_gen.h:841:1: note: in expansion of macro 'mtype_add' | 841 | mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, | | ^~~~~~~~~ | 'hash_netnet6_add': event 2 | | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling 'jhash2' from 'hash_netnet6_add' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | +--> 'jhash2': events 3-5 | |include/linux/jhash.h:117:19: | 117 | static inline u32 jhash2(const u32 *k, u32 length, u32 initval) | | ^~~~~~ | | | | | (3) entry to 'jhash2' |...... | 125 | while (length > 3) { | | ~~~~~~~~~~ | | | | | (4) following 'true' branch (when 'length > 3')... | 126 | a += k[0]; | | ~~~~ | | | | | (5) ...to here | <------+ | 'hash_netnet6_add': event 6 | |net/netfilter/ipset/ip_set_hash_gen.h:296:9: | 296 | jhash2(__k, __l, initval) & jhash_mask(htable_bits); \ | | ^~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) returning to 'hash_netnet6_add' from 'jhash2' net/netfilter/ipset/ip_set_hash_gen.h:856:15: note: in expansion of macro 'HKEY' | 856 | key = HKEY(value, h->initval, t->htable_bits); | | ^~~~ | 'hash_netnet6_add': event 7 | | 861 | if (elements >= maxelem) { | | ^ | | | | | (7) following 'true' branch (when 'elements >= maxelem')... | 'hash_netnet6_add': event 8 | |include/linux/netfilter/ipset/ip_set.h:64:37: | 64 | #define SET_WITH_TIMEOUT(s) ((s)->extensions & IPSET_EXT_TIMEOUT) | | ~~~^~~~~~~~~~~~ | | | | | (8) ...to here net/netfilter/ipset/ip_set_hash_gen.h:863:21: note: in expansion of macro 'SET_WITH_TIMEOUT' | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^~~~~~~~~~~~~~~~ | 'hash_netnet6_add': event 9 | | 863 | if (SET_WITH_TIMEOUT(set)) { | | ^ | | | | | (9) following 'true' branch... | 'hash_netnet6_add': event 10 | |include/linux/instruction_pointer.h:6:41: | 6 | #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) | | ^~~~~~ | | | | | (10) ...to here include/linux/bottom_half.h:33:30: note: in expansion of macro '_THIS_IP_' | 33 | __local_bh_enable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); | | ^~~~~~~~~ | 'hash_netnet6_add': event 11 | vim +894 net/netfilter/ipset/ip_set_hash_gen.h f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 836 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 837 /* Add an element to a hash and update the internal counters when succeeded, ca0f6a5cd99e0c Jozsef Kadlecsik 2015-06-13 838 * otherwise report the proper error code. ca0f6a5cd99e0c Jozsef Kadlecsik 2015-06-13 839 */ 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 840 static int 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 841 mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 842 struct ip_set_ext *mext, u32 flags) 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 843 { 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 844 struct htype *h = set->data; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 845 struct htable *t; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 846 const struct mtype_elem *d = value; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 847 struct mtype_elem *data; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 848 struct hbucket *n, *old = ERR_PTR(-ENOENT); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 849 int i, j = -1, ret; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 850 bool flag_exist = flags & IPSET_FLAG_EXIST; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 851 bool deleted = false, forceadd = false, reuse = false; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 852 u32 r, key, multi = 0, elements, maxelem; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 853 f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 854 rcu_read_lock_bh(); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 855 t = rcu_dereference_bh(h->table); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 856 key = HKEY(value, h->initval, t->htable_bits); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 857 r = ahash_region(key, t->htable_bits); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 858 atomic_inc(&t->uref); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 859 elements = t->hregion[r].elements; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 860 maxelem = t->maxelem; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 861 if (elements >= maxelem) { f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 862 u32 e; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 863 if (SET_WITH_TIMEOUT(set)) { f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 864 rcu_read_unlock_bh(); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 865 mtype_gc_do(set, h, t, r); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 866 rcu_read_lock_bh(); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 867 } f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 868 maxelem = h->maxelem; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 869 elements = 0; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 870 for (e = 0; e < ahash_numof_locks(t->htable_bits); e++) f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 871 elements += t->hregion[e].elements; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 872 if (elements >= maxelem && SET_WITH_FORCEADD(set)) 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 873 forceadd = true; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 874 } f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 875 rcu_read_unlock_bh(); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 876 f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 877 spin_lock_bh(&t->hregion[r].lock); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 878 n = rcu_dereference_bh(hbucket(t, key)); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 879 if (!n) { f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 880 if (forceadd || elements >= maxelem) 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 881 goto set_full; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 882 old = NULL; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 883 n = kzalloc(sizeof(*n) + AHASH_INIT_SIZE * set->dsize, 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 884 GFP_ATOMIC); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 885 if (!n) { f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 886 ret = -ENOMEM; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 887 goto unlock; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 888 } 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 889 n->size = AHASH_INIT_SIZE; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 890 t->hregion[r].ext_size += f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 891 ext_size(AHASH_INIT_SIZE, set->dsize); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 892 goto copy_elem; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 893 } 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 @894 for (i = 0; i < n->pos; i++) { 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 895 if (!test_bit(i, n->used)) { 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 896 /* Reuse first deleted entry */ 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 897 if (j == -1) { 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 898 deleted = reuse = true; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 899 j = i; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 900 } 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 901 continue; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 902 } ca134ce86451f3 Jozsef Kadlecsik 2013-09-07 903 data = ahash_data(n, i, set->dsize); 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 904 if (mtype_data_equal(data, d, &multi)) { f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 905 if (flag_exist || SET_ELEM_EXPIRED(set, data)) { 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 906 /* Just the extensions could be overwritten */ 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 907 j = i; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 908 goto overwrite_extensions; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 909 } f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 910 ret = -IPSET_ERR_EXIST; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 911 goto unlock; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 912 } 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 913 /* Reuse first timed out entry */ f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 914 if (SET_ELEM_EXPIRED(set, data) && j == -1) { 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 915 j = i; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 916 reuse = true; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 917 } 86ac79c7bea154 Jozsef Kadlecsik 2014-11-30 918 } 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 919 if (reuse || forceadd) { 8af1c6fbd92398 Jozsef Kadlecsik 2020-02-22 920 if (j == -1) 8af1c6fbd92398 Jozsef Kadlecsik 2020-02-22 921 j = 0; ca134ce86451f3 Jozsef Kadlecsik 2013-09-07 922 data = ahash_data(n, j, set->dsize); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 923 if (!deleted) { 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 924 #ifdef IP_SET_HASH_WITH_NETS 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 925 for (i = 0; i < IPSET_NET_COUNT; i++) f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 926 mtype_del_cidr(set, h, 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 927 NCIDR_PUT(DCIDR_GET(data->cidr, i)), cee8b97b6c13b1 Jozsef Kadlecsik 2016-11-10 928 i); 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 929 #endif 40cd63bf33b21e Jozsef Kadlecsik 2013-09-09 930 ip_set_ext_destroy(set, data); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 931 t->hregion[r].elements--; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 932 } 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 933 goto copy_data; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 934 } f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 935 if (elements >= maxelem) 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 936 goto set_full; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 937 /* Create a new slot */ 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 938 if (n->pos >= n->size) { ccf0a4b7fc6885 Jozsef Kadlecsik 2020-10-29 939 TUNE_BUCKETSIZE(h, multi); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 940 if (n->size >= AHASH_MAX(h)) { 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 941 /* Trigger rehashing */ 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 942 mtype_data_next(&h->next, d); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 943 ret = -EAGAIN; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 944 goto resize; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 945 } 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 946 old = n; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 947 n = kzalloc(sizeof(*n) + 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 948 (old->size + AHASH_INIT_SIZE) * set->dsize, 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 949 GFP_ATOMIC); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 950 if (!n) { f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 951 ret = -ENOMEM; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 952 goto unlock; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 953 } 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 954 memcpy(n, old, sizeof(struct hbucket) + 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 955 old->size * set->dsize); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 956 n->size = old->size + AHASH_INIT_SIZE; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 957 t->hregion[r].ext_size += f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 958 ext_size(AHASH_INIT_SIZE, set->dsize); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 959 } 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 960 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 961 copy_elem: 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 962 j = n->pos++; 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 963 data = ahash_data(n, j, set->dsize); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 964 copy_data: f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 965 t->hregion[r].elements++; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 966 #ifdef IP_SET_HASH_WITH_NETS ea53ac5b630e81 Oliver Smith 2013-09-20 967 for (i = 0; i < IPSET_NET_COUNT; i++) f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 968 mtype_add_cidr(set, h, NCIDR_PUT(DCIDR_GET(d->cidr, i)), i); 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 969 #endif 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 970 memcpy(data, d, sizeof(struct mtype_elem)); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 971 overwrite_extensions: 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 972 #ifdef IP_SET_HASH_WITH_NETS 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 973 mtype_data_set_flags(data, flags); 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 974 #endif 00d71b270eedac Jozsef Kadlecsik 2013-04-08 975 if (SET_WITH_COUNTER(set)) ca134ce86451f3 Jozsef Kadlecsik 2013-09-07 976 ip_set_init_counter(ext_counter(data, set), ext); fda75c6d9e31a9 Oliver Smith 2013-09-22 977 if (SET_WITH_COMMENT(set)) 9e41f26a505cca Jozsef Kadlecsik 2016-11-10 978 ip_set_init_comment(set, ext_comment(data, set), ext); af331419d34e2f Anton Danilov 2014-08-28 979 if (SET_WITH_SKBINFO(set)) af331419d34e2f Anton Danilov 2014-08-28 980 ip_set_init_skbinfo(ext_skbinfo(data, set), ext); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 981 /* Must come last for the case when timed out entry is reused */ 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 982 if (SET_WITH_TIMEOUT(set)) 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 983 ip_set_timeout_set(ext_timeout(data, set), ext->timeout); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 984 smp_mb__before_atomic(); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 985 set_bit(j, n->used); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 986 if (old != ERR_PTR(-ENOENT)) { 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 987 rcu_assign_pointer(hbucket(t, key), n); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 988 if (old) 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 989 kfree_rcu(old, rcu); 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 990 } f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 991 ret = 0; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 992 resize: f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 993 spin_unlock_bh(&t->hregion[r].lock); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 994 if (atomic_read(&t->ref) && ext->target) { f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 995 /* Resize is in process and kernel side add, save values */ f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 996 struct mtype_resize_ad *x; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 997 f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 998 x = kzalloc(sizeof(struct mtype_resize_ad), GFP_ATOMIC); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 999 if (!x) f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1000 /* Don't bother */ f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1001 goto out; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1002 x->ad = IPSET_ADD; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1003 memcpy(&x->d, value, sizeof(struct mtype_elem)); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1004 memcpy(&x->ext, ext, sizeof(struct ip_set_ext)); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1005 memcpy(&x->mext, mext, sizeof(struct ip_set_ext)); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1006 x->flags = flags; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1007 spin_lock_bh(&set->lock); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1008 list_add_tail(&x->list, &h->ad); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1009 spin_unlock_bh(&set->lock); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1010 } f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1011 goto out; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 1012 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 1013 set_full: 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 1014 if (net_ratelimit()) 18f84d41d34fa3 Jozsef Kadlecsik 2015-06-13 1015 pr_warn("Set %s is full, maxelem %u reached\n", f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1016 set->name, maxelem); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1017 ret = -IPSET_ERR_HASH_FULL; f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1018 unlock: f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1019 spin_unlock_bh(&t->hregion[r].lock); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1020 out: f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1021 if (atomic_dec_and_test(&t->uref) && atomic_read(&t->ref)) { f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1022 pr_debug("Table destroy after resize by add: %p\n", t); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1023 mtype_ahash_destroy(set, t, false); f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1024 } f66ee0410b1c34 Jozsef Kadlecsik 2020-02-11 1025 return ret; 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 1026 } 1feab10d7e6ddb Jozsef Kadlecsik 2013-04-08 1027 :::::: The code at line 894 was first introduced by commit :::::: 1feab10d7e6ddb5e13d6a4bd93a1b877390262ec netfilter: ipset: Unified hash type generation :::::: TO: Jozsef Kadlecsik <[email protected]> :::::: CC: Pablo Neira Ayuso <[email protected]> -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
