From patchwork Mon Jan 12 16:12:24 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 427795 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 0C394140192 for ; Tue, 13 Jan 2015 03:14:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753545AbbALQMx (ORCPT ); Mon, 12 Jan 2015 11:12:53 -0500 Received: from mail-lb0-f171.google.com ([209.85.217.171]:48505 "EHLO mail-lb0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753448AbbALQMr (ORCPT ); Mon, 12 Jan 2015 11:12:47 -0500 Received: by mail-lb0-f171.google.com with SMTP id w7so18704333lbi.2; Mon, 12 Jan 2015 08:12:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=rm6rdBzyoGRw7kWAGaYR40RFsFTdXar/gtUcDv98620=; b=AFtvuACuowgelv74GwWDGwLrAYheS3mE/mFdkFzZXd7RbzH/71D3cbkelrwm/mkfHO i0OMsOlTdVvhbjZTcrcEeKJCyDbDrySxwnTQ1LUYujQGnfKon87F9GMUDq8WAV1egTwD /wN87zBfKssQwItcHip2Xbxi/5NkxD7uEY9Q0OUkUlE1g/9S2CYURjAcOLhkm2UyXPwV 0kUDRFuLUwwbkuHRxr/9IvBSDGZttuEMsaI407tV9JS1vVTOooKU5tzsTlJlAhfGMTj/ wf3l2A9ipYwb7sQtL6oCeoJYTIGNNQFijkkZv7a6HKa4OC9pW3Z9Au6vfvADyyeL/VxH IezQ== X-Received: by 10.152.5.198 with SMTP id u6mr38052401lau.42.1421079164902; Mon, 12 Jan 2015 08:12:44 -0800 (PST) Received: from xi.terra (s83-177-171-8.cust.tele2.se. [83.177.171.8]) by mx.google.com with ESMTPSA id kw10sm83680lac.45.2015.01.12.08.12.43 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Jan 2015 08:12:43 -0800 (PST) Received: from johan by xi.terra with local (Exim 4.84) (envelope-from ) id 1YAhbo-0000ao-Nr; Mon, 12 Jan 2015 17:12:52 +0100 From: Johan Hovold To: Linus Walleij Cc: Alexandre Courbot , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , stable Subject: [PATCH 1/6] gpio: fix memory and reference leaks in gpiochip_add error path Date: Mon, 12 Jan 2015 17:12:24 +0100 Message-Id: <1421079149-2236-2-git-send-email-johan@kernel.org> X-Mailer: git-send-email 2.0.5 In-Reply-To: <1421079149-2236-1-git-send-email-johan@kernel.org> References: <1421079149-2236-1-git-send-email-johan@kernel.org> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org Memory allocated and references taken by of_gpiochip_add and acpi_gpiochip_add were never released on errors in gpiochip_add (e.g. failure to find free gpio range). Fixes: 391c970c0dd1 ("of/gpio: add default of_xlate function if device has a node pointer") Fixes: 664e3e5ac64c ("gpio / ACPI: register to ACPI events automatically") Cc: stable Signed-off-by: Johan Hovold --- drivers/gpio/gpiolib.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 487afe6f22fc..89c59f5f1924 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -277,6 +277,9 @@ int gpiochip_add(struct gpio_chip *chip) spin_unlock_irqrestore(&gpio_lock, flags); + if (status) + goto fail; + #ifdef CONFIG_PINCTRL INIT_LIST_HEAD(&chip->pin_ranges); #endif @@ -284,12 +287,12 @@ int gpiochip_add(struct gpio_chip *chip) of_gpiochip_add(chip); acpi_gpiochip_add(chip); - if (status) - goto fail; - status = gpiochip_export(chip); - if (status) + if (status) { + acpi_gpiochip_remove(chip); + of_gpiochip_remove(chip); goto fail; + } pr_debug("%s: registered GPIOs %d to %d on device: %s\n", __func__, chip->base, chip->base + chip->ngpio - 1,