From patchwork Mon Oct 16 09:32:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 826204 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=bgdev-pl.20150623.gappssmtp.com header.i=@bgdev-pl.20150623.gappssmtp.com header.b="LbgaOmqg"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yFtR30W5gz9s0g for ; Mon, 16 Oct 2017 20:33:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751776AbdJPJci (ORCPT ); Mon, 16 Oct 2017 05:32:38 -0400 Received: from mail-wm0-f54.google.com ([74.125.82.54]:55075 "EHLO mail-wm0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751448AbdJPJch (ORCPT ); Mon, 16 Oct 2017 05:32:37 -0400 Received: by mail-wm0-f54.google.com with SMTP id i124so1114304wmf.3 for ; Mon, 16 Oct 2017 02:32:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=FiX8nF/F+rpsRTbcGEVpZQqqB3+YBChf7WY2Gh1ablM=; b=LbgaOmqgl8xH7sEIGDq4C80I3z5BFO1rvrgaeF6H8UTUoSMv42pnBydHB81dsJi2KC pGHTsD5umVCsAG2KYV1zr8rzithJdnztVT+Ij//Es9Fj9XVJKOpCiJUOcQPfRVBmqFp6 yFI++mizoAYKxmq0ojN5RKADyadB1uo0+vdXEMscQuWCIAwi6BVHqYAbE0QMdFWYBPh4 yOGdGMAB1C/LZJe0coo1u/rGMHwdJgx92t2hgEqlMM5IdOgSk6J6tXKTjcCmgaxwtUVw DmBZ+zEUH15tziPeWvXrJgbLT9D5w6n60n/vHF2j2SMqgqM4MH38BDukAKLmpHpkmwzX x2Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=FiX8nF/F+rpsRTbcGEVpZQqqB3+YBChf7WY2Gh1ablM=; b=mmWrD5YaN8u1qgt0bnfukpiLZMaIBrUZ14F0KRlM1/HLxnkYZ1JRD7CpdcObFDfz5w xzbf+MHDM+ooZOnhbsag4EwMTB26amvIjPRMxYbjuSaZjZc6npay6CVV9A5yKce47AH1 Jd7LHUrnrgMeq9e/x+UBSJ8EN9nihWF2K5Vlek9bQ5tHsywx+KyBfP5TxChq189rsIEd 6nOKesxXB0GkwCKMgWvNE3HDT/vGkQn6fXneVpFoZwjLuFf3DCYNp4yZ6YCQ12zamTkS Gh2fCOy6j3ZN1RnW1skPc11mHiiLhIgQpcUJtplvfJFoT2CY7SJuclGc2u/VTQw/z9pV NpHA== X-Gm-Message-State: AMCzsaXQphCMsw0H2pk5rNwQQjZkA5JWCtD/UvnLiF+ezIjuiFXkxjgT ZWGFE8ay5bbjBtk8HNT4DV68/A== X-Google-Smtp-Source: AOwi7QB38LhHUH+1kov/VfoSe7zJM3IKNPkTA0bLDitoyzNr89J3lPPb+o7Z8bXaM7VfjWEcQtpLyQ== X-Received: by 10.223.154.74 with SMTP id z68mr7405117wrb.36.1508146356635; Mon, 16 Oct 2017 02:32:36 -0700 (PDT) Received: from localhost.localdomain ([90.63.244.31]) by smtp.gmail.com with ESMTPSA id l19sm8043793wre.26.2017.10.16.02.32.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 16 Oct 2017 02:32:36 -0700 (PDT) From: Bartosz Golaszewski To: Linus Walleij Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 1/2] gpiolib: only check line handle flags once Date: Mon, 16 Oct 2017 11:32:29 +0200 Message-Id: <20171016093230.5329-2-brgl@bgdev.pl> X-Mailer: git-send-email 2.13.2 In-Reply-To: <20171016093230.5329-1-brgl@bgdev.pl> References: <20171016093230.5329-1-brgl@bgdev.pl> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org There's no need to check the validity of handle request flags more than once, right after copying the data from user. Move the check out of the for loop and simplify the error path by bailing out before allocating any resources. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index eb80dac4e26a..5d98345c9dc8 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -444,12 +444,19 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip) struct linehandle_state *lh; struct file *file; int fd, i, ret; + u32 lflags; if (copy_from_user(&handlereq, ip, sizeof(handlereq))) return -EFAULT; if ((handlereq.lines == 0) || (handlereq.lines > GPIOHANDLES_MAX)) return -EINVAL; + lflags = handlereq.flags; + + /* Return an error if an unknown flag is set */ + if (lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) + return -EINVAL; + lh = kzalloc(sizeof(*lh), GFP_KERNEL); if (!lh) return -ENOMEM; @@ -470,7 +477,6 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip) /* Request each GPIO */ for (i = 0; i < handlereq.lines; i++) { u32 offset = handlereq.lineoffsets[i]; - u32 lflags = handlereq.flags; struct gpio_desc *desc; if (offset >= gdev->ngpio) { @@ -478,12 +484,6 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip) goto out_free_descs; } - /* Return an error if a unknown flag is set */ - if (lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) { - ret = -EINVAL; - goto out_free_descs; - } - desc = &gdev->descs[offset]; ret = gpiod_request(desc, lh->label); if (ret) From patchwork Mon Oct 16 09:32:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 826205 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=bgdev-pl.20150623.gappssmtp.com header.i=@bgdev-pl.20150623.gappssmtp.com header.b="Sp9cJLY5"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yFtR35cbJz9sPk for ; Mon, 16 Oct 2017 20:33:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751410AbdJPJdC (ORCPT ); Mon, 16 Oct 2017 05:33:02 -0400 Received: from mail-wm0-f53.google.com ([74.125.82.53]:55801 "EHLO mail-wm0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751358AbdJPJci (ORCPT ); Mon, 16 Oct 2017 05:32:38 -0400 Received: by mail-wm0-f53.google.com with SMTP id u138so1118715wmu.4 for ; Mon, 16 Oct 2017 02:32:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LCd3YgO21Bush6mUec49uBC3Qhwzosd3/NgP9RqFlC0=; b=Sp9cJLY5oJ8ZNPxcNvn502R4Rj0Cqsuma0E5QU+DfEatvH1VOhPDTllmkXmXTqraq1 MB3bbuykbm97f1uV0Eya/WVTxEHy3ATWEylqe7gm9okoyrTDllOdcsQnVc4hSpuB6anQ 0FNykw6MADNRci2/NaHE/Yc5aoBok65V2+SRtkUt6NvC70uTOQqaz6P7xTBW7XHsuaxD oYvCQMgRzHrPE7Jsq9BnUlD09oUsY+q+W/Zjw00D0MCBU8kThKQkYT62qpBU4hQTz2OF SmDRkYRy0veIZ4DaZqNTMBk0/LIa8pTjlogxnypF/peVkq0i96OVqQshhG7qwf1DW0KO 3UnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=LCd3YgO21Bush6mUec49uBC3Qhwzosd3/NgP9RqFlC0=; b=JIVPQmrWI6p9QaPEleilun2K+c0FJhJglgp/XJejPxyGrHt8j/Wr4rZ/0I/xfXiyDt DPtxTMkGdn8BeT/uODRWn8SFG43gB+9yUoaO05wFnCko0cVDe8IIf6MnWu9C+hZwKrSn smlR1JXhoSufX1GJoF+mIu8cl3aGGbHcnUTAul5EbJqRn1t+CEmmu4uTPVZA2cS2tlYG KGVafBUwuZnUxWno9uT/O++1vATjGANU22hUU2kqTxCOYqRK7D2q9tzfkF4Dm5Fp+70b wrbfFEfJbjzF5g4MqCghJckS7IB3kGx8xjqw74O35DLDZGfjxz4sK0wtxVpQyyeD9X1i xwRQ== X-Gm-Message-State: AMCzsaXyHhY/P6ee11SRtHJx50UxhSjRsqfTB5N7NA+ASOolsMNHFXLE k0kAod3PWPokAVAc+WJL1JnjeAj5uTw= X-Google-Smtp-Source: AOwi7QAr/4yHu4iID2/vzDu4ZwX7WS8uJc0ljz89wkejXFZdCWnY6FTmnj/moR7LLe3s1lrKF/EmfA== X-Received: by 10.223.152.86 with SMTP id v80mr6880637wrb.268.1508146357527; Mon, 16 Oct 2017 02:32:37 -0700 (PDT) Received: from localhost.localdomain ([90.63.244.31]) by smtp.gmail.com with ESMTPSA id l19sm8043793wre.26.2017.10.16.02.32.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 16 Oct 2017 02:32:36 -0700 (PDT) From: Bartosz Golaszewski To: Linus Walleij Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH 2/2] gpiolib: don't allow OPEN_DRAIN & OPEN_SOURCE flags for input Date: Mon, 16 Oct 2017 11:32:30 +0200 Message-Id: <20171016093230.5329-3-brgl@bgdev.pl> X-Mailer: git-send-email 2.13.2 In-Reply-To: <20171016093230.5329-1-brgl@bgdev.pl> References: <20171016093230.5329-1-brgl@bgdev.pl> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org OPEN_DRAIN and OPEN_SOURCE flags only affect the way we drive a GPIO line, so they only make sense for output mode. Just as we only allow input mode for event handle requests, don't allow passing open-drain and open-source flags for any other mode than explicit output. Signed-off-by: Bartosz Golaszewski --- drivers/gpio/gpiolib.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 5d98345c9dc8..eac86ead6cfa 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -457,6 +457,12 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip) if (lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS) return -EINVAL; + /* OPEN_DRAIN and OPEN_SOURCE flags only make sense for output mode. */ + if (!(lflags & GPIOHANDLE_REQUEST_OUTPUT) && + ((lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN) || + (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE))) + return -EINVAL; + lh = kzalloc(sizeof(*lh), GFP_KERNEL); if (!lh) return -ENOMEM;