| From 5e030d5ce9d99a899b648413139ff65bab12b038 Mon Sep 17 00:00:00 2001 |
| From: "K. Y. Srinivasan" <kys@microsoft.com> |
| Date: Sun, 12 Mar 2017 20:00:30 -0700 |
| Subject: Drivers: hv: vmbus: Don't leak memory when a channel is rescinded |
| |
| From: K. Y. Srinivasan <kys@microsoft.com> |
| |
| commit 5e030d5ce9d99a899b648413139ff65bab12b038 upstream. |
| |
| When we close a channel that has been rescinded, we will leak memory since |
| vmbus_teardown_gpadl() returns an error. Fix this so that we can properly |
| cleanup the memory allocated to the ring buffers. |
| |
| Fixes: ccb61f8a99e6 ("Drivers: hv: vmbus: Fix a rescind handling bug") |
| |
| Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> |
| Cc: Dexuan Cui <decui@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/hv/channel.c | 13 ++++++++----- |
| 1 file changed, 8 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/hv/channel.c |
| +++ b/drivers/hv/channel.c |
| @@ -506,12 +506,15 @@ int vmbus_teardown_gpadl(struct vmbus_ch |
| |
| wait_for_completion(&info->waitevent); |
| |
| - if (channel->rescind) { |
| - ret = -ENODEV; |
| - goto post_msg_err; |
| - } |
| - |
| post_msg_err: |
| + /* |
| + * If the channel has been rescinded; |
| + * we will be awakened by the rescind |
| + * handler; set the error code to zero so we don't leak memory. |
| + */ |
| + if (channel->rescind) |
| + ret = 0; |
| + |
| spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags); |
| list_del(&info->msglistentry); |
| spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags); |