Fix panic with IPFW
Craig Dooley
craig at xlnx-x.net
Tue Mar 9 05:39:40 PST 2004
IPFW was causing a panic whenever I loaded rules because it was using
M_DONTWAIT. Change this to M_WAITOK since all the code in ipfw mallocs
with M_NOWAIT except when it's under spl protection. Reverse this behavior
and use M_WAITOK except when under spl.
-Craig
--
------------------------------------------------------------------------
Craig Dooley craig at xxxxxxxxxx
------------------------------------------------------------------------
Index: net/ipfw/ip_fw.c
===================================================================
RCS file: /home/dcvs/src/sys/net/ipfw/ip_fw.c,v
retrieving revision 1.6
diff -u -r1.6 ip_fw.c
--- net/ipfw/ip_fw.c 6 Jan 2004 03:17:26 -0000 1.6
+++ net/ipfw/ip_fw.c 9 Mar 2004 13:29:30 -0000
@@ -850,14 +850,14 @@
if (ipfw_dyn_v != NULL)
free(ipfw_dyn_v, M_IPFW);
ipfw_dyn_v = malloc(curr_dyn_buckets * sizeof r,
- M_IPFW, M_DONTWAIT | M_ZERO);
+ M_IPFW, M_WAITOK | M_ZERO);
if (ipfw_dyn_v == NULL)
return NULL; /* failed ! */
}
}
i = hash_packet(id);
- r = malloc(sizeof *r, M_IPFW, M_NOWAIT | M_ZERO);
+ r = malloc(sizeof *r, M_IPFW, M_WAITOK | M_ZERO);
if (r == NULL) {
printf ("sorry cannot allocate state\n");
return NULL ;
@@ -1631,7 +1631,7 @@
u_short nbr = 0;
int s;
- ftmp = malloc(sizeof *ftmp, M_IPFW, M_NOWAIT | M_ZERO);
+ ftmp = malloc(sizeof *ftmp, M_IPFW, M_WAITOK | M_ZERO);
if (!ftmp)
return (ENOSPC);
bcopy(rule, ftmp, sizeof(*ftmp));
@@ -1953,7 +1953,7 @@
* bother filling up the buffer, just jump to the
* sooptcopyout.
*/
- buf = malloc(size, M_TEMP, M_WAITOK);
+ buf = malloc(size, M_TEMP, M_NOWAIT);
if (buf == 0) {
splx(s);
error = ENOBUFS;
Index: net/ipfw/ip_fw2.c
===================================================================
RCS file: /home/dcvs/src/sys/net/ipfw/ip_fw2.c,v
retrieving revision 1.7
diff -u -r1.7 ip_fw2.c
--- net/ipfw/ip_fw2.c 14 Feb 2004 21:12:38 -0000 1.7
+++ net/ipfw/ip_fw2.c 9 Mar 2004 13:30:02 -0000
@@ -847,7 +847,7 @@
free(ipfw_dyn_v, M_IPFW);
for (;;) {
ipfw_dyn_v = malloc(curr_dyn_buckets * sizeof(ipfw_dyn_rule *),
- M_IPFW, M_NOWAIT | M_ZERO);
+ M_IPFW, M_WAITOK | M_ZERO);
if (ipfw_dyn_v != NULL || curr_dyn_buckets <= 2)
break;
curr_dyn_buckets /= 2;
@@ -878,7 +878,7 @@
}
i = hash_packet(id);
- r = malloc(sizeof *r, M_IPFW, M_NOWAIT | M_ZERO);
+ r = malloc(sizeof *r, M_IPFW, M_WAITOK | M_ZERO);
if (r == NULL) {
printf ("sorry cannot allocate state\n");
return NULL;
@@ -1984,7 +1984,7 @@
if (*head == NULL && input_rule->rulenum != IPFW_DEFAULT_RULE)
return (EINVAL);
- rule = malloc(l, M_IPFW, M_NOWAIT | M_ZERO);
+ rule = malloc(l, M_IPFW, M_WAITOK | M_ZERO);
if (rule == NULL)
return (ENOSPC);
@@ -2494,7 +2494,7 @@
* how much room is needed, do not bother filling up the
* buffer, just jump to the sooptcopyout.
*/
- buf = malloc(size, M_TEMP, M_WAITOK);
+ buf = malloc(size, M_TEMP, M_NOWAIT);
if (buf == 0) {
splx(s);
error = ENOBUFS;
Attachment:
pgp00004.pgp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pgp00004.pgp
Type: application/octet-stream
Size: 187 bytes
Desc: "Description: PGP signature"
URL: <http://lists.dragonflybsd.org/pipermail/submit/attachments/20040309/2286669c/attachment-0018.obj>
More information about the Submit
mailing list