Package: openrazer-driver-dkms
Version: 3.10.2+dfsg-1Severity: important

Hi,

openrazer-driver-dkms 3.10.2 fails to build against Debian's
6.12.96+deb13-amd64 kernel (and later 6.12.9x point releases). The
build fails in razerkbd_driver.c with:

razerkbd_driver.c: In function 'razer_raw_event_bitfield':
razerkbd_driver.c:3729:29: error: too few arguments to function
'hid_report_raw_event'
3729 | hid_report_raw_event(hdev, HID_INPUT_REPORT, xdata, sizeof(xdata), 0);
| ^~~~~~~~~~~~~~~~~~~~

Cause:

Debian's 6.12.96+deb13 kernel headers ship a backported change to
hid_report_raw_event() that splits the old single 'size' parameter
into two: 'bufsize' and 'size'. The current declaration in
/usr/include (and in the kernel headers package) is:

int hid_report_raw_event(struct hid_device *hid,
enum hid_report_type type, u8 *data,
size_t bufsize, u32 size, int interrupt);

razerkbd_driver.c still calls it with the old 5-argument form, so the
build fails on any kernel carrying this backport, even though the
kernel version itself (6.12.x) isn't the upstream version where this
change nominally landed.

Note this also affects systems with multiple kernels installed side
by side (e.g. 6.12.90+deb13 alongside 6.12.96+deb13): since the
change was backported partway through the 6.12 point releases rather
than tied to a clean version boundary, a single unconditional fix can
break the build for the older point release while fixing the newer
one. A proper fix upstream will likely need a configure-time / feature
probe (e.g. checking the header via checkpatch/autoconf-style probing)
rather than a LINUX_VERSION_CODE guard, since LINUX_VERSION_CODE can't
distinguish the pre-backport and post-backport builds of the same
6.12.9x point release.

Workaround (tested locally, builds and loads cleanly on
6.12.96+deb13-amd64):

In driver/razerkbd_driver.c, change both call sites of
hid_report_raw_event() from:

hid_report_raw_event(hdev, HID_INPUT_REPORT, xdata, sizeof(xdata), 0);

to:

hid_report_raw_event(hdev, HID_INPUT_REPORT, xdata, sizeof(xdata), 
sizeof(xdata), 0);

(passing sizeof(xdata) for both bufsize and size, since xdata is a
fixed-size buffer being reported in full).

This is only a local workaround, not a proper fix -- it will break
the build again on kernels with the old 5-argument signature. I'm
reporting this primarily so it's tracked; a real fix should detect
the signature at build time rather than assuming one or the other.

System information:
Kernel: 6.12.96+deb13-amd64
Distribution: Debian 13 (trixie)

Thanks,Emmi

Reply via email to