9p/trans_fd: abort p9_read_work if req status changed
authorDominique Martinet <dominique.martinet@cea.fr>
Tue, 9 Oct 2018 02:18:52 +0000 (11:18 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Jul 2019 11:14:43 +0000 (13:14 +0200)
commit6fad469c84fcd3617a27afa61908d1c02a8bacd8
tree2fd2592dc4f0677969a21fcf54e4448eae7618fa
parent39bf142ae0cac7904e4a60b95bb0bdc1f696387a
9p/trans_fd: abort p9_read_work if req status changed

[ Upstream commit e4ca13f7d075e551dc158df6af18fb412a1dba0a ]

p9_read_work would try to handle an errored req even if it got put to
error state by another thread between the lookup (that worked) and the
time it had been fully read.
The request itself is safe to use because we hold a ref to it from the
lookup (for m->rreq, so it was safe to read into the request data buffer
until this point), but the req_list has been deleted at the same time
status changed, and client_cb already has been called as well, so we
should not do either.

Link: http://lkml.kernel.org/r/1539057956-23741-1-git-send-email-asmadeus@codewreck.org
Signed-off-by: Dominique Martinet <dominique.martinet@cea.fr>
Reported-by: syzbot+2222c34dc40b515f30dc@syzkaller.appspotmail.com
Cc: Eric Van Hensbergen <ericvh@gmail.com>
Cc: Latchesar Ionkov <lucho@ionkov.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/9p/trans_fd.c