From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (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 01D393B38A2 for ; Wed, 17 Jun 2026 07:20:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781680843; cv=none; b=jIzPQk8rhAmeFJyRhxJnof0o38KnP9AQoEME+F4AvrNUyS+hMlW9XDmckUbtRPRTXkXj6Y2S7IC2Zm+wBibWuQyO7AY2xaRKS1CZZw1NYSmLpUQ+7Kb7rma6VbJiULTjZU9xhKCmkq8eaID74vrY+E6YxBgqS/fBeZto/IR8l1E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781680843; c=relaxed/simple; bh=CV7PJ/AkuS3OVQC4qRK25r81fhUlw3tcyoD5zG2xuWE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lVLsug2vxd5vzLR6VlbrSgG1XmjYxl/SjttKeDVf0wlr2HMY2MoEp9kBlnY9IIhW1FY8/EXkzIF+fDwBEcYVCAu0PCzf4w2KCAJ5XAUGTtP59jGQIG4Suy0svo3oCkq+0qk9NUf+ChD/2JTRhwyC5Us3uC0NHIwvlsOeXdfo/iI= 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=BTimmRna; arc=none smtp.client-ip=209.85.214.172 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="BTimmRna" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2c0c3315c5dso56819785ad.3 for ; Wed, 17 Jun 2026 00:20:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781680841; x=1782285641; 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=IQQU22W7VTSf4/MX/qZ4Mp7nZueHJQY0chKpfiwWsGc=; b=BTimmRnaqgVcnJsntjOvUExa262HiAu+kJfeiAMkw74MHkFT6ThdABQCUvK+IpbRGg obsefHeGYHcjUFDHHV+LD80Ke8kfvNj5xuKW+fro0Vk7tgKKZqaNMZFpOf7F5imN4Q+S s4Eg4y706/yUQ67g41mcSznmIRYh6L6e/ZbitBiYFahxnZMi3RRFtb6+DqvclGArt67x RuwQnEiGL+pnNx4ytKhXJiA1oDO33BA5P7e0YWxJQhLWJ5/n0G5u5jR2bbK/wM6lPZPP +hC35rMW6MP9FT73r/oOwwZNqdNl+zEYxVeifzzYH3a62JY62yKVE9MwTZFCbl70myg3 w1+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781680841; x=1782285641; 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=IQQU22W7VTSf4/MX/qZ4Mp7nZueHJQY0chKpfiwWsGc=; b=rDbmmr4ZqGBsaLV8HlohSVPt8qMnMhD3d2SxPS297mGpf/DL9IOTIOzTEOcQJOA5/D iqYbNwMUz6+AiS4y4MdK13N5Mlb60M0YXhCb7C/vmNV5vPfrwS+HP1TCKXYle5Wa1JHe s3uXAc4Te419u5ppPHcUb6oIITDH4Uc8FQwceCD1qwQBovXAEkXxT9Y12jkvPXrOv5WR HQCdjnkw6AJJfny7/gWTliINI/ShQACzc3quKe65DgnciPgtUoTHz+tCravwGy9A3dQC SVG2IZiu5JdH1xgCMGJQuHVakNEgBjdJAP/dqwf664XeF+axMF08VkP2VwTzzuOaQXpN aHMg== X-Forwarded-Encrypted: i=1; AFNElJ/WUiz+UpkL7anAbmaOgrxJsvV4AusA8bmNMExC6RDK9tw1Uy9mlRZu+OFnA6a3UbGzpaosvyvwgts9Lk0=@vger.kernel.org X-Gm-Message-State: AOJu0YwoMn/Bt1kcyqbndQjFcBhJcx3lCroxp1wwdc1E2GqhmGYgsuiJ v6vbVTDIgkL2fJyk7lIi5m6c5jx6zdlaNqFgGsRXa/HZ0HKdsHTl5OvL X-Gm-Gg: AfdE7cngQx2/dL0rZFVArF6MCX5hrpgh87NrvIKQ6FrhQ0u7yCv31lNAqnhOJ147UmL 4jNNMm+K4C0y6zQA+a/v0OZ5sPiv3n9f7H7BMroHXCppStCe+lVGUsIumOP9JiJu0w0ITkDoM9p QZSzwEVKLaI8lN/yVSAYYlzd9ps8S+4L14djnmTtX2xG0nnbShfaA7u6kWDRNit3f9zn+e8u2+n 84R/vvmbs3DMZMOFuFXqpgipoOqbXlJbcSDnscVVN5O6D5vswB3BXgmBVEjbFcrCqXqgM5JaEDx v/01K/zptNc1VCgGTQt69BtYaUEVfaP9FNBgBkZa6rbQAbqiBwT3i6gP2rfHt5ejqnwj+fXyO/o l41SVHAfuZw1KCbq2qduCh5VW4ObweuINKFbIM7Gj1Jv0qRjHgZ6ZgxNVx6OOnEuyAKtpND0fSC p0VXXYFnQTkH5tpcRshDe90TsC7So0nsUE X-Received: by 2002:a17:903:b86:b0:2c6:ab89:4ff1 with SMTP id d9443c01a7336-2c6bc0ab228mr23751795ad.12.1781680841323; Wed, 17 Jun 2026 00:20:41 -0700 (PDT) Received: from haichao.tail057a43.ts.net ([2001:da8:e000:1206:1886:6b7a:3e78:272c]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c6be262c52sm11854425ad.80.2026.06.17.00.20.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 00:20:40 -0700 (PDT) From: Ruoyu Wang To: Ping Cheng , Jason Gerecke Cc: Jiri Kosina , Benjamin Tissoires , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, Ruoyu Wang Subject: [PATCH v2] HID: wacom: avoid copying Bluetooth input reports Date: Wed, 17 Jun 2026 15:20:35 +0800 Message-ID: <20260617072035.3373487-1-ruoyuw560@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260606040344.4-1-ruoyuw560@gmail.com> References: <20260606040344.4-1-ruoyuw560@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 wacom_intuos_bt_irq() duplicates the received Bluetooth report with kmemdup() so that it can pass 10-byte input report payloads to the common Intuos parser. The helper then copies each payload back into wacom->data before calling wacom_intuos_irq(). Avoid the allocation and copy by temporarily pointing wacom->data at the current 10-byte payload while the common parser runs, then restoring the original report pointer. The Bluetooth report parser keeps using the original report buffer for dispatch and battery parsing, while the common parser sees the same payload bytes as before. This also removes the unchecked kmemdup() result from the Bluetooth IRQ path. Suggested-by: Jason Gerecke Signed-off-by: Ruoyu Wang --- Changes in v2: - Replace the kmemdup()/memcpy() path with temporary wacom->data pointer substitution, as suggested by Jason. drivers/hid/wacom_wac.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index da1f0ea85625d..a29bf051ada7c 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c @@ -1192,8 +1192,11 @@ static int int_dist(int x1, int y1, int x2, int y2) static void wacom_intuos_bt_process_data(struct wacom_wac *wacom, unsigned char *data) { - memcpy(wacom->data, data, 10); + u8 *saved_data = wacom->data; + + wacom->data = data; wacom_intuos_irq(wacom); + wacom->data = saved_data; input_sync(wacom->pen_input); if (wacom->pad_input) @@ -1202,7 +1205,7 @@ static void wacom_intuos_bt_process_data(struct wacom_wac *wacom, static int wacom_intuos_bt_irq(struct wacom_wac *wacom, size_t len) { - u8 *data = kmemdup(wacom->data, len, GFP_KERNEL); + u8 *data = wacom->data; int i = 1; unsigned power_raw, battery_capacity, bat_charging, ps_connected; @@ -1242,7 +1245,6 @@ static int wacom_intuos_bt_irq(struct wacom_wac *wacom, size_t len) break; } - kfree(data); return 0; } -- 2.51.0