Date: Fri, 18 Jun 2021 21:49:11 GMT From: "Bjoern A. Zeeb" <bz@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 46ae23a4024b - main - LinuxKPI: avoid userret: Returning with with pinned thread Message-ID: <202106182149.15ILnBRP069322@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=46ae23a4024b792c44a2b6c5f80429c40dac120b commit 46ae23a4024b792c44a2b6c5f80429c40dac120b Author: Bjoern A. Zeeb <bz@FreeBSD.org> AuthorDate: 2021-06-09 18:53:16 +0000 Commit: Bjoern A. Zeeb <bz@FreeBSD.org> CommitDate: 2021-06-18 21:20:10 +0000 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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/compat/linuxkpi/common/include/linux/spinlock.h b/sys/compat/linuxkpi/common/include/linux/spinlock.h index 83f45b1a2a40..ca51fd23434c 100644 --- a/sys/compat/linuxkpi/common/include/linux/spinlock.h +++ b/sys/compat/linuxkpi/common/include/linux/spinlock.h @@ -66,6 +66,7 @@ typedef struct { #define spin_lock_bh(_l) do { \ spin_lock(_l); \ + local_bh_disable(); \ } while (0) #define spin_lock_irq(_l) do { \ @@ -80,6 +81,7 @@ typedef struct { } while (0) #define spin_unlock_bh(_l) do { \ + local_bh_enable(); \ spin_unlock(_l); \ } while (0)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106182149.15ILnBRP069322>