lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 18 Oct 2017 10:34:36 +0200
From:   Sebastian Andrzej Siewior <bigeasy@...utronix.de>
To:     "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
Cc:     kbuild test robot <fengguang.wu@...el.com>, kbuild-all@...org,
        Josh Triplett <josh@...htriplett.org>,
        Steven Rostedt <rostedt@...dmis.org>,
        Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
        Lai Jiangshan <jiangshanlai@...il.com>,
        linux-kernel@...r.kernel.org
Subject: [PATCH] rcu: do not include rtmutex_common.h unconditionally

Since commit bcda31a26594 ("rcu: Suppress lockdep false-positive
->boost_mtx complaints") the rtmutex_common.h is included
unconditionally. This break CONFIG_FUTEX=n configs which do not have
CONFIG_RT_MUTEX enabled which leads to the lack of certain members in
task_struct which are accessed in rtmutex_common.h as reported by the kbuild
test robot:
|   In file included from include/uapi/linux/stddef.h:1:0,
|                    from include/linux/stddef.h:4,
|                    from include/uapi/linux/posix_types.h:4,
|                    from include/uapi/linux/types.h:13,
|                    from include/linux/types.h:5,
|                    from kernel/rcu/tree.c:30:
|   kernel/rcu/../locking/rtmutex_common.h: In function 'task_has_pi_waiters':
|>> kernel/rcu/../locking/rtmutex_common.h:62:26: error: 'struct task_struct' has no member named 'pi_waiters'; did you mean 'cpu_timers'?

among other things.
I move the include back to the RCU_BOOST ifdef and add there the
rt_mutex_futex_unlock define like we already have it for rt_mutex_owner
for the same reason.
While at it, I remove the second rtmutex_common.h include within the
RCU_BOOST block because one of those is enough.

Fixes: bcda31a26594 ("rcu: Suppress lockdep false-positive ->boost_mtx complaints")
Reported-by: kbuild test robot <fengguang.wu@...el.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
---
On 2017-10-18 09:32:09 [+0200], To Paul E. McKenney wrote:
>  I will
> look at this once I made some slides…

slides, who needs those anyway…

 kernel/rcu/tree_plugin.h | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index 72d82eebf70d..d97bb9bd2f3b 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -31,9 +31,9 @@
 #include <linux/smpboot.h>
 #include <uapi/linux/sched/types.h>
 #include "../time/tick-internal.h"
-#include "../locking/rtmutex_common.h"
 
 #ifdef CONFIG_RCU_BOOST
+#include "../locking/rtmutex_common.h"
 
 /*
  * Control variables for per-CPU and per-rcu_node kthreads.  These
@@ -53,6 +53,7 @@ DEFINE_PER_CPU(char, rcu_cpu_has_work);
  * This probably needs to be excluded from -rt builds.
  */
 #define rt_mutex_owner(a) ({ WARN_ON_ONCE(1); NULL; })
+#define rt_mutex_futex_unlock(x) WARN_ON_ONCE(1)
 
 #endif /* #else #ifdef CONFIG_RCU_BOOST */
 
@@ -896,8 +897,6 @@ void exit_rcu(void)
 
 #ifdef CONFIG_RCU_BOOST
 
-#include "../locking/rtmutex_common.h"
-
 static void rcu_wake_cond(struct task_struct *t, int status)
 {
 	/*
-- 
2.15.0.rc0

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