usb/107701: usbd ignores "detach"

Julian Stacey jhs at berklix.org
Wed Jan 10 01:12:07 UTC 2007


Reposting here to restore
	cc: freebsd-usb at freebsd.org
lost from 
	To: "Julian H. Stacey" <jhs at flat.berklix.net>
	Cc: freebsd-gnats-submit at freebsd.org, bug-followup at freebsd.org
Julian S.
------------------

Reference:
> From:		Atom Smasher <atom at smasher.org> 
> Date:		Tue, 9 Jan 2007 18:04:47 -0500 (EST) 
> Message-id:	<20070109230449.56854.qmail at smasher.org> 

Atom Smasher wrote:
> On Tue, 9 Jan 2007, Julian H. Stacey wrote:
> 
> > Did you try taking out devname from your entries, to quote a comment I 
> > added to my personal usbd.conf some time back:
> >
> > #       - devname entries are mostly unused, as only reported on attach,
> > #         not detach, so detach fails to be called if devname is specified.
> ==================
> 
> i removed devname from one of the entries and restarted usbd. the detach 
> event is still silently ignored.
> 
> here's the relevant section of my usbd.conf. note that it assumes that 
> "device speaker" is enabled in the kernel:
> 
> <<<<<<<<<<<<<<
> 
> device "CF card"
>  	devname "umass[0-9]+"
>  	attach "echo 'T90 L16 DA' > /dev/speaker"
>  	detach "echo 'T90 L16 AD' > /dev/speaker"
> 
> <<<<<<<<<<<<<<
> 
> it should play two ascending tones when i insert a flash drive, and two 
> descending tones when i remove the flash drive. it only plays tones on 
> insertion.
> 
> 
> -- 
>          ...atom
> 
>   ________________________
>   http://atom.smasher.org/
>   762A 3B98 A3C3 96C9 C6B7 582A B88D 52E4 D9F5 7808
>   -------------------------------------------------
> 
>  	"TELEVISION IS DRUGS"
>  		-- Bumper Sticker
---------------

I can reproduce the error. 
Loads of people Should have stumbled on this.
I've found the bug in the code.
This diff just marks the bug.

*** /host/fire/usr/src/usr.sbin/usbd/usbd.c	Fri Jul  1 17:49:52 2005
--- usbd.c	Wed Jan 10 01:54:54 2007
***************
*** 879,886 ****
--- 879,891 ----
  
  		devinfo = &events.u.ue_device;
  		for (i = 0; i < USB_MAX_DEVNAMES; i++) {
+ printf("  \nJHS1\n" );
  			if (devinfo->udi_devnames[i][0] == '\0')
  				break;
+ 				/* This break is a problem it prevents
+ 				   USB_EVENT_IS_DETACH being run at JHS3
+ 				*/
+ printf("  \nJHS2\n" );
  
  			memcpy(&the_event, &events, sizeof(the_event));
  			the_devinfo = &the_event.u.ue_device;
***************
*** 925,930 ****
--- 930,936 ----
  				if (USB_EVENT_IS_ATTACH(the_event.ue_type) &&
  					action_match.action->attach) 
  					execute_command(action_match.action->attach);
+ printf("  \nJHS3\n" );
  				if (USB_EVENT_IS_DETACH(the_event.ue_type) &&
  					action_match.action->detach)
  					execute_command(action_match.action->detach);


The error is still there in 6-Stable too.
There is no src/usr.sbin/usbd/usbd.c in current.
I don't know the code, & too tired & busy to fix this,
Someone else here able to fix it & post a patch ?
If not, Atom Smasher <atom at smasher.org> please use
send-pr to report this identified bug.

-- 
Julian Stacey.  BSD Unix C Net Consultancy, Munich/Muenchen  http://berklix.com
Mail Ascii, not HTML.		Ihr Rauch = mein allergischer Kopfschmerz.
			http://berklix.org/free-software


More information about the freebsd-usb mailing list