radix node head lock needs to be held when calling rnh_addaddr

This commit is contained in:
kmacy 2008-12-13 20:18:05 +00:00
parent 2a8fe85d73
commit 658f51b3ec

View File

@ -1826,7 +1826,9 @@ add_table_entry(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
ent->mask.sin_addr.s_addr = htonl(mlen ? ~((1 << (32 - mlen)) - 1) : 0); ent->mask.sin_addr.s_addr = htonl(mlen ? ~((1 << (32 - mlen)) - 1) : 0);
ent->addr.sin_addr.s_addr = addr & ent->mask.sin_addr.s_addr; ent->addr.sin_addr.s_addr = addr & ent->mask.sin_addr.s_addr;
IPFW_WLOCK(ch); IPFW_WLOCK(ch);
RADIX_NODE_HEAD_LOCK(rnh);
if (rnh->rnh_addaddr(&ent->addr, &ent->mask, rnh, (void *)ent) == if (rnh->rnh_addaddr(&ent->addr, &ent->mask, rnh, (void *)ent) ==
RADIX_NODE_HEAD_UNLOCK(rnh);
NULL) { NULL) {
IPFW_WUNLOCK(ch); IPFW_WUNLOCK(ch);
free(ent, M_IPFW_TBL); free(ent, M_IPFW_TBL);