Skip to content

Commit 53b9e26

Browse files
LeviYeoReumSuzuki K Poulose
authored andcommitted
coresight: holding cscfg_csdev_lock while removing cscfg from csdev
There'll be possible race scenario for coresight config: CPU0 CPU1 (perf enable) load module cscfg_load_config_sets() activate config. // sysfs (sys_active_cnt == 1) ... cscfg_csdev_enable_active_config() lock(csdev->cscfg_csdev_lock) deactivate config // sysfs (sys_activec_cnt == 0) cscfg_unload_config_sets() <iterating config_csdev_list> cscfg_remove_owned_csdev_configs() // here load config activate by CPU1 unlock(csdev->cscfg_csdev_lock) iterating config_csdev_list could be raced with config_csdev_list's entry delete. To resolve this race , hold csdev->cscfg_csdev_lock() while cscfg_remove_owned_csdev_configs() Fixes: 02bd588 ("coresight: configuration: Update API to permit dynamic load/unload") Signed-off-by: Yeoreum Yun <[email protected]> Reviewed-by: Leo Yan <[email protected]> Signed-off-by: Suzuki K Poulose <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 895b12b commit 53b9e26

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

drivers/hwtracing/coresight/coresight-syscfg.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,8 @@ static void cscfg_remove_owned_csdev_configs(struct coresight_device *csdev, voi
395395
if (list_empty(&csdev->config_csdev_list))
396396
return;
397397

398+
guard(raw_spinlock_irqsave)(&csdev->cscfg_csdev_lock);
399+
398400
list_for_each_entry_safe(config_csdev, tmp, &csdev->config_csdev_list, node) {
399401
if (config_csdev->config_desc->load_owner == load_owner)
400402
list_del(&config_csdev->node);

0 commit comments

Comments
 (0)