Received: by 2002:a05:7412:5112:b0:fa:6e18:a558 with SMTP id fm18csp1577697rdb; Wed, 24 Jan 2024 22:47:24 -0800 (PST) X-Google-Smtp-Source: AGHT+IGLnPHCd+ug1kH7yofy0U7+egrQJpcrryDfBSKi1Lde/vLkzp/a3NefAvFk5XqV7LUUhTg6 X-Received: by 2002:a62:5b81:0:b0:6db:d140:cbc0 with SMTP id p123-20020a625b81000000b006dbd140cbc0mr233142pfb.35.1706165244170; Wed, 24 Jan 2024 22:47:24 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706165244; cv=pass; d=google.com; s=arc-20160816; b=yMpMCmX1qneOv+/PUvvRZ/KhuBPPAoku/ULcolKvx/zLiSD/KwbdWSdp78JZ/0Q5u+ 8qG/FYfMx5cvWHUeWrLKgR9HZnD520C3XypIw/8hROE9QrC0RRW+knUDCAWFBNO8YohD twCmsjC0PW+5woSW0szp97ZClcIKNALIEQLh76G1ax5QzikHqbDp0DfsU++B3bSC/4bC 6OF/8B5KADMMpFZyqU9+8CbF6+hFqzzYeef0pCuW+NNriN/GPPKIdjTl9tXR1JIhnGzZ 61BgCT9sw3CajkQdcEdhfnB9wV0emmUiso08DY9mRq8K/BMyCSxzpF2s0UZKdUjlX8tr 5IKQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from; bh=tlgH97I9xC84RYAI49KV004PQrsKGjj/cUxB+VCa6sM=; fh=QkWoV8oBxMHUgqxJziXxBn/OaWbinZugR+ig3PeSbIE=; b=mAu7xbEbh2jNbXyznGKPl68a8Mld71vXuYRCn/Lgu9zMXnkkALeVEZtGJtBnSROVLH qi9NiGCh8CMAJ7tQp/yhoPJbW9f5VklS28E7jc3rm5EX9pqAd54uzIQxc5Wn1HEvYUTi ks77VNGgIBfoB0qmzmFLifpDPXnZ6QJZqW2q74AzRNzdBo8fo/K9gZjezHeltMfET4qg ednVdRgq5oepSs0w2UlWIlpQ95NlrpktX6vM6B7NBDuJQ7VftPi4Xm4qb072NvVdTX02 5UfAgIx982YXtLVL8E+mBtnlRsKk2p+b88m8NZRGiYk8LRkrk7P+hUV4uIkGx4brj0Ok kKQw== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=nfschina.com); spf=pass (google.com: domain of linux-kernel+bounces-38042-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-38042-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id s23-20020a62e717000000b006dda22fe678si1828084pfh.18.2024.01.24.22.47.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 22:47:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-38042-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=nfschina.com); spf=pass (google.com: domain of linux-kernel+bounces-38042-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-38042-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 3A51E28CD19 for ; Thu, 25 Jan 2024 06:40:00 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 58A641803E; Thu, 25 Jan 2024 06:33:19 +0000 (UTC) Received: from mail.nfschina.com (unknown [42.101.60.195]) by smtp.subspace.kernel.org (Postfix) with SMTP id 3A2FD17BB3; Thu, 25 Jan 2024 06:33:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=42.101.60.195 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706164398; cv=none; b=DbX52M6tRUjYXpWOZX3D/3Q0ApDJ0GQXyeHyd3+2qDvJfrIaPewbDSxzY75N8V7dsyJyeUy83VIIRlLu2ottPI7TYh/G+uenNVvw3fuFXPRgFb/lrXBdKRx2cwNWqRK53RP4e9twlw92Wf40QXeGUYxyvtuBU1dk6DCAQnDxm/8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706164398; c=relaxed/simple; bh=O3xIRxDbYOxVI2Z7tBOKEYs1HYeab7mX97qcSE25kmo=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=Eg20hW0S2VrcO13ZgPDc/BwUX6be5LG6nneRv55709CKm4pp5B41A4seLvoZM5wn7+xgyrenpNk7GVk1W6gE7NBeXxC8K7qDeLPAR+UgDQIzq4kaPimmNkuyjXIsGkImUo7l0qznIRnR9XEeGpH4+jaEBBL+ZzHC881u4IBDsLs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=nfschina.com; spf=pass smtp.mailfrom=nfschina.com; arc=none smtp.client-ip=42.101.60.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=nfschina.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nfschina.com Received: from localhost.localdomain (unknown [180.167.10.98]) by mail.nfschina.com (Maildata Gateway V2.8.8) with ESMTPSA id A13DF6082FC27; Thu, 25 Jan 2024 14:32:40 +0800 (CST) X-MD-Sfrom: suhui@nfschina.com X-MD-SrcIP: 180.167.10.98 From: Su Hui To: jikos@kernel.org, benjamin.tissoires@redhat.com Cc: Su Hui , mail@karthek.com, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org Subject: [PATCH] HID: hidraw: fix a problem of memory leak in hidraw_release() Date: Thu, 25 Jan 2024 14:32:26 +0800 Message-Id: <20240125063225.2796234-1-suhui@nfschina.com> X-Mailer: git-send-email 2.30.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 'struct hidraw_list' is a circular queue whose head can be smaller than tail. Using 'list->tail != list->head' to release all memory that should be released. Fixes: a5623a203cff ("HID: hidraw: fix memory leak in hidraw_release()") Signed-off-by: Su Hui --- drivers/hid/hidraw.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c index 13c8dd8cd350..2bc762d31ac7 100644 --- a/drivers/hid/hidraw.c +++ b/drivers/hid/hidraw.c @@ -357,8 +357,11 @@ static int hidraw_release(struct inode * inode, struct file * file) down_write(&minors_rwsem); spin_lock_irqsave(&hidraw_table[minor]->list_lock, flags); - for (int i = list->tail; i < list->head; i++) - kfree(list->buffer[i].value); + while (list->tail != list->head) { + kfree(list->buffer[list->tail].value); + list->buffer[list->tail].value = NULL; + list->tail = (list->tail + 1) & (HIDRAW_BUFFER_SIZE - 1); + } list_del(&list->node); spin_unlock_irqrestore(&hidraw_table[minor]->list_lock, flags); kfree(list); -- 2.30.2