Linux Input/HID development
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Even Xu <even.xu@intel.com>, Jiri Kosina <jkosina@suse.com>,
	Sasha Levin <sashal@kernel.org>,
	xinpeng.sun@intel.com, jikos@kernel.org, bentiss@kernel.org,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH AUTOSEL 6.18] HID: Intel-thc-hid: Intel-quicki2c: Fix buffer overflow
Date: Mon, 19 Oct 2026 09:46:54 -0400	[thread overview]
Message-ID: <20261019135441.1420968-123-sashal@kernel.org> (raw)
In-Reply-To: <20261019135441.1420968-1-sashal@kernel.org>

From: Even Xu <even.xu@intel.com>

[ Upstream commit 5e5c3b9db1c5910d6a9175c97b76a95566e4dc32 ]

The input and output buffers are used to store complete HID-over-I2C
packets, including their protocol headers. However, their sizes are
currently calculated from the payload length only.

Allocate enough space for both the payload and the packet header to
prevent a buffer overflow when the payload reaches its maximum size.

Signed-off-by: Even Xu <even.xu@intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---

LLM Generated explanations, may be completely bogus:

This is a two-line allocation-size fix for a real HID-over-I2C buffer
overflow in a driver that already exists on this 6.18.y tree. It should
be backported.

## PHASE 1: COMMIT MESSAGE FORENSICS

**Step 1.1: PARSE THE SUBJECT LINE**
- Record: **[HID / Intel-thc-hid / Intel-quicki2c] [Fix] [buffer
  overflow]**
- Subsystem prefix: `HID: Intel-thc-hid: Intel-quicki2c`
- Action verb: **Fix**
- Claimed intent: prevent overflow of HID-over-I2C input/output buffers

**Step 1.2: PARSE ALL COMMIT MESSAGE TAGS**
- Record:
  - `Signed-off-by: Even Xu <even.xu@intel.com>` (author; listed
    maintainer of INTEL THC)
  - `Signed-off-by: Jiri Kosina <jkosina@suse.com>` (HID maintainer)
  - No `Fixes:`, `Reported-by:`, `Tested-by:`, `Reviewed-by:`, `Acked-
    by:`, `Link:`, or `Cc: stable` (absence of those tags is expected
    for this review)
  - Pipeline-only tags ignored per instructions

**Step 1.3: ANALYZE THE COMMIT BODY TEXT**
- Record:
  - **Bug:** `input_buf` and `report_buf` hold complete HID-over-I2C
    packets (`__le16 len` + payload), but they are allocated from
    payload length only (`max_input_len` / `max_output_len`, floored at
    4K).
  - **Symptom/failure mode:** buffer overflow when the payload reaches
    that maximum (2 bytes past the end: `HIDI2C_LENGTH_LEN ==
    sizeof(__le16)`).
  - **Version info:** none in the message.
  - **Root cause:** allocation size omitted the 2-byte HID-over-I2C
    length header.

**Step 1.4: DETECT HIDDEN BUG FIXES**
- Record: Not a hidden fix. The subject and body state a buffer overflow
  and the diff matches that claim.

## PHASE 2: DIFF ANALYSIS - LINE BY LINE

**Step 2.1: INVENTORY THE CHANGES**
- Record:
  - File: `drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c` (+4
    / −2; net +2)
  - Function: `quicki2c_alloc_report_buf()`
  - Scope: **single-file surgical fix**

**Step 2.2: UNDERSTAND THE CODE FLOW CHANGE**
- Record:
  - **Hunk 1 (input_buf):** `devm_kzalloc(..., max_report_len)` →
    `devm_kzalloc(..., HIDI2C_PACKET_LEN(max_report_len))`
  - **Hunk 2 (report_buf):** same change
  - Path: probe-time allocation (`quicki2c_probe` →
    `quicki2c_alloc_report_buf`). Runtime use of those buffers is
    unchanged.

