From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-by2nam01on0047.outbound.protection.outlook.com ([104.47.34.47]:35368 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1033682AbeE1PPx (ORCPT ); Mon, 28 May 2018 11:15:53 -0400 Subject: Re: FAILED: patch "[PATCH] drm/vmwgfx: Fix host logging / guestinfo reading error paths" failed to apply to 4.16-stable tree To: gregkh@linuxfoundation.org, brianp@vmware.com, stable@vger.kernel.org, syeh@vmware.com References: <152734025414271@kroah.com> From: Thomas Hellstrom Message-ID: Date: Mon, 28 May 2018 17:15:37 +0200 MIME-Version: 1.0 In-Reply-To: <152734025414271@kroah.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Sender: stable-owner@vger.kernel.org List-ID: Hi, On 05/26/2018 03:10 PM, gregkh@linuxfoundation.org wrote: > The patch below does not apply to the 4.16-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to . > > thanks, > > greg k-h The IMO best option is to cherry-pick commit 6073a09210e06 "drm/vmwgfx: Use kasprintf" by Himanshu Jha. It doesn't fix anything but is small and makes the below patch apply cleanly. Thanks, Thomas > ------------------ original commit in Linus's tree ------------------ > > From f37230c0ad481091bc136788ff8b37dc86300c6d Mon Sep 17 00:00:00 2001 > From: Thomas Hellstrom > Date: Wed, 23 May 2018 16:13:20 +0200 > Subject: [PATCH] drm/vmwgfx: Fix host logging / guestinfo reading error paths > > The error paths were leaking opened channels. > Fix by using dedicated error paths. > > Cc: > Signed-off-by: Thomas Hellstrom > Reviewed-by: Brian Paul > Reviewed-by: Sinclair Yeh > > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c > index cdff99211602..21d746bdc922 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c > @@ -329,8 +329,6 @@ int vmw_host_get_guestinfo(const char *guest_info_param, > struct rpc_channel channel; > char *msg, *reply = NULL; > size_t reply_len = 0; > - int ret = 0; > - > > if (!vmw_msg_enabled) > return -ENODEV; > @@ -344,15 +342,14 @@ int vmw_host_get_guestinfo(const char *guest_info_param, > return -ENOMEM; > } > > - if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM) || > - vmw_send_msg(&channel, msg) || > - vmw_recv_msg(&channel, (void *) &reply, &reply_len) || > - vmw_close_channel(&channel)) { > - DRM_ERROR("Failed to get %s", guest_info_param); > + if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM)) > + goto out_open; > > - ret = -EINVAL; > - } > + if (vmw_send_msg(&channel, msg) || > + vmw_recv_msg(&channel, (void *) &reply, &reply_len)) > + goto out_msg; > > + vmw_close_channel(&channel); > if (buffer && reply && reply_len > 0) { > /* Remove reply code, which are the first 2 characters of > * the reply > @@ -369,7 +366,17 @@ int vmw_host_get_guestinfo(const char *guest_info_param, > kfree(reply); > kfree(msg); > > - return ret; > + return 0; > + > +out_msg: > + vmw_close_channel(&channel); > + kfree(reply); > +out_open: > + *length = 0; > + kfree(msg); > + DRM_ERROR("Failed to get %s", guest_info_param); > + > + return -EINVAL; > } > > > @@ -400,15 +407,22 @@ int vmw_host_log(const char *log) > return -ENOMEM; > } > > - if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM) || > - vmw_send_msg(&channel, msg) || > - vmw_close_channel(&channel)) { > - DRM_ERROR("Failed to send log\n"); > + if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM)) > + goto out_open; > > - ret = -EINVAL; > - } > + if (vmw_send_msg(&channel, msg)) > + goto out_msg; > > + vmw_close_channel(&channel); > kfree(msg); > > - return ret; > + return 0; > + > +out_msg: > + vmw_close_channel(&channel); > +out_open: > + kfree(msg); > + DRM_ERROR("Failed to send log\n"); > + > + return -EINVAL; > } >