]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
xenbus: remove transaction holder from list before freeing
authorJan Beulich <JBeulich@suse.com>
Tue, 4 Apr 2017 12:27:22 +0000 (06:27 -0600)
committerChuck Anderson <chuck.anderson@oracle.com>
Wed, 13 Sep 2017 04:37:55 +0000 (21:37 -0700)
After allocation the item is being placed on the list right away.
Consequently it needs to be taken off the list before freeing in the
case xenbus_dev_request_and_reply() failed, as in that case the
callback (xenbus_dev_queue_reply()) is not being called (and if it
was called, it should do both).

Fixes: 5584ea250ae44f929feb4c7bd3877d1c5edbf813
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
OraBug: 26662731

(cherry picked from commit ac4cde398a96c1d28b1c28a0f69b6efd892a1c8a)
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Joao Martins <joao.m.martins@oracle.com>
drivers/xen/xenbus/xenbus_dev_frontend.c

index 6cd35bd8a2d43380cd1b8e883b0c68d760dd83ab..87ac5cab7a45f4b07eec15b4a352786f5e59467a 100644 (file)
@@ -445,8 +445,10 @@ static int xenbus_write_transaction(unsigned msg_type,
                return xenbus_command_reply(u, XS_ERROR, "ENOENT");
 
        rc = xenbus_dev_request_and_reply(&u->u.msg, u);
-       if (rc)
+       if (rc && trans) {
+               list_del(&trans->list);
                kfree(trans);
+       }
 
 out:
        return rc;