**Step 2.3: IDENTIFY THE BUG MECHANISM**
- Record:
  - **Category:** memory safety / buffer overflow (out-of-bounds write)
  - **Mechanism:** packets are `struct hidi2c_report_packet { __le16
    len; u8 data[]; }`. `HIDI2C_PACKET_LEN(data_len)` is `(data_len) +
    HIDI2C_LENGTH_LEN`. Allocation used payload size only.
  - Verified consumers:
    - `handle_input_report()` DMA-copies into `input_buf` via
      `thc_rxdma_read()` → `sg_copy_to_buffer(..., read_buff, mes_len)`
      with **no destination-size argument**.
    - `quicki2c_get_report()` SWDMA-reads into `input_buf`.
    - `quicki2c_init_write_buf()` / `write_cmd_to_txdma()` build framed
      packets in `report_buf` (length field + payload, plus command
      bytes).
  - This is **not** a lock/refcount/init/API change.

**Step 2.4: ASSESS THE FIX QUALITY**
- Record:
  - **Quality:** obviously correct. Uses an existing macro from
    `include/linux/hid-over-i2c.h` that this tree already has.
  - **Minimal:** two allocation sizes in one function.
  - **Regression risk:** very low. Extra 2 bytes per buffer; no API,
    locking, or control-flow change.
  - **Caveat (not a reason to reject):** `qcdev->report_len` is still
    set to `max_report_len`, not `HIDI2C_PACKET_LEN(max_report_len)`.
    The write-side bound check (`if (buf_len > write_buf_len) return
    -EINVAL`) can still reject a max-sized SET_REPORT. That is fail-safe
    (no overflow), pre-existing, and not a regression. Command framing
    can need more than +2 bytes; this commit only claims the 2-byte
    packet length header, which is what `HIDI2C_PACKET_LEN` adds.

## PHASE 3: GIT HISTORY INVESTIGATION

**Step 3.1: BLAME THE CHANGED LINES**
- Record: buggy allocations introduced by `66b59bfce6d93` (“HID: intel-
  thc-hid: intel-quicki2c: Complete THC QuickI2C driver”, Even Xu,
  2025-01-06). Present since the driver became functional. Driver
  skeleton: `61bb2714dc3a1`. First appeared around **v6.13**, so it is
  in this 6.18 tree.

**Step 3.2: FOLLOW THE FIXES: TAG**
- Record: no `Fixes:` tag. Not applicable. The introducing commit is in
  this tree (`git merge-base --is-ancestor 66b59bfce6d93 v6.18.57`
  succeeded).

**Step 3.3: CHECK FILE HISTORY FOR RELATED CHANGES**
- Record: recent work on this file is driver completion, ACPI, PM,
  device IDs, WOT. Related but distinct: `d08a1049659aa` (ACPI u16
  truncation, not this overflow). Sibling series patch: `HID: Intel-thc-
  hid: Intel-quickspi: Fix buffer overflow` (different file). This
  commit is **standalone**; it does not need the QuickSPI patch.

**Step 3.4: CHECK THE AUTHOR'S OTHER COMMITS**
- Record: Even Xu is listed in MAINTAINERS as maintainer of `INTEL TOUCH
  HOST CONTROLLER (THC) DRIVER` (`drivers/hid/intel-thc-hid/`). This is
  a maintainer fix, not drive-by.

**Step 3.5: CHECK FOR DEPENDENT/PREREQUISITE COMMITS**
- Record: `HIDI2C_PACKET_LEN` was added in `6fc761385bcf6` (“Add HIDI2C
  protocol implementation”) and is present on **v6.18.57** in
  `include/linux/hid-over-i2c.h`. No missing helpers. Patch applies
  cleanly to the v6.18.57 blob (`patch --dry-run` exit 0).

## PHASE 4: MAILING LIST AND EXTERNAL RESEARCH

**Step 4.1: FIND THE ORIGINAL PATCH DISCUSSION**
- Record:
  - `b4 dig -c 5e5c3b9db1c5910d6a9175c97b76a95566e4dc32` →
    https://patch.msgid.link/20260922024638.932865-2-even.xu@intel.com
  - Cover: `[PATCH 0/2] HID: Intel-thc-hid: Fix potential buffer
    overflow` (`20260922024638.932865-1`)
  - `b4 dig -a`: **v1 only** (no v2/v3). Applied as submitted.
  - Jiri Kosina (2026-09-23): “Applied to hid.git#for-7.3/upstream-
    fixes, thanks.” No NAK.
  - No human reviewer asked for `Cc: stable`. An automated review noted
    `report_len` not updated and SET_REPORT framing possibly needing
    more than 2 bytes. HID maintainer applied the series as-is.

**Step 4.2: CHECK WHO REVIEWED THE PATCH**
- Record (`b4 dig -w`): To/Cc `bentiss@kernel.org`, `jikos@kernel.org`,
  `srinivas.pandruvada@linux.intel.com`, `linux-input@vger.kernel.org`.
  HID maintainers were on the original mail. Jiri applied it.

**Step 4.3: SEARCH FOR THE BUG REPORT**
- Record: no `Reported-by` / syzbot / bugzilla. Author-found from code
  inspection (“potential buffer overflow”). No user crash log in the
  thread.

**Step 4.4: CHECK FOR RELATED PATCHES AND SERIES**
- Record: 2/2 is the QuickSPI analogue (`HIDSPI_INPUT_BODY_SIZE`).
  Independent file; this I2C patch does not depend on it.

**Step 4.5: CHECK STABLE MAILING LIST HISTORY**
- Record: lore.kernel.org HTTP fetch returned 403. **UNVERIFIED**
  whether linux-stable discussed this SHA. Decision does not rely on
  that.

## PHASE 5: CODE SEMANTIC ANALYSIS

**Step 5.1: IDENTIFY KEY FUNCTIONS**
- Record: `quicki2c_alloc_report_buf()` only.

**Step 5.2: TRACE CALLERS**
- Record: single caller, `quicki2c_probe()` (after reading the HID-
  over-I2C device descriptor). Probe of Intel THC I2C-port PCI devices
  (Lunar Lake, Panther Lake, Wildcat Lake IDs in `quicki2c_pci_tbl`).
  Not a hot path, but every successful probe allocates these buffers,
  then IRQ/DMA/HID traffic uses them.

**Step 5.3: TRACE CALLEES**
- Record: `devm_kzalloc()`, `le16_to_cpu()`, `HIDI2C_PACKET_LEN()`. No
  new callees.

**Step 5.4: FOLLOW THE CALL CHAIN**
- Record: PCI probe → descriptor read → alloc → DMA init → HID
  registration → `handle_input_report()` on IRQ. Reachable on machines
  with Intel THC + HID-over-I2C touch. Unprivileged HID input does not
  size the kernel buffer; overflow is on kernel DMA/copy into an
  undersized `input_buf` when the device sends a max-sized packet.

**Step 5.5: SEARCH FOR SIMILAR PATTERNS**
- Record: same author applied the same header-vs-payload fix to
  QuickSPI. Confirms a systematic off-by-header bug, not a one-off typo.

## PHASE 6: CROSS-REFERENCING AGAINST THE LOCAL TREE

**Step 6.1: DOES THE BUGGY CODE EXIST IN THIS TREE?**
- Record: **Yes.** Local tree is **6.18.57** (`git describe HEAD` →
  `v6.18.57-155-gcdf239ca885b2`; Makefile `VERSION=6 PATCHLEVEL=18
  SUBLEVEL=57`).
- On **v6.18.57** (this series’ base), `quicki2c_alloc_report_buf()`
  still does:
  - `input_buf = devm_kzalloc(..., max_report_len)`
  - `report_buf = devm_kzalloc(..., max_report_len)`
- `HIDI2C_PACKET_LEN` already exists in this tree’s header. Driver is
  `CONFIG_INTEL_QUICKI2C` under `INTEL_THC_HID` (`X86_64 && PCI &&
  ACPI`).

**Step 6.2: CHECK FOR BACKPORT COMPLICATIONS**
- Record: **clean apply** on the v6.18.57 file. Surrounding function
  matches the patch. No refactor in the way.

