Kernel panic on module unload

Dmitry Komissaroff dxi at mail.ru
Wed Nov 7 23:07:01 PST 2007


В письме Wed, 07 Nov 2007 09:59:45 -0800, Matthew Dillon
написал:

> 
> :Hi all!
> :
>     If you want to paste the code you are using to register and unregister
>     the protosw/domain structs I can take a look at that.
> 
> 

Code is very simple and I used atm_proto.c as example.
There is:

struct domain btdomain;

const struct protosw btsw[] = {
	{ /* raw HCI commands */
		.pr_type = SOCK_RAW,
		.pr_domain = &btdomain,
		.pr_protocol = BTPROTO_HCI,
		.pr_flags = (PR_ADDR | PR_ATOMIC),
		.pr_input = 0,
		.pr_output = 0,
		.pr_ctlinput = 0,
		.pr_ctloutput = hci_ctloutput,
		.pr_mport = cpu0_soport,
		.pr_init = 0,
		.pr_fasttimo = 0,
		.pr_slowtimo = 0,
		.pr_drain = 0,
		.pr_usrreqs = &hci_usrreqs
	},
};

struct domain btdomain = {
              .dom_family = AF_BLUETOOTH,
              .dom_name = "bluetooth",
              .dom_init = netbt_init,
              .dom_externalize = NULL,
              .dom_dispose = netbt_dispose,
              .dom_protosw = btsw,
              .dom_protoswNPROTOSW = &btsw[sizeof(btsw)/sizeof(btsw[0])],
	       .dom_next = SLIST_ENTRY_INITIALIZER,
              .dom_rtattach = 0,
              .dom_rtoffset = 32,
              .dom_maxrtkey = sizeof(struct sockaddr_bt),
              .dom_ifattach = 0,
              .dom_ifdetach = 0,
};

DOMAIN_SET(bt);

BTW, I dig in kernel srcs and I found in uipc_domain.c this
commant for net_add_domain():

/*                                                                             
 * Add a new protocol domain to the list of supported domains                  
 * Note: you cant unload it again because a socket may be using it.            
 * XXX can't fail at this time.                                                
 */ 

There is no legal way to unload module, which register new protocol. :)






More information about the Kernel mailing list