summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Stabellini <sstabellini@kernel.org>2018-12-22 00:06:30 +0100
committerBoris Ostrovsky <boris.ostrovsky@oracle.com>2019-01-02 17:00:10 +0100
commit96283f9a084e23d7cda2d3c5d1ffa6df6cf1ecec (patch)
treefe0a1cbbe09216545c426d7743f954feff8c07a3
parentpvcalls-front: read all data before closing the connection (diff)
downloadlinux-96283f9a084e23d7cda2d3c5d1ffa6df6cf1ecec.tar.xz
linux-96283f9a084e23d7cda2d3c5d1ffa6df6cf1ecec.zip
pvcalls-front: don't try to free unallocated rings
inflight_req_id is 0 when initialized. If inflight_req_id is 0, there is no accept_map to free. Fix the check in pvcalls_front_release. Signed-off-by: Stefano Stabellini <stefanos@xilinx.com> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
-rw-r--r--drivers/xen/pvcalls-front.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/xen/pvcalls-front.c b/drivers/xen/pvcalls-front.c
index e5d95aab2cb8..4f3d664b3f39 100644
--- a/drivers/xen/pvcalls-front.c
+++ b/drivers/xen/pvcalls-front.c
@@ -1030,8 +1030,8 @@ int pvcalls_front_release(struct socket *sock)
spin_lock(&bedata->socket_lock);
list_del(&map->list);
spin_unlock(&bedata->socket_lock);
- if (READ_ONCE(map->passive.inflight_req_id) !=
- PVCALLS_INVALID_ID) {
+ if (READ_ONCE(map->passive.inflight_req_id) != PVCALLS_INVALID_ID &&
+ READ_ONCE(map->passive.inflight_req_id) != 0) {
pvcalls_front_free_map(bedata,
map->passive.accept_map);
}