android_kernel_motorola_sm6375/drivers/leds
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Mukesh Ojha 84b42d5b5f leds: class: Protect brightness_show() with led_cdev->led_access mutex
[ Upstream commit 4ca7cd938725a4050dcd62ae9472e931d603118d ]

There is NULL pointer issue observed if from Process A where hid device
being added which results in adding a led_cdev addition and later a
another call to access of led_cdev attribute from Process B can result
in NULL pointer issue.

Use mutex led_cdev->led_access to protect access to led->cdev and its
attribute inside brightness_show() and max_brightness_show() and also
update the comment for mutex that it should be used to protect the led
class device fields.

	Process A 				Process B

 kthread+0x114
 worker_thread+0x244
 process_scheduled_works+0x248
 uhid_device_add_worker+0x24
 hid_add_device+0x120
 device_add+0x268
 bus_probe_device+0x94
 device_initial_probe+0x14
 __device_attach+0xfc
 bus_for_each_drv+0x10c
 __device_attach_driver+0x14c
 driver_probe_device+0x3c
 __driver_probe_device+0xa0
 really_probe+0x190
 hid_device_probe+0x130
 ps_probe+0x990
 ps_led_register+0x94
 devm_led_classdev_register_ext+0x58
 led_classdev_register_ext+0x1f8
 device_create_with_groups+0x48
 device_create_groups_vargs+0xc8
 device_add+0x244
 kobject_uevent+0x14
 kobject_uevent_env[jt]+0x224
 mutex_unlock[jt]+0xc4
 __mutex_unlock_slowpath+0xd4
 wake_up_q+0x70
 try_to_wake_up[jt]+0x48c
 preempt_schedule_common+0x28
 __schedule+0x628
 __switch_to+0x174
						el0t_64_sync+0x1a8/0x1ac
						el0t_64_sync_handler+0x68/0xbc
						el0_svc+0x38/0x68
						do_el0_svc+0x1c/0x28
						el0_svc_common+0x80/0xe0
						invoke_syscall+0x58/0x114
						__arm64_sys_read+0x1c/0x2c
						ksys_read+0x78/0xe8
						vfs_read+0x1e0/0x2c8
						kernfs_fop_read_iter+0x68/0x1b4
						seq_read_iter+0x158/0x4ec
						kernfs_seq_show+0x44/0x54
						sysfs_kf_seq_show+0xb4/0x130
						dev_attr_show+0x38/0x74
						brightness_show+0x20/0x4c
						dualshock4_led_get_brightness+0xc/0x74

[ 3313.874295][ T4013] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000060
[ 3313.874301][ T4013] Mem abort info:
[ 3313.874303][ T4013]   ESR = 0x0000000096000006
[ 3313.874305][ T4013]   EC = 0x25: DABT (current EL), IL = 32 bits
[ 3313.874307][ T4013]   SET = 0, FnV = 0
[ 3313.874309][ T4013]   EA = 0, S1PTW = 0
[ 3313.874311][ T4013]   FSC = 0x06: level 2 translation fault
[ 3313.874313][ T4013] Data abort info:
[ 3313.874314][ T4013]   ISV = 0, ISS = 0x00000006, ISS2 = 0x00000000
[ 3313.874316][ T4013]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
[ 3313.874318][ T4013]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
[ 3313.874320][ T4013] user pgtable: 4k pages, 39-bit VAs, pgdp=00000008f2b0a000
..

[ 3313.874332][ T4013] Dumping ftrace buffer:
[ 3313.874334][ T4013]    (ftrace buffer empty)
..
..
[ dd3313.874639][ T4013] CPU: 6 PID: 4013 Comm: InputReader
[ 3313.874648][ T4013] pc : dualshock4_led_get_brightness+0xc/0x74
[ 3313.874653][ T4013] lr : led_update_brightness+0x38/0x60
[ 3313.874656][ T4013] sp : ffffffc0b910bbd0
..
..
[ 3313.874685][ T4013] Call trace:
[ 3313.874687][ T4013]  dualshock4_led_get_brightness+0xc/0x74
[ 3313.874690][ T4013]  brightness_show+0x20/0x4c
[ 3313.874692][ T4013]  dev_attr_show+0x38/0x74
[ 3313.874696][ T4013]  sysfs_kf_seq_show+0xb4/0x130
[ 3313.874700][ T4013]  kernfs_seq_show+0x44/0x54
[ 3313.874703][ T4013]  seq_read_iter+0x158/0x4ec
[ 3313.874705][ T4013]  kernfs_fop_read_iter+0x68/0x1b4
[ 3313.874708][ T4013]  vfs_read+0x1e0/0x2c8
[ 3313.874711][ T4013]  ksys_read+0x78/0xe8
[ 3313.874714][ T4013]  __arm64_sys_read+0x1c/0x2c
[ 3313.874718][ T4013]  invoke_syscall+0x58/0x114
[ 3313.874721][ T4013]  el0_svc_common+0x80/0xe0
[ 3313.874724][ T4013]  do_el0_svc+0x1c/0x28
[ 3313.874727][ T4013]  el0_svc+0x38/0x68
[ 3313.874730][ T4013]  el0t_64_sync_handler+0x68/0xbc
[ 3313.874732][ T4013]  el0t_64_sync+0x1a8/0x1ac

Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com>
Reviewed-by: Anish Kumar <yesanishhere@gmail.com>
Link: https://lore.kernel.org/r/20241103160527.82487-1-quic_mojha@quicinc.com
Signed-off-by: Lee Jones <lee@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-12-14 19:44:53 +01:00
..
trigger leds: trigger: panic: Don't register panic notifier if creating the trigger failed 2024-02-23 08:25:02 +01:00
Kconfig leds: TI_LMU_COMMON: select REGMAP instead of depending on it 2023-05-17 11:35:53 +02:00
led-class-flash.c leds: class: Improve LED and LED flash class registration API 2019-07-25 20:07:50 +02:00
led-class.c leds: class: Protect brightness_show() with led_cdev->led_access mutex 2024-12-14 19:44:53 +01:00
led-core.c leds: Switch to use fwnode instead of be stuck with OF one 2019-08-23 23:39:37 +02:00
led-triggers.c leds: trigger: Unregister sysfs attributes before calling deactivate() 2024-08-19 05:33:31 +02:00
leds-88pm860x.c leds: 88pm860x: fix use-after-free on unbind 2020-08-11 15:33:36 +02:00
leds-aat1290.c leds: aat1290: Use generic support for composing LED names 2019-07-25 20:07:59 +02:00
leds-adp5520.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 149 2019-05-30 11:25:18 -07:00
leds-an30259a.c leds: an30259a: add a check for devm_regmap_init_i2c 2020-01-04 19:17:03 +01:00
leds-apu.c leds: apu: add pr_fmt prefix for better log output 2019-07-22 21:57:35 +02:00
leds-as3645a.c leds: as3645a: Fix error return code in as3645a_parse_node() 2021-07-14 16:53:46 +02:00
leds-asic3.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-bcm6328.c leds: bcm6328, bcm6358: use devres LED registering function 2020-11-05 11:43:24 +01:00
leds-bcm6358.c leds: bcm6328, bcm6358: use devres LED registering function 2020-11-05 11:43:24 +01:00
leds-bd2802.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-blinkm.c
leds-clevo-mail.c
leds-cobalt-qube.c
leds-cobalt-raq.c
leds-cpcap.c
leds-cr0014114.c leds: cr0014114: Use generic support for composing LED names 2019-07-25 20:07:58 +02:00
leds-da903x.c leds: da903x: fix use-after-free on unbind 2020-08-11 15:33:36 +02:00
leds-da9052.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
leds-dac124s085.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 330 2019-06-05 17:37:06 +02:00
leds-fsg.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-gpio-register.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-gpio.c leds: gpio: Fix uninitialized gpio label for fwnode based probe 2020-01-29 16:45:29 +01:00
leds-hp6xx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-ipaq-micro.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-is31fl32xx.c leds: is31fl32xx: Use struct_size() helper 2019-09-01 13:33:29 +02:00
leds-is31fl319x.c leds: is31fl319x: simplify getting the adapter of a client 2019-07-23 20:47:45 +02:00
leds-ktd2692.c leds: ktd2692: Fix an error handling path 2021-07-14 16:53:47 +02:00
leds-lm355x.c leds: lm355x: avoid enum conversion warning 2020-08-19 08:16:07 +02:00
leds-lm3530.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 197 2019-05-30 11:29:22 -07:00
leds-lm3532.c leds: lm3532: Fix optional led-max-microamp prop error handling 2019-09-12 20:45:52 +02:00
leds-lm3533.c leds: lm3533: fix use-after-free on unbind 2020-08-11 15:33:36 +02:00
leds-lm3601x.c leds: lm3601x: Use generic support for composing LED names 2019-07-25 20:07:57 +02:00
leds-lm3642.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-lm3692x.c leds: lm3692x: Put fwnode in any case during ->probe() 2021-07-14 16:53:41 +02:00
leds-lm3697.c leds: lm3697: Switch to use fwnode_property_count_uXX() 2019-07-25 20:08:03 +02:00
leds-lm36274.c leds: lm36274: cosmetic: rename lm36274_data to chip 2021-07-14 16:53:41 +02:00
leds-locomo.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-lp55xx-common.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-lp55xx-common.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-lp3944.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-lp3952.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-lp5521.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 336 2019-06-05 17:37:07 +02:00
leds-lp5523.c leds: lp5523: check return value of lp5xx_read and jump to cleanup code 2021-05-26 12:05:20 +02:00
leds-lp5562.c leds: leds-lp5562 allow firmware files up to the maximum length 2019-07-22 20:35:01 +02:00
leds-lp8501.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-lp8788.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-lp8860.c leds: lp8860: Use generic support for composing LED names 2019-07-25 20:07:55 +02:00
leds-lt3593.c leds: lt3593: Put fwnode in any case during ->probe() 2021-09-15 09:47:33 +02:00
leds-max8997.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-max77650.c led: max77650: add of_match table 2020-02-05 21:22:49 +00:00
leds-max77693.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-mc13783.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-menf21bmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
leds-mlxcpld.c
leds-mlxreg.c leds: mlxreg: Fix possible buffer overflow 2020-10-01 13:17:14 +02:00
leds-mt6323.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
leds-net48xx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-netxbig.c leds: netxbig: Add of_node_put() in netxbig_leds_get_of_pdata() 2019-07-29 21:12:54 +02:00
leds-nic78bx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
leds-ns2.c leds: ns2: Add of_node_put() before return 2019-07-22 20:35:00 +02:00
leds-ot200.c
leds-pca955x.c LED updates for 5.3-rc1 2019-07-09 08:59:39 -07:00
leds-pca963x.c leds: pca963x: Fix open-drain initialization 2020-02-24 08:36:24 +01:00
leds-pca9532.c leds: pca953x: Include the right header 2019-08-08 20:38:24 +02:00
leds-pm8058.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284 2019-06-05 17:36:37 +02:00
leds-powernv.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
leds-pwm.c leds: pwm: Don't disable the PWM when the LED should be off 2023-11-20 10:30:13 +01:00
leds-rb532.c
leds-regulator.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-s3c24xx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-sc27xx-bltc.c leds: sc27xx-blt: Use generic support for composing LED names 2019-07-25 20:07:53 +02:00
leds-spi-byte.c
leds-ss4200.c leds: ss4200: Convert PCIBIOS_* return codes to errnos 2024-08-19 05:33:37 +02:00
leds-sunfire.c
leds-syscon.c leds: syscon: Use resource managed variant of device register 2019-09-01 13:33:27 +02:00
leds-tca6507.c LED updates for 5.3-rc1 2019-07-09 08:59:39 -07:00
leds-ti-lmu-common.c leds: ti-lmu-common: Move static keyword to the front of declaration 2019-09-03 20:34:46 +02:00
leds-tlc591xx.c leds: tlc591xx: update the maximum brightness 2020-01-26 10:01:02 +01:00
leds-wm831x-status.c leds: wm831x-status: fix use-after-free on unbind 2020-08-11 15:33:35 +02:00
leds-wm8350.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds-wrap.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
leds.h leds: core: Add support for composing LED class device names 2019-07-25 20:07:52 +02:00
Makefile TI LMU LED support rework and introduction of two new drivers 2019-06-11 23:46:37 +02:00
uleds.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00