mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 02:04:19 +08:00
516a1a07f0
this fixes a race between async_completed() and proc_reapurbnonblock(). CPU A CPU B spin_lock(&ps->lock); list_move_tail(&as->asynclist, &ps->async_completed); spin_unlock(&ps->lock); if (!(as = async_getcompleted(ps))) return -EAGAIN; return processcompl(as, (void __user * __user *)arg); processcompl() calls free_async() which calls kfree(as) as->status = urb->status; if (as->signr) { sinfo.si_signo = as->signr; sinfo.si_errno = as->status; sinfo.si_code = SI_ASYNCIO; sinfo.si_addr = as->userurb; kill_pid_info_as_uid(as->signr, &sinfo, as->pid, as->uid, as->euid, as->secid); } snoop(&urb->dev->dev, "urb complete\n"); snoop_urb(urb, as->userurb); write after kfree Signed-off-by: Oliver Neukum <oliver@neukum.org> |
||
---|---|---|
.. | ||
buffer.c | ||
config.c | ||
devices.c | ||
devio.c | ||
driver.c | ||
endpoint.c | ||
file.c | ||
generic.c | ||
hcd-pci.c | ||
hcd.c | ||
hcd.h | ||
hub.c | ||
hub.h | ||
inode.c | ||
Kconfig | ||
Makefile | ||
message.c | ||
notify.c | ||
otg_whitelist.h | ||
quirks.c | ||
sysfs.c | ||
urb.c | ||
usb.c | ||
usb.h |