summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2007-03-05 20:48:36 +0000
committerThomas Schwinge <tschwinge@gnu.org>2009-06-18 00:27:05 +0200
commit85cc387fcadf24c1c4a1c3df515619bd48914457 (patch)
tree09fe29b955c2900b903fd0616269dd47abdb3072
parent66a421905507c34e7e5774e8277b00ff3ce621a8 (diff)
2007-03-05 Samuel Thibault <samuel.thibault@ens-lyon.org>
[bug #18349 --- ``General Protection Trap'' in `ipc_kmsg_enqueue'] * device/net_io.c (net_deliver): Call net_filter() with splimp held. * linux/dev/glue/net.c (device_write): Call net_packet() with splimp held.
-rw-r--r--ChangeLog7
-rw-r--r--device/net_io.c2
-rw-r--r--linux/dev/glue/net.c2
3 files changed, 9 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 3ba419a..5179bf6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-03-05 Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+ [bug #18349 --- ``General Protection Trap'' in `ipc_kmsg_enqueue']
+ * device/net_io.c (net_deliver): Call net_filter() with splimp held.
+ * linux/dev/glue/net.c (device_write): Call net_packet() with splimp
+ held.
+
2007-03-04 Thomas Schwinge <tschwinge@gnu.org>
* tests/configfrag.ac (MBCHK): Remove check.
diff --git a/device/net_io.c b/device/net_io.c
index b565aa3..9c7517a 100644
--- a/device/net_io.c
+++ b/device/net_io.c
@@ -444,13 +444,13 @@ boolean_t net_deliver(nonblocking)
} else
return FALSE;
simple_unlock(&net_queue_lock);
- (void) spl0();
/*
* Run the packet through the filters,
* getting back a queue of packets to send.
*/
net_filter(kmsg, &send_list);
+ (void) spl0();
if (!nonblocking) {
/*
diff --git a/linux/dev/glue/net.c b/linux/dev/glue/net.c
index 06dcdc4..0022f57 100644
--- a/linux/dev/glue/net.c
+++ b/linux/dev/glue/net.c
@@ -488,7 +488,6 @@ device_write (void *d, ipc_port_t reply_port,
__skb_queue_tail (&dev->buffs[0], skb);
mark_bh (NET_BH);
}
- splx (s);
/* Send packet to filters. */
{
@@ -517,6 +516,7 @@ device_write (void *d, ipc_port_t reply_port,
ethernet_priority (kmsg));
}
}
+ splx (s);
return MIG_NO_REPLY;
}