]> git.ipfire.org Git - thirdparty/linux.git/commit
hwmon: (nzxt-smart2) DMA-align output buffer
authorGuenter Roeck <linux@roeck-us.net>
Mon, 27 Jul 2026 16:54:23 +0000 (09:54 -0700)
committerGuenter Roeck <linux@roeck-us.net>
Mon, 27 Jul 2026 18:35:22 +0000 (11:35 -0700)
commit080bbf42faf77e6489ab30d5114c5f8f6ccbb1b8
treec0ecf7073225a7437553bed6a040b0d430277c41
parentaa9429edf9fc0e90d6f4da19ea4b5495a54ab117
hwmon: (nzxt-smart2) DMA-align output buffer

Sashiko reports:

When send_output_report() calls hid_hw_output_report(), the underlying USB
HID core calls usb_interrupt_msg() which maps this buffer directly for DMA.

When the DMA mapping flushes or invalidates the cacheline, it will corrupt
the adjacent variables (mutex, update_interval) that were modified
concurrently by the CPU. This causes memory corruption due to cacheline
sharing on non-coherent CPU architectures (such as ARM or MIPS). The DMA
API debugging tool (CONFIG_DMA_API_DEBUG) will trigger runtime warnings
for this violation.

Any operation that triggers send_output_report() (like setting a fan speed
or updating the interval) causes the USB DMA mapping. On systems with
non-coherent caches, this structural bug causes immediate and deterministic
memory corruption.

Align the output buffer to ARCH_DMA_MINALIGN to fix the problem.

Reported-by: Sashiko <sashiko-bot@kernel.org>
Fixes: 53e68c20aeb1 ("hwmon: add driver for NZXT RGB&Fan Controller/Smart Device v2.")
Cc: Aleksandr Mezin <mezin.alexander@gmail.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/nzxt-smart2.c