From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f180.google.com (mail-dy1-f180.google.com [74.125.82.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6D8B538BF91 for ; Thu, 26 Mar 2026 06:25:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.180 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774506348; cv=none; b=ecGWzdf9OT70FXRd8iZuJMTr7Ebwb1OV7ueozrIWs8RUY3KzCF2+Typ/vudQhuZz7zqm5M9ZFls6CCAeIA/goW8i+bMCKw2NmJT7z9fTfpiwIIGl4WUlpNcnOtFXqGHzGE6eSY6YAN2dIFcW0sqDcZQgDfvPCUuMzsGjoB05ERc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774506348; c=relaxed/simple; bh=E+4C3n1s7tOvVik6cAb2pb9Je5bsVW5yonX4fJHWRDk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JYoYjJu94jIER6wGlaz1An+wz7HG2z4WzN3zrseK9oq4VowOzp2ZNee1b1FCImrr87qykZ9orrACwapQlqhDF4H1k8jbf66TVmDoGUYUurRcIQWLYMzud+Wzgyv5UEGxxLqE7dVJuFnCoHG/aV4Ke5Dz02HXwmP07qkGvzECce8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lUyXaE4M; arc=none smtp.client-ip=74.125.82.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lUyXaE4M" Received: by mail-dy1-f180.google.com with SMTP id 5a478bee46e88-2bd9a485bd6so1255553eec.1 for ; Wed, 25 Mar 2026 23:25:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774506347; x=1775111147; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HuSy2/PhgqqDWpXtTQHNQtoOW4iKSEs+6du+OT5tKB4=; b=lUyXaE4MGm1n7ZafjgcDskvZSUvMW6j0y11kBNLlwGLQRgCbYKNTB52fK00McmuDzn EiSfrFZwuxrlc//Owh4N6Ji9c4KwwVamA28lwdqjaAD4x8TavxR0N4QVcn0BZgjqtVZ/ l3jBMbJa6aN8MRzUzkupCn/G6E39AL7N5TA+Omyotc1wErzeq+Wv+fo1AYD5ZdSs6esY +2htcJgTwltDX4nPdaNyvmNzXxuyw0eFyAzmRiBIBqpUkzzuHuKsNDQSw00dm1J+Yi2v BxwJ5eaWGNEueyU4x84HopQCjpik2N/Yh+Y7riWMlruYoKOYqFLsUxMJOTdEU/oXKeyA ug4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774506347; x=1775111147; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=HuSy2/PhgqqDWpXtTQHNQtoOW4iKSEs+6du+OT5tKB4=; b=qjB5AvxcOd4cXnD/3cym12chLEAsIYxI/m9/M+codOXEgioqnIm6sBhEeK6gP8BcS1 vMa5Hz8r+XZtobrTs9yzCNkNiCJQMj75CsA3Zsc7Bk96XahkpaBCtxHu2IHLMXjsn/Mk +9nJ30fLNVDkzw/wAni2z1czruNwsg+ZjwyTUuBL9hIN3P+UK8QS15FGU/rP9C4P10GN ogFvVXO8x2j9KfoWw6REq/IzJ+lHKJ4E05kN1qsR0maIjPBmXy7yREzmjbdMNwwv0ikf 63VnpUYg1WhNxw9WST00Ywo+e4R/RPegWrBDeqoXN9Dw4Nz/CocCcgi1sJ04KAd6rVGA JDOg== X-Forwarded-Encrypted: i=1; AJvYcCWklZNmsfw5sl+t3z1B2fyO+Lror0IJYye+hEqzZAZHWG33uaKfEdwtqa6jxOKQF9Tl2h2En3KLli0/cfY=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7jT0DG0nIL6n15AqRdEP11EY11Oz6QRzyIZkFMR/HtuwOxuxk YR+QiBt4CeBGm8b2CaGquaHEPXTboFkXLuvBmz6Hss9EFCB7XHL+I9t1 X-Gm-Gg: ATEYQzwCy0mrnv+DDXN5wk3id3g7l9F8uSX0O15zrwMKrqQEjMX74juwyIJnwiGeODj 8cueJRcOhYcqkJFyvUcawysYW7h8Zw2pW84uee/KrOpLVw61eWlMWnqXaRqFULmQvY9OeJ+g0if yJFEpYx43E/VyULn644FAMDDT/TJfh8kMdwB3/MY4cRzTcSwIrCihnTEK6FKsJeypOhm3RD1OhK m9GCBbCgECZXA2VaMj7JByhVjXEbm3A/MTi9VExn14dgIcmZDS4tJU/lQpmCpMGz8f7xGhUYDHi qFzXpYWK4+6pfpB9kxN9Aq5TKTnjE5ha8qEuINLZlplfNcQ/Sd1wOXabAovIqDgwu8G1ClHPUlS Gm7BVnKiG/tg53533B7VfxZA6YNFjUOxg8FLUZorn+2gQRsvBA8+8enWwKH7jYEPGcXqheK7PE3 rq1SHgyjww3QbNI6TYvdZmVgYzKYFlwJ7OBPBu4iRVvYo1BFW0BgZGtspS/mYDkA2hQhbaOFgpA BIb0TPN4QefQxQ= X-Received: by 2002:a05:7300:a94b:b0:2c1:558c:16f0 with SMTP id 5a478bee46e88-2c15d3e2f5dmr4108426eec.22.1774506346526; Wed, 25 Mar 2026 23:25:46 -0700 (PDT) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:b7b4:352d:eb23:66e5]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c16edc047esm1659207eec.23.2026.03.25.23.25.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 23:25:45 -0700 (PDT) From: Dmitry Torokhov To: Jiri Kosina , Benjamin Tissoires Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] HID: core: use __free(kfree) and __free(kvfree) to clean up temporary buffers Date: Wed, 25 Mar 2026 23:25:38 -0700 Message-ID: <20260326062539.750272-2-dmitry.torokhov@gmail.com> X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog In-Reply-To: <20260326062539.750272-1-dmitry.torokhov@gmail.com> References: <20260326062539.750272-1-dmitry.torokhov@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit This simplifies error handling and protects against memory leaks. Signed-off-by: Dmitry Torokhov --- drivers/hid/hid-core.c | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index bb13dcb116a9..b40953e0f52e 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -924,7 +924,6 @@ static int hid_scan_main(struct hid_parser *parser, struct hid_item *item) */ static int hid_scan_report(struct hid_device *hid) { - struct hid_parser *parser; struct hid_item item; const __u8 *start = hid->dev_rdesc; const __u8 *end = start + hid->dev_rsize; @@ -936,7 +935,7 @@ static int hid_scan_report(struct hid_device *hid) hid_parser_reserved }; - parser = vzalloc(sizeof(struct hid_parser)); + struct hid_parser *parser __free(kvfree) = vzalloc(sizeof(*parser)); if (!parser) return -ENOMEM; @@ -987,7 +986,6 @@ static int hid_scan_report(struct hid_device *hid) } kfree(parser->collection_stack); - vfree(parser); return 0; } @@ -1246,7 +1244,6 @@ EXPORT_SYMBOL_GPL(hid_setup_resolution_multiplier); static int hid_parse_collections(struct hid_device *device) { - struct hid_parser *parser; struct hid_item item; const u8 *start = device->rdesc; const u8 *end = start + device->rsize; @@ -1259,7 +1256,7 @@ static int hid_parse_collections(struct hid_device *device) hid_parser_reserved }; - parser = vzalloc(sizeof(*parser)); + struct hid_parser *parser __free(kvfree) = vzalloc(sizeof(*parser)); if (!parser) return -ENOMEM; @@ -1267,10 +1264,9 @@ static int hid_parse_collections(struct hid_device *device) device->collection = kzalloc_objs(*device->collection, HID_DEFAULT_NUM_COLLECTIONS); - if (!device->collection) { - ret = -ENOMEM; - goto out; - } + if (!device->collection) + return -ENOMEM; + device->collection_size = HID_DEFAULT_NUM_COLLECTIONS; for (unsigned int i = 0; i < HID_DEFAULT_NUM_COLLECTIONS; i++) device->collection[i].parent_idx = -1; @@ -1322,7 +1318,6 @@ static int hid_parse_collections(struct hid_device *device) out: kfree(parser->collection_stack); - vfree(parser); return ret; } @@ -1358,9 +1353,9 @@ int hid_open_report(struct hid_device *device) * on a copy of our report descriptor so it can * change it. */ - __u8 *buf = kmemdup(start, size, GFP_KERNEL); + u8 *buf __free(kfree) = kmemdup(start, size, GFP_KERNEL); - if (buf == NULL) + if (!buf) return -ENOMEM; start = device->driver->report_fixup(device, buf, &size); @@ -1371,8 +1366,7 @@ int hid_open_report(struct hid_device *device) * needs to be cleaned up or not at the end. */ start = kmemdup(start, size, GFP_KERNEL); - kfree(buf); - if (start == NULL) + if (!start) return -ENOMEM; } @@ -1998,11 +1992,11 @@ static struct hid_report *hid_get_report(struct hid_report_enum *report_enum, int __hid_request(struct hid_device *hid, struct hid_report *report, enum hid_class_request reqtype) { - char *buf, *data_buf; + u8 *data_buf; int ret; u32 len; - buf = hid_alloc_report_buf(report, GFP_KERNEL); + u8 *buf __free(kfree) = hid_alloc_report_buf(report, GFP_KERNEL); if (!buf) return -ENOMEM; @@ -2021,17 +2015,13 @@ int __hid_request(struct hid_device *hid, struct hid_report *report, ret = hid_hw_raw_request(hid, report->id, buf, len, report->type, reqtype); if (ret < 0) { dbg_hid("unable to complete request: %d\n", ret); - goto out; + return ret; } if (reqtype == HID_REQ_GET_REPORT) hid_input_report(hid, report->type, buf, ret, 0); - ret = 0; - -out: - kfree(buf); - return ret; + return 0; } EXPORT_SYMBOL_GPL(__hid_request); -- 2.53.0.1018.g2bb0e51243-goog