drivers/input/joystick/gf2k.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
gf2k_read() decodes the hat position from a 4-bit field and uses it
directly to index gf2k_hat_to_axis[]. The lookup table only has nine
entries, so malformed packets can read past the end of the fixed table.
Skip hat reporting when the decoded value falls outside the lookup
table instead of forcing it to the neutral position. This keeps the
fix local and avoids reporting a made-up axis state for malformed
packets.
Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
---
Changes since v1:
- skip reporting invalid hat values instead of clamping them to the
neutral entry
drivers/input/joystick/gf2k.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/input/joystick/gf2k.c b/drivers/input/joystick/gf2k.c
index 5a1cdce0bc48..1d843115d674 100644
--- a/drivers/input/joystick/gf2k.c
+++ b/drivers/input/joystick/gf2k.c
@@ -165,8 +165,10 @@ static void gf2k_read(struct gf2k *gf2k, unsigned char *data)
t = GB(40,4,0);
- for (i = 0; i < gf2k_hats[gf2k->id]; i++)
- input_report_abs(dev, ABS_HAT0X + i, gf2k_hat_to_axis[t][i]);
+ if (t < ARRAY_SIZE(gf2k_hat_to_axis))
+ for (i = 0; i < gf2k_hats[gf2k->id]; i++)
+ input_report_abs(dev, ABS_HAT0X + i,
+ gf2k_hat_to_axis[t][i]);
t = GB(44,2,0) | GB(32,8,2) | GB(78,2,10);
--
2.50.1 (Apple Git-155)
On Tue, Apr 07, 2026 at 09:56:52AM +0800, Pengpeng Hou wrote: > gf2k_read() decodes the hat position from a 4-bit field and uses it > directly to index gf2k_hat_to_axis[]. The lookup table only has nine > entries, so malformed packets can read past the end of the fixed table. > > Skip hat reporting when the decoded value falls outside the lookup > table instead of forcing it to the neutral position. This keeps the > fix local and avoids reporting a made-up axis state for malformed > packets. > > Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn> Applied, thank you. -- Dmitry
© 2016 - 2026 Red Hat, Inc.