**Step 6.3: CHECK IF RELATED FIXES ARE ALREADY HERE**
- Record: no other commit on this file in 6.18.y enlarges these two
  allocations. The 4K floor (`max(..., SZ_4K)`) is a workaround for
  devices that under-declare max length; it does **not** add the 2-byte
  header. When `max_input_len`/`max_output_len` is ≥ 4K (HID max buffer
  is 16K), that floor provides no slack.

## PHASE 7: SUBSYSTEM AND MAINTAINER CONTEXT

**Step 7.1: IDENTIFY THE SUBSYSTEM AND ITS CRITICALITY**
- Record: **HID Intel THC QuickI2C** (`drivers/hid/intel-thc-hid/`).
  **IMPORTANT** for Intel laptops/tablets with THC touch (LNL/PTL/WCL),
  not core mm/VFS. Still production input hardware.

**Step 7.2: ASSESS SUBSYSTEM ACTIVITY**
- Record: actively maintained through 6.18 (device IDs, WOT, ACPI
  advanced features). Bug is in original 2025 driver completion, not
  brand-new 7.x-only code.

## PHASE 8: IMPACT AND RISK ASSESSMENT

**Step 8.1: DETERMINE WHO IS AFFECTED**
- Record: **driver-specific / config-specific:** `CONFIG_INTEL_QUICKI2C`
  on x86_64 with Intel THC HID-over-I2C devices.

**Step 8.2: DETERMINE THE TRIGGER CONDITIONS**
- Record: HID-over-I2C input/feature/output packet whose payload equals
  the allocated max (`max(declared max, 4K)`). Typical small touch
  reports may not hit it; max-sized reports and devices that declare
  large `wMaxInputLength` can. Not a userspace-crafted syscall overflow;
  it is device-facing DMA/copy. Still a kernel memory-safety bug on a
  standard probe/IRQ path.

**Step 8.3: DETERMINE THE FAILURE MODE SEVERITY**
- Record: **buffer overflow (2 bytes) into heap** via
  `sg_copy_to_buffer` / packet construction. **HIGH** (memory
  corruption; crash or worse). Not a panic on every boot, but it is a
  real overflow, not a warning.

**Step 8.4: CALCULATE RISK-BENEFIT RATIO**
- Record:
  - **Benefit:** high for THC HID-over-I2C users — closes a heap
    overflow the driver author and HID maintainer treated as real.
  - **Risk:** very low — +2 bytes on two `devm_kzalloc`s, existing
    macro, no behavior change except not writing past the buffer.
  - **Ratio:** strongly favors backport.

## PHASE 9: FINAL SYNTHESIS

**Step 9.1: COMPILE THE EVIDENCE**

FOR:
- Real buffer overflow: complete HID-over-I2C packets stored in buffers
  sized from payload only
- DMA copy into `input_buf` has no dest-size check
- Small, obviously correct (+2 bytes via existing `HIDI2C_PACKET_LEN`)
- Driver and macro exist in this 6.18.57 tree; introducing commit is in
  this tree
- Applies cleanly
- Written by the THC maintainer; applied by HID maintainer
- Same class of bug independently fixed in QuickSPI

AGAINST:
- No public reproducer / syzbot report (author-found “potential”)
- 4K floor hides the overflow for devices with small `max_input_len`
- `report_len` not updated; write path may still `-EINVAL` at max size
  (fail-safe, not a new bug)
- Affects only Intel THC QuickI2C, not all machines

UNRESOLVED:
- Could not query lore.kernel.org/stable (HTTP 403)

**Step 9.2: APPLY THE STABLE RULES CHECKLIST**
1. Obviously correct and tested? **PASS** — two allocation sizes; HID
   maintainer applied v1; macro already in tree
2. Fixes a real bug that affects users? **PASS** — overflow on max-sized
   HID-over-I2C packets in a shipping Intel touch driver
3. Important issue? **PASS** — heap buffer overflow / memory corruption
   (**HIGH**)
