aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Endecott <phil_twuce_endecott@chezphil.org>2008-11-12 15:37:00 +0000
committerGreg Kroah-Hartman <gregkh@suse.de>2009-01-07 09:59:51 -0800
commitff8973d9468ea07e61ef492dd8c806a6e1a76ac1 (patch)
treeb33e0b8d4390eec5c2bf171556b42249c209e8be
parentd767d888750a8e15656b7ee15d68f90a151b8936 (diff)
USB: Remove restrictions on signal numbers in devio.c
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>
-rw-r--r--drivers/usb/core/devio.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index aa79280df15..c85e29381a8 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -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);
@@ -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;