Skip to content

Commit

Permalink
USB: Remove restrictions on signal numbers in devio.c
Browse files Browse the repository at this point in the history
Just over a year ago (!) I had this brief exchange with Alan Stern:

>> It seems that the signal that can be used with USBDEVFS_DISCSIGNAL and 
>> in usbdevfs_urb.signr is limited to the real-time signals SIGRTMIN to 
>> SIGRTMAX. What's the rationale for this restriction? I believe that a 
>> process can kill() itself with any signal number, can't it? I was 
>> planning to use SIGIO for usbdevfs_urb.signr and SIGTERM (uncaught) for 
>> USBDEVFS_DISCSIGNAL. I don't think I'll have a problem with using 
>> SIGRTMIN+n instead, but I'm curious to know if there's some subtle 
>> problem with the non-real-time signals that I should be aware of.
>
> I don't know of any reason for this restriction.

Since no-one else could think of a reason either, I offer the following 
patch which allows any signal to be used with USBDEVFS_DISCSIGNAL and 
usbdevfs_urb.signr.

Signed-off-by: Phil Endecott <usbpatch@chezphil.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Phil Endecott authored and Greg Kroah-Hartman committed Jan 7, 2009
1 parent d767d88 commit ff8973d
Showing 1 changed file with 0 additions and 5 deletions.
5 changes: 0 additions & 5 deletions drivers/usb/core/devio.c
Original file line number Diff line number Diff line change
Expand Up @@ -981,9 +981,6 @@ static int proc_do_submiturb(struct dev_state *ps, struct usbdevfs_urb *uurb,
return -EINVAL;
if (!uurb->buffer)
return -EINVAL;
if (uurb->signr != 0 && (uurb->signr < SIGRTMIN ||
uurb->signr > SIGRTMAX))
return -EINVAL;
if (!(uurb->type == USBDEVFS_URB_TYPE_CONTROL &&
(uurb->endpoint & ~USB_ENDPOINT_DIR_MASK) == 0)) {
ifnum = findintfep(ps->dev, uurb->endpoint);
Expand Down Expand Up @@ -1401,8 +1398,6 @@ static int proc_disconnectsignal(struct dev_state *ps, void __user *arg)

if (copy_from_user(&ds, arg, sizeof(ds)))
return -EFAULT;
if (ds.signr != 0 && (ds.signr < SIGRTMIN || ds.signr > SIGRTMAX))
return -EINVAL;
ps->discsignr = ds.signr;
ps->disccontext = ds.context;
return 0;
Expand Down

0 comments on commit ff8973d

Please sign in to comment.