Re: [PATCH 02/21] HID: add documentation and Coccinelle script for FF registration race
Julia Lawall <[email protected]>
| Newsgroups | org.kernel.vger.linux-input,fr.inria.cocci,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
> diff --git a/scripts/coccinelle/hid/ff_race.cocci b/scripts/coccinelle/hid/ff_race.cocci
> new file mode 100644
> index 000000000000..479f5d1e3184
> --- /dev/null
> +++ b/scripts/coccinelle/hid/ff_race.cocci
> @@ -0,0 +1,34 @@
> +/// Detect HID drivers that initialize force-feedback after hid_hw_start()
> +/// when HID_CONNECT_HIDINPUT is used. This is a lifecycle violation as
> +/// the input device is already registered.
> +//
> +// Confidence: High
> +// Copyright: (C) 2026 Gemini. GPLv2.
> +
> +virtual report
> +
> +@r@
> +identifier probe_fn;
> +expression hdev, flags;
> +position p1, p2;
> +@@
> +
> +probe_fn(struct hid_device *hdev, ...) {
> + <...
> + hid_hw_start@p1(hdev, flags)
> + ...
> + \(input_ff_create\|input_ff_create_memless\)@p2(...)
> + ...>
> +}
This seems unnecessarily costly. The pattern can be just:
hid_hw_start@p1(hdev, flags)
...
\(input_ff_create\|input_ff_create_memless\)@p2(...)
Or does it matter that struct hid_device *hdev is the first parameter
of the enclosing function?
julia
> +
> +@script:python depends on report@
> +p1 << r.p1;
> +p2 << r.p2;
> +flags << r.flags;
> +@@
> +
> +# Check if flags include HID_CONNECT_HIDINPUT (0x01) or HID_CONNECT_DEFAULT (0x0f)
> +# Note: HID_CONNECT_DEFAULT is 0x0f, HID_CONNECT_HIDINPUT is 0x01
> +if "HID_CONNECT_HIDINPUT" in flags or "HID_CONNECT_DEFAULT" in flags:
> + msg = "WARNING: force-feedback initialized after hid_hw_start() with HID_CONNECT_HIDINPUT. Input device is already registered at this point. Use .input_configured() instead."
> + coccilib.report.print_report(p2[0], msg)
>
> --
> 2.55.0.629.g250fe7f194-goog
>
>