Fix chain numbering bug when the highest line number installed >= 65435

and the rule being added has no explicit line number set.

Submitted by:	Archie Cobbs <archie@whistle.com>
This commit is contained in:
Alexander Langer
1996-06-17 00:00:35 +00:00
parent e5ce154ce5
commit 6875d5c1b3
+27 -16
View File
@@ -12,7 +12,7 @@
*
* This software is provided ``AS IS'' without any warranties of any kind.
*
* $Id: ip_fw.c,v 1.38 1996/06/12 19:34:33 gpalmer Exp $
* $Id: ip_fw.c,v 1.39 1996/06/13 17:35:28 gpalmer Exp $
*/
/*
@@ -499,29 +499,40 @@ add_entry(struct ip_fw_head *chainptr, struct ip_fw *frwl)
if (!chainptr->lh_first) {
LIST_INSERT_HEAD(chainptr, fwc, chain);
splx(s);
return(0);
} else if (ftmp->fw_number == (u_short)-1) {
if (fwc) free(fwc, M_IPFW);
if (ftmp) free(ftmp, M_IPFW);
splx(s);
return (EINVAL);
} else {
nbr=0;
for (fcp = chainptr->lh_first; fcp; fcp = fcp->chain.le_next)
if (fcp->rule->fw_number == (u_short)-1 ||
( ftmp->fw_number &&
fcp->rule->fw_number > ftmp->fw_number)) {
if (!ftmp->fw_number)
ftmp->fw_number = nbr + 100;
if (fcpl) {
LIST_INSERT_AFTER(fcpl, fwc, chain);
} else {
LIST_INSERT_HEAD(chainptr, fwc, chain);
}
}
/* If entry number is 0, find highest numbered rule and add 100 */
if (ftmp->fw_number == 0) {
for (fcp = chainptr->lh_first; fcp; fcp = fcp->chain.le_next) {
if (fcp->rule->fw_number != (u_short)-1)
nbr = fcp->rule->fw_number;
else
break;
}
if (nbr < (u_short)-1 - 100)
nbr += 100;
ftmp->fw_number = nbr;
}
/* Got a valid number; now insert it, keeping the list ordered */
for (fcp = chainptr->lh_first; fcp; fcp = fcp->chain.le_next) {
if (fcp->rule->fw_number > ftmp->fw_number) {
if (fcpl) {
LIST_INSERT_AFTER(fcpl, fwc, chain);
} else {
nbr=fcp->rule->fw_number;
fcpl = fcp;
LIST_INSERT_HEAD(chainptr, fwc, chain);
}
break;
} else {
fcpl = fcp;
}
}
splx(s);