mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
stm class: Fix unlocking braino in the error path
[ Upstream commit 1810f2c448 ]
If an illegal attempt is made to unlink stm source device from an
stm device, the stm device's link spinlock mistakenly remains locked.
While this really shouldn't happen (there's a warning in place), the
locking should remain in order so that we can still recover from this
situation if it indeed does happen.
This patch unifies the unlocking in the exit path of
__stm_source_link_drop() to fix this.
Reported-by: Laurent Fert <laurent.fert@intel.com>
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
65b52bbc35
commit
bc9d781bed
@@ -817,10 +817,8 @@ static void __stm_source_link_drop(struct stm_source_device *src,
|
||||
spin_lock(&stm->link_lock);
|
||||
spin_lock(&src->link_lock);
|
||||
link = srcu_dereference_check(src->link, &stm_source_srcu, 1);
|
||||
if (WARN_ON_ONCE(link != stm)) {
|
||||
spin_unlock(&src->link_lock);
|
||||
return;
|
||||
}
|
||||
if (WARN_ON_ONCE(link != stm))
|
||||
goto unlock;
|
||||
|
||||
stm_output_free(link, &src->output);
|
||||
list_del_init(&src->link_entry);
|
||||
@@ -828,6 +826,7 @@ static void __stm_source_link_drop(struct stm_source_device *src,
|
||||
stm_put_device(link);
|
||||
rcu_assign_pointer(src->link, NULL);
|
||||
|
||||
unlock:
|
||||
spin_unlock(&src->link_lock);
|
||||
spin_unlock(&stm->link_lock);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user