summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}