summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2017-12-28 14:43:06 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2017-12-28 14:43:06 -0500
commitfc1c428eb46af8183be771d2c78b3902acbeffe3 (patch)
tree01ef00f78f0f7cb39e8ed55b43f50eacfba3ed2e /sound
parent3d26759c09da7242db6ae18ce9a0f6b09bfeafcc (diff)
usx2y: don't bother with access_ok() in ->dsp_load()
memdup_user() checks it, so the only effect would be failing with -EINVAL instead of -EFAULT in case when access_ok() is false. However, the caller has already checked access_ok() itself (and would have buggered off with -EFAULT), so the check is completely pointless. Removing it both simplifies the only instance of ->dsp_load() and allows to get rid of the check in caller - its sole effect used to be in preventing a bogus error value from access_ok() in the instance. Let memdup_user() do the right thing instead... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'sound')
-rw-r--r--sound/usb/usx2y/usX2Yhwdep.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/sound/usb/usx2y/usX2Yhwdep.c b/sound/usb/usx2y/usX2Yhwdep.c
index f4b3cda412fc..2bbcf4af06dd 100644
--- a/sound/usb/usx2y/usX2Yhwdep.c
+++ b/sound/usb/usx2y/usX2Yhwdep.c
@@ -198,24 +198,22 @@ static int snd_usX2Y_hwdep_dsp_load(struct snd_hwdep *hw,
198 struct snd_hwdep_dsp_image *dsp) 198 struct snd_hwdep_dsp_image *dsp)
199{ 199{
200 struct usX2Ydev *priv = hw->private_data; 200 struct usX2Ydev *priv = hw->private_data;
201 int lret, err = -EINVAL; 201 struct usb_device* dev = priv->dev;
202 snd_printdd( "dsp_load %s\n", dsp->name); 202 int lret, err;
203 char *buf;
203 204
204 if (access_ok(VERIFY_READ, dsp->image, dsp->length)) { 205 snd_printdd( "dsp_load %s\n", dsp->name);
205 struct usb_device* dev = priv->dev;
206 char *buf;
207 206
208 buf = memdup_user(dsp->image, dsp->length); 207 buf = memdup_user(dsp->image, dsp->length);
209 if (IS_ERR(buf)) 208 if (IS_ERR(buf))
210 return PTR_ERR(buf); 209 return PTR_ERR(buf);
211 210
212 err = usb_set_interface(dev, 0, 1); 211 err = usb_set_interface(dev, 0, 1);
213 if (err) 212 if (err)
214 snd_printk(KERN_ERR "usb_set_interface error \n"); 213 snd_printk(KERN_ERR "usb_set_interface error \n");
215 else 214 else
216 err = usb_bulk_msg(dev, usb_sndbulkpipe(dev, 2), buf, dsp->length, &lret, 6000); 215 err = usb_bulk_msg(dev, usb_sndbulkpipe(dev, 2), buf, dsp->length, &lret, 6000);
217 kfree(buf); 216 kfree(buf);
218 }
219 if (err) 217 if (err)
220 return err; 218 return err;
221 if (dsp->index == 1) { 219 if (dsp->index == 1) {