There is a module loading bug in head/mod.c  When a module
is unregistered the f_name component is left alloing lis_findmod
to find it an lis_loadmod will attempt to lock a destroyed
semaphore.  The problem can be recreated by manually loading a
streams kernel module (modprobe), unloading it (rmmod) and then
demand loading it (e.g. I_PUSH).  The result is a kernel oops.

The patch below fixes the problem (but may break other things).

--brian

Index: head/mod.c
===================================================================
RCS file: /home/common/cvsroot/LiSnew/head/mod.c,v
retrieving revision 1.1.1.4
diff -U3 -r1.1.1.4 mod.c
--- head/mod.c  22 Nov 2003 23:01:43 -0000      1.1.1.4
+++ head/mod.c  15 Feb 2004 18:05:31 -0000
@@ -742,6 +742,7 @@
     lis_up(&slot->f_sem) ;
     lis_sem_destroy(&slot->f_sem) ;
     slot->f_state &= ~LIS_MODSTATE_INITED ;
+    slot->f_name[0] = '\0';
 
     printk("STREAMS module \"%s\" unregistered, id %d\n", name, id);
 

-- 
Brian F. G. Bidulock    � The reasonable man adapts himself to the �
[EMAIL PROTECTED]    � world; the unreasonable one persists in  �
http://www.openss7.org/ � trying  to adapt the  world  to himself. �
                        � Therefore  all  progress  depends on the �
                        � unreasonable man. -- George Bernard Shaw �
_______________________________________________
Linux-streams mailing list
[EMAIL PROTECTED]
http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams

Reply via email to