Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp133895pxb; Wed, 11 Nov 2020 22:47:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJxgeIgFTltML8R83rYMcgBPHFt8d/ggXAQFLQlr4rYtn3iqWzvn3vHmHKltmaPs4F+smuqQ X-Received: by 2002:a17:906:804:: with SMTP id e4mr28108701ejd.420.1605163657295; Wed, 11 Nov 2020 22:47:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605163657; cv=none; d=google.com; s=arc-20160816; b=wzHOMKnYEACX5pkO7lQmDCNNHD4l33Df7lUDNzmgfP791rT7BvlbgsGUpY53q/TFsn rdTe5Y3Pdj72QFdRBdezV4FnyDLuPgZMXL2DgJ2ZEyeMX2g6AfQD/42kZR3li8jA1xTT IPbRYFcMx/2nLPsz/tmsHKsF0hlt0lez8UVTQ/PR6gu3iNFs3vrUUnK5cTGmvVbI31t9 mlsfWgrILUKm7sUURwZO0jMfYtE4dTV95YXmrpY/7LvII8MTcBhuwM/ELhGI2+ytN9hQ WriDlt3hgbP9E2lnm6UT/zv/JFPyhSP0XD9e+bxirO128IAEnU5BFFHuC0GZgAhekuCu ySuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=Ua+ZalqpZ2LLaOt7cfpnHhJ0g0OGM4Bq8IjHAO+MxYQ=; b=PZImZRWgRqc6X7JyoAjYsLkuXCLDVoPxiSLU0+RwuhxWztdRssfIfFlXGJnfQiNUe8 XN+iy6QO98d1dKSlJb2f8WUT7ls8+AQV31IENHLtXqMhL8DjeRfRInuplcTanlRfx0mF 9Vl9TfSEAt7rra/xXMMyke6Cy2W2pFgTnXSRyWxunNomum7oxlFCiA28RgR8BagLq7qb gCcP+WA7TCK3IPtd4AzKh+HfqH6O7SO474Zfw8mu+uNCfimZd4J0bOPzJlYK4pDUj+Fy V+QKX/dH8U+7wsZkK/WrmIwcBTVIjSrMRi11VJz0Pqj/JO39T0y+CospCdHWjIqJqqDX id5w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a3si3034068ejx.273.2020.11.11.22.47.13; Wed, 11 Nov 2020 22:47:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726181AbgKLGow (ORCPT + 99 others); Thu, 12 Nov 2020 01:44:52 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:8066 "EHLO szxga05-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725898AbgKLGov (ORCPT ); Thu, 12 Nov 2020 01:44:51 -0500 Received: from DGGEMS413-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4CWsXN6H8HzLx8Y; Thu, 12 Nov 2020 14:44:36 +0800 (CST) Received: from localhost.localdomain.localdomain (10.175.113.25) by DGGEMS413-HUB.china.huawei.com (10.3.19.213) with Microsoft SMTP Server id 14.3.487.0; Thu, 12 Nov 2020 14:44:41 +0800 From: Jing Xiangfeng To: , , , , , , CC: , , Subject: [PATCH] staging: gasket: interrupt: fix the missed eventfd_ctx_put() in gasket_interrupt.c Date: Thu, 12 Nov 2020 14:49:24 +0800 Message-ID: <20201112064924.99680-1-jingxiangfeng@huawei.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.175.113.25] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org gasket_interrupt_set_eventfd() misses to call eventfd_ctx_put() in an error path. We check interrupt is valid before calling eventfd_ctx_fdget() to fix it. There is the same issue in gasket_interrupt_clear_eventfd(), Add the missed function call to fix it. Fixes: 9a69f5087ccc ("drivers/staging: Gasket driver framework + Apex driver") Signed-off-by: Jing Xiangfeng --- drivers/staging/gasket/gasket_interrupt.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/staging/gasket/gasket_interrupt.c b/drivers/staging/gasket/gasket_interrupt.c index 2d6195f7300e..864342acfd86 100644 --- a/drivers/staging/gasket/gasket_interrupt.c +++ b/drivers/staging/gasket/gasket_interrupt.c @@ -487,14 +487,16 @@ int gasket_interrupt_system_status(struct gasket_dev *gasket_dev) int gasket_interrupt_set_eventfd(struct gasket_interrupt_data *interrupt_data, int interrupt, int event_fd) { - struct eventfd_ctx *ctx = eventfd_ctx_fdget(event_fd); - - if (IS_ERR(ctx)) - return PTR_ERR(ctx); + struct eventfd_ctx *ctx; if (interrupt < 0 || interrupt >= interrupt_data->num_interrupts) return -EINVAL; + ctx = eventfd_ctx_fdget(event_fd); + + if (IS_ERR(ctx)) + return PTR_ERR(ctx); + interrupt_data->eventfd_ctxs[interrupt] = ctx; return 0; } @@ -505,6 +507,9 @@ int gasket_interrupt_clear_eventfd(struct gasket_interrupt_data *interrupt_data, if (interrupt < 0 || interrupt >= interrupt_data->num_interrupts) return -EINVAL; - interrupt_data->eventfd_ctxs[interrupt] = NULL; + if (interrupt_data->eventfd_ctxs[interrupt]) { + eventfd_ctx_put(interrupt_data->eventfd_ctxs[interrupt]); + interrupt_data->eventfd_ctxs[interrupt] = NULL; + } return 0; } -- 2.17.1