]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
LinuxKPI: avoid userret: Returning with with pinned thread
authorBjoern A. Zeeb <bz@FreeBSD.org>
Wed, 9 Jun 2021 18:53:16 +0000 (18:53 +0000)
committerBjoern A. Zeeb <bz@FreeBSD.org>
Fri, 18 Jun 2021 21:20:10 +0000 (21:20 +0000)
commit46ae23a4024b792c44a2b6c5f80429c40dac120b
treea3356044972a19b1305208f4a9dadecfd5d32a68
parentedfcdffefc1671b7688c8806ae1f59484954dcc7
LinuxKPI: avoid userret: Returning with with pinned thread

Some code manually calls local_bh_disable() and spin_lock() but
then calls spin_unlock_bh() (or vice versa).
Our code then calls local_bh_disable() again from spin_lock()
which means we have the thread pin count increased twice and that
means we get out of synch and are still pinned when returning to
user space.

Avoid this by adding the explicit local_bh_{enable,disable}() to
the spin_[un]lock_bh() versions.

Sponsored by: The FreeBSD Foundation
MFC after: 2 weeks
Reviewed by: hselasky
Differential Revision: https://reviews.freebsd.org/D30711
sys/compat/linuxkpi/common/include/linux/spinlock.h