public inbox for linux-input@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] HID: pidff: Fix condition effect bit clearing
@ 2026-02-04 13:31 Tomasz Pakuła
  2026-02-04 21:07 ` kernel test robot
  0 siblings, 1 reply; 3+ messages in thread
From: Tomasz Pakuła @ 2026-02-04 13:31 UTC (permalink / raw)
  To: jikos, bentiss; +Cc: oleg, linux-input, linux-kernel, tomasz.pakula.oficjalny

As reported by MPDarkGuy on discord, NULL pointer dereferences were
happening because not all the conditional effects bits were cleared.

Properly clear all conditional effect bits from ffbit

Fixes: 7f3d7bc0df4b ("HID: pidff: Better quirk assigment when searching for fields")
Cc: <stable@vger.kernel.org> # 6.18.x
Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com>
---
Urgent for 6.19 rc period
V1 -> V2: Simplify by using bitwise or operator

 drivers/hid/usbhid/hid-pidff.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/hid/usbhid/hid-pidff.c b/drivers/hid/usbhid/hid-pidff.c
index a4e700b40ba9..792992c69837 100644
--- a/drivers/hid/usbhid/hid-pidff.c
+++ b/drivers/hid/usbhid/hid-pidff.c
@@ -1452,9 +1452,10 @@ static int pidff_init_fields(struct pidff_device *pidff, struct input_dev *dev)
 		hid_warn(pidff->hid, "unknown ramp effect layout\n");
 
 	if (PIDFF_FIND_FIELDS(set_condition, PID_SET_CONDITION, 1)) {
-		if (test_and_clear_bit(FF_SPRING, dev->ffbit)   ||
-		    test_and_clear_bit(FF_DAMPER, dev->ffbit)   ||
-		    test_and_clear_bit(FF_FRICTION, dev->ffbit) ||
+		/* Bitwise to ensure all the bits will be cleared */
+		if (test_and_clear_bit(FF_SPRING, dev->ffbit)   |
+		    test_and_clear_bit(FF_DAMPER, dev->ffbit)   |
+		    test_and_clear_bit(FF_FRICTION, dev->ffbit) |
 		    test_and_clear_bit(FF_INERTIA, dev->ffbit))
 			hid_warn(pidff->hid, "unknown condition effect layout\n");
 	}
-- 
2.52.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] HID: pidff: Fix condition effect bit clearing
  2026-02-04 13:31 [PATCH v2] HID: pidff: Fix condition effect bit clearing Tomasz Pakuła
@ 2026-02-04 21:07 ` kernel test robot
  2026-02-05  0:41   ` Nathan Chancellor
  0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2026-02-04 21:07 UTC (permalink / raw)
  To: Tomasz Pakuła, jikos, bentiss
  Cc: llvm, oe-kbuild-all, oleg, linux-input, linux-kernel,
	tomasz.pakula.oficjalny

Hi Tomasz,

kernel test robot noticed the following build warnings:

[auto build test WARNING on hid/for-next]
[also build test WARNING on linus/master v6.19-rc8 next-20260204]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Tomasz-Paku-a/HID-pidff-Fix-condition-effect-bit-clearing/20260204-213418
base:   https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git for-next
patch link:    https://lore.kernel.org/r/20260204133138.475880-1-tomasz.pakula.oficjalny%40gmail.com
patch subject: [PATCH v2] HID: pidff: Fix condition effect bit clearing
config: x86_64-rhel-9.4-rust (https://download.01.org/0day-ci/archive/20260205/202602050440.e5LEMod6-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
rustc: rustc 1.88.0 (6b00bc388 2025-06-23)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260205/202602050440.e5LEMod6-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602050440.e5LEMod6-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/hid/usbhid/hid-pidff.c:1456:7: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
    1456 |                 if (test_and_clear_bit(FF_SPRING, dev->ffbit)   |
         |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1457 |                     test_and_clear_bit(FF_DAMPER, dev->ffbit)   |
         |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1458 |                     test_and_clear_bit(FF_FRICTION, dev->ffbit) |
         |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                                                 ||
    1459 |                     test_and_clear_bit(FF_INERTIA, dev->ffbit))
         |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/hid/usbhid/hid-pidff.c:1456:7: note: cast one or both operands to int to silence this warning
>> drivers/hid/usbhid/hid-pidff.c:1456:7: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
    1456 |                 if (test_and_clear_bit(FF_SPRING, dev->ffbit)   |
         |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1457 |                     test_and_clear_bit(FF_DAMPER, dev->ffbit)   |
         |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                                                 ||
    1458 |                     test_and_clear_bit(FF_FRICTION, dev->ffbit) |
         |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/hid/usbhid/hid-pidff.c:1456:7: note: cast one or both operands to int to silence this warning
>> drivers/hid/usbhid/hid-pidff.c:1456:7: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
    1456 |                 if (test_and_clear_bit(FF_SPRING, dev->ffbit)   |
         |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                                                 ||
    1457 |                     test_and_clear_bit(FF_DAMPER, dev->ffbit)   |
         |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/hid/usbhid/hid-pidff.c:1456:7: note: cast one or both operands to int to silence this warning
   3 warnings generated.


vim +1456 drivers/hid/usbhid/hid-pidff.c

  1398	
  1399	#define PIDFF_FIND_FIELDS(name, report, strict) \
  1400		pidff_find_fields(pidff->name, pidff_ ## name, \
  1401			pidff->reports[report], \
  1402			ARRAY_SIZE(pidff_ ## name), strict, &pidff->quirks)
  1403	
  1404	/*
  1405	 * Fill and check the pidff_usages
  1406	 */
  1407	static int pidff_init_fields(struct pidff_device *pidff, struct input_dev *dev)
  1408	{
  1409		if (PIDFF_FIND_FIELDS(set_effect, PID_SET_EFFECT, 1)) {
  1410			hid_err(pidff->hid, "unknown set_effect report layout\n");
  1411			return -ENODEV;
  1412		}
  1413	
  1414		PIDFF_FIND_FIELDS(block_load, PID_BLOCK_LOAD, 0);
  1415		if (!pidff->block_load[PID_EFFECT_BLOCK_INDEX].value) {
  1416			hid_err(pidff->hid, "unknown pid_block_load report layout\n");
  1417			return -ENODEV;
  1418		}
  1419	
  1420		if (PIDFF_FIND_FIELDS(effect_operation, PID_EFFECT_OPERATION, 1)) {
  1421			hid_err(pidff->hid, "unknown effect_operation report layout\n");
  1422			return -ENODEV;
  1423		}
  1424	
  1425		if (PIDFF_FIND_FIELDS(block_free, PID_BLOCK_FREE, 1)) {
  1426			hid_err(pidff->hid, "unknown pid_block_free report layout\n");
  1427			return -ENODEV;
  1428		}
  1429	
  1430		if (pidff_find_special_fields(pidff) || pidff_find_effects(pidff, dev))
  1431			return -ENODEV;
  1432	
  1433		if (PIDFF_FIND_FIELDS(set_envelope, PID_SET_ENVELOPE, 1)) {
  1434			if (test_and_clear_bit(FF_CONSTANT, dev->ffbit))
  1435				hid_warn(pidff->hid,
  1436					 "has constant effect but no envelope\n");
  1437			if (test_and_clear_bit(FF_RAMP, dev->ffbit))
  1438				hid_warn(pidff->hid,
  1439					 "has ramp effect but no envelope\n");
  1440	
  1441			if (test_and_clear_bit(FF_PERIODIC, dev->ffbit))
  1442				hid_warn(pidff->hid,
  1443					 "has periodic effect but no envelope\n");
  1444		}
  1445	
  1446		if (PIDFF_FIND_FIELDS(set_constant, PID_SET_CONSTANT, 1) &&
  1447		    test_and_clear_bit(FF_CONSTANT, dev->ffbit))
  1448			hid_warn(pidff->hid, "unknown constant effect layout\n");
  1449	
  1450		if (PIDFF_FIND_FIELDS(set_ramp, PID_SET_RAMP, 1) &&
  1451		    test_and_clear_bit(FF_RAMP, dev->ffbit))
  1452			hid_warn(pidff->hid, "unknown ramp effect layout\n");
  1453	
  1454		if (PIDFF_FIND_FIELDS(set_condition, PID_SET_CONDITION, 1)) {
  1455			/* Bitwise to ensure all the bits will be cleared */
> 1456			if (test_and_clear_bit(FF_SPRING, dev->ffbit)   |
  1457			    test_and_clear_bit(FF_DAMPER, dev->ffbit)   |
  1458			    test_and_clear_bit(FF_FRICTION, dev->ffbit) |
  1459			    test_and_clear_bit(FF_INERTIA, dev->ffbit))
  1460				hid_warn(pidff->hid, "unknown condition effect layout\n");
  1461		}
  1462	
  1463		if (PIDFF_FIND_FIELDS(set_periodic, PID_SET_PERIODIC, 1) &&
  1464		    test_and_clear_bit(FF_PERIODIC, dev->ffbit))
  1465			hid_warn(pidff->hid, "unknown periodic effect layout\n");
  1466	
  1467		PIDFF_FIND_FIELDS(pool, PID_POOL, 0);
  1468	
  1469		if (!PIDFF_FIND_FIELDS(device_gain, PID_DEVICE_GAIN, 1))
  1470			set_bit(FF_GAIN, dev->ffbit);
  1471	
  1472		return 0;
  1473	}
  1474	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] HID: pidff: Fix condition effect bit clearing
  2026-02-04 21:07 ` kernel test robot
@ 2026-02-05  0:41   ` Nathan Chancellor
  0 siblings, 0 replies; 3+ messages in thread
From: Nathan Chancellor @ 2026-02-05  0:41 UTC (permalink / raw)
  To: kernel test robot
  Cc: Tomasz Pakuła, jikos, bentiss, llvm, oe-kbuild-all, oleg,
	linux-input, linux-kernel

On Thu, Feb 05, 2026 at 05:07:56AM +0800, kernel test robot wrote:
> Hi Tomasz,
> 
> kernel test robot noticed the following build warnings:
> 
> [auto build test WARNING on hid/for-next]
> [also build test WARNING on linus/master v6.19-rc8 next-20260204]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Tomasz-Paku-a/HID-pidff-Fix-condition-effect-bit-clearing/20260204-213418
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git for-next
> patch link:    https://lore.kernel.org/r/20260204133138.475880-1-tomasz.pakula.oficjalny%40gmail.com
> patch subject: [PATCH v2] HID: pidff: Fix condition effect bit clearing
> config: x86_64-rhel-9.4-rust (https://download.01.org/0day-ci/archive/20260205/202602050440.e5LEMod6-lkp@intel.com/config)
> compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
> rustc: rustc 1.88.0 (6b00bc388 2025-06-23)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260205/202602050440.e5LEMod6-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202602050440.e5LEMod6-lkp@intel.com/
> 
> All warnings (new ones prefixed by >>):
> 
> >> drivers/hid/usbhid/hid-pidff.c:1456:7: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
>     1456 |                 if (test_and_clear_bit(FF_SPRING, dev->ffbit)   |
>          |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     1457 |                     test_and_clear_bit(FF_DAMPER, dev->ffbit)   |
>          |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     1458 |                     test_and_clear_bit(FF_FRICTION, dev->ffbit) |
>          |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>          |                                                                 ||
>     1459 |                     test_and_clear_bit(FF_INERTIA, dev->ffbit))
>          |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    drivers/hid/usbhid/hid-pidff.c:1456:7: note: cast one or both operands to int to silence this warning
> >> drivers/hid/usbhid/hid-pidff.c:1456:7: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
>     1456 |                 if (test_and_clear_bit(FF_SPRING, dev->ffbit)   |
>          |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     1457 |                     test_and_clear_bit(FF_DAMPER, dev->ffbit)   |
>          |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>          |                                                                 ||
>     1458 |                     test_and_clear_bit(FF_FRICTION, dev->ffbit) |
>          |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    drivers/hid/usbhid/hid-pidff.c:1456:7: note: cast one or both operands to int to silence this warning
> >> drivers/hid/usbhid/hid-pidff.c:1456:7: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
>     1456 |                 if (test_and_clear_bit(FF_SPRING, dev->ffbit)   |
>          |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>          |                                                                 ||
>     1457 |                     test_and_clear_bit(FF_DAMPER, dev->ffbit)   |
>          |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    drivers/hid/usbhid/hid-pidff.c:1456:7: note: cast one or both operands to int to silence this warning
>    3 warnings generated.

As the use of the bitwise operation is intentional here per the comment,
I think going back to v1 to avoid introducing this warning would be
better than casting one of these operands to int to silence it with the
v2 structuring of the code. v1 matches what I have done elsewhere in the
kernel to make it obvious that each function should be called (without a
comment):

  2e70570656ad ("drm/i915: Avoid bitwise vs logical OR warning in snb_wm_latency_quirk()")
  a02dcde595f7 ("Input: touchscreen - avoid bitwise vs logical OR warning")

Cheers,
Nathan

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-02-05  0:41 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-04 13:31 [PATCH v2] HID: pidff: Fix condition effect bit clearing Tomasz Pakuła
2026-02-04 21:07 ` kernel test robot
2026-02-05  0:41   ` Nathan Chancellor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox