Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757088Ab0LIUTs (ORCPT ); Thu, 9 Dec 2010 15:19:48 -0500 Received: from p3plsmtps2ded03.prod.phx3.secureserver.net ([208.109.80.60]:45730 "HELO p3plsmtps2ded03-01.prod.phx3.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1753721Ab0LIUTq (ORCPT ); Thu, 9 Dec 2010 15:19:46 -0500 From: Hank Janssen To: hjanssen@microsoft.com, zbr@ioremap.net, gregkh@suse.de, linux-kernel@vger.kernel.org, devel@linuxdriverproject.org, virtualization@lists.osdl.org Cc: Haiyang Zhang Subject: [PATCH 1/1] Properly check return values of kmalloc and vmbus_recvpacket Date: Thu, 9 Dec 2010 12:23:29 -0800 Message-Id: <1291926209-17120-1-git-send-email-hjanssen@microsoft.com> X-Mailer: git-send-email 1.5.5.6 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3344 Lines: 116 Correct ugly oversight, we need to check the return values of kmalloc and vmbus_recvpacket and return if they fail. I also tightened up the call to kmalloc. Thanks to Evgeniy Polyakov for pointing this out. Signed-off-by: Haiyang Zhang Signed-off-by: Hank Janssen --- drivers/staging/hv/hv_utils.c | 48 ++++++++++++++++++++++++++++------------ 1 files changed, 33 insertions(+), 15 deletions(-) diff --git a/drivers/staging/hv/hv_utils.c b/drivers/staging/hv/hv_utils.c index 53e1e29..ac68575 100644 --- a/drivers/staging/hv/hv_utils.c +++ b/drivers/staging/hv/hv_utils.c @@ -43,21 +43,27 @@ static void shutdown_onchannelcallback(void *context) { struct vmbus_channel *channel = context; u8 *buf; - u32 buflen, recvlen; + u32 recvlen; u64 requestid; u8 execute_shutdown = false; + int ret = 0; struct shutdown_msg_data *shutdown_msg; struct icmsg_hdr *icmsghdrp; struct icmsg_negotiate *negop = NULL; - buflen = PAGE_SIZE; - buf = kmalloc(buflen, GFP_ATOMIC); + buf = kmalloc(PAGE_SIZE, GFP_ATOMIC); - vmbus_recvpacket(channel, buf, buflen, &recvlen, &requestid); + if (!buf) { + printk(KERN_INFO + "Unable to allocate memory for shutdown_onchannelcallback"); + return; + } + + ret = vmbus_recvpacket(channel, buf, PAGE_SIZE, &recvlen, &requestid); - if (recvlen > 0) { + if (ret == 0 && recvlen > 0) { DPRINT_DBG(VMBUS, "shutdown packet: len=%d, requestid=%lld", recvlen, requestid); @@ -151,17 +157,23 @@ static void timesync_onchannelcallback(void *context) { struct vmbus_channel *channel = context; u8 *buf; - u32 buflen, recvlen; + u32 recvlen; u64 requestid; struct icmsg_hdr *icmsghdrp; struct ictimesync_data *timedatap; + int ret = 0; - buflen = PAGE_SIZE; - buf = kmalloc(buflen, GFP_ATOMIC); + buf = kmalloc(PAGE_SIZE, GFP_ATOMIC); - vmbus_recvpacket(channel, buf, buflen, &recvlen, &requestid); + if (!buf) { + printk(KERN_INFO + "Unable to allocate memory for timesync_onchannelcallback"); + return; + } - if (recvlen > 0) { + ret = vmbus_recvpacket(channel, buf, PAGE_SIZE, &recvlen, &requestid); + + if (ret == 0 && recvlen > 0) { DPRINT_DBG(VMBUS, "timesync packet: recvlen=%d, requestid=%lld", recvlen, requestid); @@ -197,17 +209,23 @@ static void heartbeat_onchannelcallback(void *context) { struct vmbus_channel *channel = context; u8 *buf; - u32 buflen, recvlen; + u32 recvlen; u64 requestid; struct icmsg_hdr *icmsghdrp; struct heartbeat_msg_data *heartbeat_msg; + int ret = 0; + + buf = kmalloc(PAGE_SIZE, GFP_ATOMIC); - buflen = PAGE_SIZE; - buf = kmalloc(buflen, GFP_ATOMIC); + if (!buf) { + printk(KERN_INFO + "Unable to allocate memory for heartbeat_onchannelcallback"); + return; + } - vmbus_recvpacket(channel, buf, buflen, &recvlen, &requestid); + ret = vmbus_recvpacket(channel, buf, PAGE_SIZE, &recvlen, &requestid); - if (recvlen > 0) { + if (ret == 0 && recvlen > 0) { DPRINT_DBG(VMBUS, "heartbeat packet: len=%d, requestid=%lld", recvlen, requestid); -- 1.6.0.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/