4. Small and contained? **PASS** — one function, two sites, ~4 lines
5. No new features or APIs? **PASS**
6. Can apply to the local tree? **PASS** — clean on v6.18.57;
   `HIDI2C_PACKET_LEN` already present

**Step 9.3: CHECK FOR EXCEPTION CATEGORIES**
- Record: none needed. This is a normal memory-safety bug fix, not a
  device-ID/quirk/DT/build/docs exception.

**Step 9.4: MAKE YOUR DECISION**
Backport. The bug is in this 6.18.y driver, the fix is surgical, and
leaving a 2-byte heap overflow in a HID DMA path is worse than adding
two bytes to the buffers.

## What the commit solves for this tree

On 6.18.57, QuickI2C still allocates `input_buf`/`report_buf` as
`max(payload, 4K)` and then stores HID-over-I2C packets that include a
2-byte length header. When the payload is that maximum,
`thc_rxdma_read()` / SWDMA copies past the end of the kmalloc buffer.
The fix allocates `HIDI2C_PACKET_LEN(max_report_len)` instead.

That matches stable rules: real overflow, tiny diff, no new API, applies
cleanly, no missing prerequisites.

Risk vs benefit: +2 bytes of allocation vs heap corruption on Intel THC
HID-over-I2C devices (Lunar Lake / Panther Lake / Wildcat Lake). Benefit
dominates. The unfixed `report_len` bound is conservative, not a
regression.

## Verification
- [Phase 1] Parsed subject/body/tags: overflow fix; Even Xu + Jiri
  Kosina SOBs; no Fixes/Reported-by
- [Phase 2] Diff: two `devm_kzalloc` sizes in
  `quicki2c_alloc_report_buf()` wrap `HIDI2C_PACKET_LEN`
- [Phase 2] `include/linux/hid-over-i2c.h`: `HIDI2C_PACKET_LEN(data_len)
  = data_len + sizeof(__le16)`
- [Phase 2] `handle_input_report()` / `read_dma_buffer()`:
  `sg_copy_to_buffer` into `input_buf` without dest capacity
- [Phase 3] `git blame` on v6.18.57: allocations from `66b59bfce6d93`
  (2025-01, driver completion)
- [Phase 3] `git merge-base --is-ancestor 66b59bfce6d93 v6.18.57`:
  introducing commit is in this tree
- [Phase 3] `HIDI2C_PACKET_LEN` added in `6fc761385bcf6`; present on
  v6.18.57
- [Phase 3] Author Even Xu is MAINTAINERS owner of `drivers/hid/intel-
  thc-hid/`
- [Phase 4] `b4 dig -c 5e5c3b9db1c5910d6a9175c97b76a95566e4dc32`: lore
  thread found; v1 only
- [Phase 4] mbox: Jiri Kosina applied to hid.git#for-7.3/upstream-fixes;
  no NAK
- [Phase 4] `b4 dig -w`: HID maintainers on original To/Cc
- [Phase 4] UNVERIFIED: lore.kernel.org/stable HTTP 403
- [Phase 5] Single caller `quicki2c_probe()`; PCI IDs LNL/PTL/WCL THC
  I2C ports
- [Phase 6] `git describe HEAD` / `make kernelversion`: 6.18.57
- [Phase 6] `git show v6.18.57:drivers/hid/intel-thc-hid/intel-
  quicki2c/pci-quicki2c.c`: buggy sizes still present
- [Phase 6] `patch --dry-run` of this commit onto the v6.18.57 file:
  exit 0
- [Phase 8] Failure mode: 2-byte heap overflow on max-sized HID-over-I2C
  packets; severity HIGH

**YES**

 drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c b/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
index c6ba6886072ad..4588c55cf255d 100644
--- a/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
+++ b/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
@@ -586,7 +586,8 @@ static int quicki2c_alloc_report_buf(struct quicki2c_device *qcdev)
 	 */
 	max_report_len = max(le16_to_cpu(qcdev->dev_desc.max_input_len), SZ_4K);
 
