projects
/
wrapfs-3.2.y.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
be1bb34
)
usb: gadget: clear related members when goto fail
author
Hangyu Hua
<hbh25y@gmail.com>
Fri, 31 Dec 2021 17:21:38 +0000
(
01:21
+0800)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Tue, 8 Mar 2022 18:00:57 +0000
(19:00 +0100)
commit
501e38a5531efbd77d5c73c0ba838a889bfc1d74
upstream.
dev->config and dev->hs_config and dev->dev need to be cleaned if
dev_config fails to avoid UAF.
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Hangyu Hua <hbh25y@gmail.com>
Link:
https://lore.kernel.org/r/20211231172138.7993-3-hbh25y@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/legacy/inode.c
patch
|
blob
|
history
diff --git
a/drivers/usb/gadget/legacy/inode.c
b/drivers/usb/gadget/legacy/inode.c
index 8ea33661713d948826a0ae5fa457dc1c21fb1a3a..2b30b5a1b577e64d7d36e13b1a8b94bcc48f43b0 100644
(file)
--- a/
drivers/usb/gadget/legacy/inode.c
+++ b/
drivers/usb/gadget/legacy/inode.c
@@
-1883,8
+1883,8
@@
dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
value = usb_gadget_probe_driver(&gadgetfs_driver);
if (value != 0) {
-
kfree (dev->buf
);
-
dev->buf = NULL
;
+
spin_lock_irq(&dev->lock
);
+
goto fail
;
} else {
/* at this point "good" hardware has for the first time
* let the USB the host see us. alternatively, if users
@@
-1901,6
+1901,9
@@
dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
return value;
fail:
+ dev->config = NULL;
+ dev->hs_config = NULL;
+ dev->dev = NULL;
spin_unlock_irq (&dev->lock);
pr_debug ("%s: %s fail %Zd, %p\n", shortname, __func__, value, dev);
kfree (dev->buf);