From patchwork Thu May 20 14:29:49 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: manjugk manjugk X-Patchwork-Id: 101195 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o4KEUkob020610 for ; Thu, 20 May 2010 14:30:46 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755096Ab0ETOa1 (ORCPT ); Thu, 20 May 2010 10:30:27 -0400 Received: from arroyo.ext.ti.com ([192.94.94.40]:56256 "EHLO arroyo.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755075Ab0ETOa0 (ORCPT ); Thu, 20 May 2010 10:30:26 -0400 Received: from dbdp31.itg.ti.com ([172.24.170.98]) by arroyo.ext.ti.com (8.13.7/8.13.7) with ESMTP id o4KEUMjj013267 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 20 May 2010 09:30:24 -0500 Received: from localhost.localdomain (localhost [127.0.0.1]) by dbdp31.itg.ti.com (8.13.8/8.13.8) with ESMTP id o4KEUK0o019679; Thu, 20 May 2010 20:00:21 +0530 (IST) From: Manjunatha GK To: linux-omap@vger.kernel.org Cc: Damodar , Tony Lindgren Subject: [PATCH] OMAP2/3: Keypad: Fix memory leak Date: Thu, 20 May 2010 19:59:49 +0530 Message-Id: <1274365792-24938-1-git-send-email-manjugk@ti.com> X-Mailer: git-send-email 1.7.0.4 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Thu, 20 May 2010 14:30:46 +0000 (UTC) diff --git a/drivers/input/keyboard/twl4030_keypad.c b/drivers/input/keyboard/twl4030_keypad.c index 7aa59e0..aa13aec 100644 --- a/drivers/input/keyboard/twl4030_keypad.c +++ b/drivers/input/keyboard/twl4030_keypad.c @@ -326,30 +326,34 @@ static int __devinit twl4030_kp_program(struct twl4030_keypad *kp) */ static int __devinit twl4030_kp_probe(struct platform_device *pdev) { - struct twl4030_keypad_data *pdata = pdev->dev.platform_data; - const struct matrix_keymap_data *keymap_data = pdata->keymap_data; + struct twl4030_keypad_data *pdata; + const struct matrix_keymap_data *keymap_data; struct twl4030_keypad *kp; struct input_dev *input; u8 reg; int error; - + if (!pdev) { + printk(KERN_ERR "Invalid platorm_device\n"); + return -EINVAL; + } + pdata = pdev->dev.platform_data; if (!pdata || !pdata->rows || !pdata->cols || pdata->rows > TWL4030_MAX_ROWS || pdata->cols > TWL4030_MAX_COLS) { dev_err(&pdev->dev, "Invalid platform_data\n"); return -EINVAL; } - + keymap_data = pdata->keymap_data; kp = kzalloc(sizeof(*kp), GFP_KERNEL); + if (!kp) + return -ENOMEM; input = input_allocate_device(); - if (!kp || !input) { + if (!input) { error = -ENOMEM; - goto err1; + goto err0; } - /* Get the debug Device */ kp->dbg_dev = &pdev->dev; kp->input = input; - kp->n_rows = pdata->rows; kp->n_cols = pdata->cols; kp->irq = platform_get_irq(pdev, 0); @@ -424,6 +428,7 @@ err2: input = NULL; err1: input_free_device(input); +err0: kfree(kp); return error; }