-	qcdev->input_buf = devm_kzalloc(qcdev->dev, max_report_len, GFP_KERNEL);
+	qcdev->input_buf = devm_kzalloc(qcdev->dev,
+					HIDI2C_PACKET_LEN(max_report_len), GFP_KERNEL);
 	if (!qcdev->input_buf)
 		return -ENOMEM;
 
@@ -596,7 +597,8 @@ static int quicki2c_alloc_report_buf(struct quicki2c_device *qcdev)
 	max_report_len = max(le16_to_cpu(qcdev->dev_desc.max_output_len),
 			     max_report_len);
 
-	qcdev->report_buf = devm_kzalloc(qcdev->dev, max_report_len, GFP_KERNEL);
+	qcdev->report_buf = devm_kzalloc(qcdev->dev,
+					 HIDI2C_PACKET_LEN(max_report_len), GFP_KERNEL);
 	if (!qcdev->report_buf)
 		return -ENOMEM;
 
-- 
2.53.0


  parent reply	other threads:[~2026-10-19 13:57 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20261019135441.1420968-1-sashal@kernel.org>
2026-10-19 13:45 ` [PATCH AUTOSEL 6.18-5.10] HID: rmi: check report length before trimming sentinel bytes Sasha Levin
2026-10-19 13:46 ` [PATCH AUTOSEL 6.18] HID: universal-pidff: Add support for Turtle Beach VelocityOne Race Sasha Levin
2026-10-19 13:46 ` Sasha Levin [this message]
2026-10-19 14:35   ` [PATCH AUTOSEL 6.18] HID: Intel-thc-hid: Intel-quicki2c: Fix buffer overflow sashiko-bot
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18-6.12] iio: hid-sensor: als: scale each channel individually Sasha Levin
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18-6.1] HID: quirks: add ALWAYS_POLL quirk for AULA Mini 60 HE Pro Dongle Sasha Levin
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18-6.6] HID: i2c-hid: Add a quirk for a Cirque I2C device Sasha Levin
2026-10-19 13:47 ` [PATCH AUTOSEL 6.18-6.12] HID: amd_sfh: Serialize access to the shared emp2 pointer Sasha Levin
2026-10-19 13:48 ` [PATCH AUTOSEL 6.18-5.10] HID: multitouch: Fix stale MT slots when contact count drops to zero Sasha Levin
2026-10-19 13:48 ` [PATCH AUTOSEL 6.18] HID: elecom: Add support for ELECOM M-XT4DRBK (018E) Sasha Levin
2026-10-19 13:48 ` [PATCH AUTOSEL 6.18] HID: i2c-hid: add reset quirk for Lenovo Yoga Slim 7x Gen 11 keyboard Sasha Levin
2026-10-19 13:48 ` [PATCH AUTOSEL 6.18-5.10] HID: intel-ish-hid: ignore post-init ENUM_DEVICES from firmware Sasha Levin
2026-10-19 13:49 ` [PATCH AUTOSEL 6.18-5.10] HID: roccat: fix locking in roccat_connect() and roccat_disconnect() Sasha Levin
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18] HID: Intel-thc-hid: Intel-quickspi: Fix buffer overflow Sasha Levin
2026-10-19 15:04   ` sashiko-bot
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18-5.10] HID: quirks: Add ALWAYS_POLL quirk for Beitong BTP-KP20D dongle Sasha Levin
2026-10-19 13:50 ` [PATCH AUTOSEL 6.18-5.10] HID: i2c-hid: Add i2c-hid-quirk-bad-input-size quirk for 0911:5288 device Sasha Levin
2026-10-19 13:51 ` [PATCH AUTOSEL 6.18-6.6] HID: logitech-hidpp: Add support for G502 X Plus USB mouse Sasha Levin
2026-10-19 13:51 ` [PATCH AUTOSEL 6.18] HID: wacom: avoid copying Bluetooth input reports Sasha Levin
2026-10-19 15:07   ` sashiko-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261019135441.1420968-123-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=bentiss@kernel.org \
    --cc=even.xu@intel.com \
    --cc=jikos@kernel.org \
    --cc=jkosina@suse.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=stable@vger.kernel.org \
    --cc=xinpeng.sun@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox