linux/drivers/base
Viresh Kumar 83150f5d05 arch_topology: Avoid use-after-free for scale_freq_data
Currently topology_scale_freq_tick() (which gets called from
scheduler_tick()) may end up using a pointer to "struct
scale_freq_data", which was previously cleared by
topology_clear_scale_freq_source(), as there is no protection in place
here. The users of topology_clear_scale_freq_source() though needs a
guarantee that the previously cleared scale_freq_data isn't used
anymore, so they can free the related resources.

Since topology_scale_freq_tick() is called from scheduler tick, we don't
want to add locking in there. Use the RCU update mechanism instead
(which is already used by the scheduler's utilization update path) to
guarantee race free updates here.

synchronize_rcu() makes sure that all RCU critical sections that started
before it is called, will finish before it returns. And so the callers
of topology_clear_scale_freq_source() don't need to worry about their
callback getting called anymore.

Cc: Paul E. McKenney <paulmck@kernel.org>
Fixes: 01e055c120 ("arch_topology: Allow multiple entities to provide sched_freq_tick() callback")
Tested-by: Vincent Guittot <vincent.guittot@linaro.org>
Reviewed-by: Ionela Voinescu <ionela.voinescu@arm.com>
Tested-by: Qian Cai <quic_qiancai@quicinc.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
2021-07-01 07:32:14 +05:30
..
firmware_loader init/initramfs.c: do unpacking asynchronously 2021-05-07 00:26:33 -07:00
power Merge branches 'pm-domains' and 'pm-devfreq' 2021-06-29 15:53:19 +02:00
regmap regmap: mdio: Reject invalid addresses 2021-06-14 15:00:29 +01:00
test kunit: software node: adhear to KUNIT formatting standard 2021-04-15 08:56:27 +02:00
arch_numa.c arch_numa: fix common code printing of phys_addr_t 2021-02-18 23:18:04 -08:00
arch_topology.c arch_topology: Avoid use-after-free for scale_freq_data 2021-07-01 07:32:14 +05:30
attribute_container.c driver core: attribute_container: remove kernel-doc warnings 2021-04-02 16:40:07 +02:00
auxiliary.c driver core: auxiliary bus: Remove unneeded module bits 2021-03-23 10:47:55 +01:00
base.h driver core: Improve fw_devlink & deferred_probe_timeout interaction 2021-04-05 09:17:56 +02:00
bus.c drivers: base: change 'driver_create_groups' to 'driver_add_groups' in printk 2021-01-27 14:35:09 +01:00
cacheinfo.c drivers core: Use sysfs_emit for shared_cpu_map_show and shared_cpu_list_show 2020-10-02 13:24:40 +02:00
class.c drivers: base: fix some kernel-doc markups 2020-11-09 18:56:49 +01:00
component.c driver core: component: remove dentry pointer in "struct master" 2021-03-23 10:49:02 +01:00
container.c
core.c drivers: base: Reduce device link removal code duplication 2021-05-21 22:12:14 +02:00
cpu.c drivers/base/cpu: remove redundant assignment of variable retval 2021-03-23 14:56:50 +01:00
dd.c Linux 5.12-rc7 2021-04-14 19:53:39 +02:00
devcoredump.c devcoredump: fix kernel-doc warning 2021-04-02 16:40:08 +02:00
devres.c driver core: Replace printf() specifier and drop unneeded casting 2021-04-02 17:02:45 +02:00
devtmpfs.c devtmpfs: actually reclaim some init memory 2021-03-23 14:57:35 +01:00
driver.c drivers: base: Convert to printk alias functions 2020-07-10 14:16:44 +02:00
firmware.c
hypervisor.c
init.c driver core: auxiliary bus: Fix calling stage for auxiliary bus init 2021-02-11 08:43:03 +01:00
isa.c isa: Make the remove callback for isa drivers return void 2021-01-26 07:42:27 +01:00
Kconfig RISC-V Patches for the 5.12 Merge Window 2021-02-26 10:28:35 -08:00
Makefile numa: Move numa implementation to common code 2021-01-14 15:08:55 -08:00
map.c
memory.c drivers/base/memory: fix trying offlining memory blocks with memory holes on aarch64 2021-06-05 08:58:11 -07:00
module.c
node.c node: fix device cleanups in error handling code 2021-04-10 11:10:21 +02:00
pinctrl.c
platform-msi.c platform-msi: fix kernel-doc warnings 2021-04-02 16:40:08 +02:00
platform.c Revert "driver core: platform: Make platform_get_irq_optional() optional" 2021-04-07 11:47:56 +02:00
property.c media: device property: Call fwnode_graph_get_endpoint_by_id() for fwnode->secondary 2021-01-26 19:24:18 +01:00
soc.c soc: fix comment for freeing soc_dev_attr 2020-12-09 19:46:31 +01:00
swnode.c software node: Handle software node injection to an existing device properly 2021-06-23 19:34:58 +02:00
syscore.c syscore: Use pm_pr_dbg() for syscore_{suspend,resume}() 2020-09-08 13:32:06 +02:00
topology.c drivers core: Miscellaneous changes for sysfs_emit 2020-10-02 13:12:07 +02:00
transport_class.c scsi: drivers: base: Propagate errors through the transport component 2020-01-15 22:55:37 -05:00