[linux] 01/01: liblockdep: Add all the patches submitted upstream; drop one that's obsolete

debian-kernel at lists.debian.org debian-kernel at lists.debian.org
Tue Jun 14 22:31:50 UTC 2016


This is an automated email from the git hooks/post-receive script.

benh pushed a commit to branch sid
in repository linux.

commit ece80cbbec4c8082c3c3dc4fa543f362f90fbfa8
Author: Ben Hutchings <ben at decadent.org.uk>
Date:   Mon Jun 13 14:00:39 2016 +0100

    liblockdep: Add all the patches submitted upstream; drop one that's obsolete
    
    (cherry picked from commit 9d20ab14dd77ffa306f6eb70c447c73f69077773)
---
 debian/changelog                                   |  4 ++
 .../liblockdep-define-the-array_size-macro.patch   | 26 ++++++++
 .../all/liblockdep-enable-wall-by-default.patch    | 28 +++++++++
 ...fix-defined-but-not-used-warning-for-init.patch | 58 +++++++++++++++++
 .../liblockdep-fix-set-but-not-used-warnings.patch | 44 +++++++++++++
 ...blockdep-fix-undefined-symbol-prandom_u32.patch | 39 ++++++++++++
 .../all/liblockdep-fix-unused-value-warnings.patch | 72 ++++++++++++++++++++++
 ...reduce-max_lock_depth-to-avoid-overflowin.patch | 44 +++++++++++++
 .../bugfix/all/lockdep-add-missing-macros.patch    | 25 --------
 debian/patches/series                              |  8 ++-
 10 files changed, 322 insertions(+), 26 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 54aba50..1ff0a8f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -116,6 +116,10 @@ linux (4.6.2-1) UNRELEASED; urgency=medium
 
   [ Ben Hutchings ]
   * [armel,armhf,sh4] linux-image: Do not suggest fdutils
+  * liblockdep: Reduce MAX_LOCK_DEPTH to avoid overflowing lock_chain::depth
+  * liblockdep: Fix 'unused value' warnings
+  * liblockdep: Fix 'set but not used' warnings
+  * liblockdep: Fix 'defined but not used' warning for init_utsname()
 
   [ Salvatore Bonaccorso ]
   * Stack overflow via ecryptfs and /proc/$pid/environ (CVE-2016-1583)
diff --git a/debian/patches/bugfix/all/liblockdep-define-the-array_size-macro.patch b/debian/patches/bugfix/all/liblockdep-define-the-array_size-macro.patch
new file mode 100644
index 0000000..ed639ec
--- /dev/null
+++ b/debian/patches/bugfix/all/liblockdep-define-the-array_size-macro.patch
@@ -0,0 +1,26 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 14 Jun 2016 21:14:14 +0100
+Subject: [PATCH 3/7] liblockdep: Define the ARRAY_SIZE() macro
+Forwarded: http://mid.gmane.org/20160614204803.GV7555@decadent.org.uk
+
+lockdep.c now uses ARRAY_SIZE().
+
+Fixes: 75dd602a5198 ("lockdep: Fix lock_chain::base size")
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ tools/lib/lockdep/uinclude/linux/kernel.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tools/lib/lockdep/uinclude/linux/kernel.h b/tools/lib/lockdep/uinclude/linux/kernel.h
+index 276c7a8b2ed1..da87bd9ad2c1 100644
+--- a/tools/lib/lockdep/uinclude/linux/kernel.h
++++ b/tools/lib/lockdep/uinclude/linux/kernel.h
+@@ -7,6 +7,8 @@
+ #include <linux/hardirq.h>
+ #include <linux/kern_levels.h>
+ 
++#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
++
+ #ifndef container_of
+ #define container_of(ptr, type, member) ({			\
+ 	const typeof(((type *)0)->member) * __mptr = (ptr);	\
diff --git a/debian/patches/bugfix/all/liblockdep-enable-wall-by-default.patch b/debian/patches/bugfix/all/liblockdep-enable-wall-by-default.patch
new file mode 100644
index 0000000..74db9c8
--- /dev/null
+++ b/debian/patches/bugfix/all/liblockdep-enable-wall-by-default.patch
@@ -0,0 +1,28 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 14 Jun 2016 21:26:01 +0100
+Subject: [PATCH 4/7] liblockdep: Enable -Wall by default
+Forwarded: http://mid.gmane.org/20160614204841.GW7555@decadent.org.uk
+
+Regressions in liblockdep may be missed because it doesn't enable
+warnings.
+
+Adding -Wall immediately introduces a lot of warnings, but those will
+be fixed by the following commits.
+
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ tools/lib/lockdep/Makefile | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/lib/lockdep/Makefile b/tools/lib/lockdep/Makefile
+index 1d57af56814b..710a0edfe1b1 100644
+--- a/tools/lib/lockdep/Makefile
++++ b/tools/lib/lockdep/Makefile
+@@ -79,6 +79,7 @@ INCLUDES = -I. -I./uinclude -I./include -I../../include $(CONFIG_INCLUDES)
+ # Set compile option CFLAGS if not set elsewhere
+ CFLAGS ?= -g -DCONFIG_LOCKDEP -DCONFIG_STACKTRACE -DCONFIG_PROVE_LOCKING -DBITS_PER_LONG=__WORDSIZE -DLIBLOCKDEP_VERSION='"$(LIBLOCKDEP_VERSION)"' -rdynamic -O0 -g
+ CFLAGS += -fPIC
++CFLAGS += -Wall
+ 
+ override CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ)
+ 
diff --git a/debian/patches/bugfix/all/liblockdep-fix-defined-but-not-used-warning-for-init.patch b/debian/patches/bugfix/all/liblockdep-fix-defined-but-not-used-warning-for-init.patch
new file mode 100644
index 0000000..0c80843
--- /dev/null
+++ b/debian/patches/bugfix/all/liblockdep-fix-defined-but-not-used-warning-for-init.patch
@@ -0,0 +1,58 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 14 Jun 2016 21:32:11 +0100
+Subject: [PATCH 7/7] liblockdep: Fix 'defined but not used' warning for
+ init_utsname()
+Forwarded: http://mid.gmane.org/20160614204909.GZ7555@decadent.org.uk
+
+We define init_utsname() as static but not inline, resulting
+in a warning for every source file that includes lockdep.h but
+doesn't call it.
+
+Since it is only used by lockdep.c, define it in there.
+
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ tools/lib/lockdep/lockdep.c                | 10 ++++++++++
+ tools/lib/lockdep/uinclude/linux/lockdep.h | 10 ----------
+ 2 files changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/tools/lib/lockdep/lockdep.c b/tools/lib/lockdep/lockdep.c
+index a0a2e3a266af..513140ea8a58 100644
+--- a/tools/lib/lockdep/lockdep.c
++++ b/tools/lib/lockdep/lockdep.c
+@@ -5,4 +5,14 @@
+ #define hlist_add_head_rcu		hlist_add_head
+ #define hlist_del_rcu			hlist_del
+ 
++static struct new_utsname *init_utsname(void)
++{
++	static struct new_utsname n = (struct new_utsname) {
++		.release = "liblockdep",
++		.version = LIBLOCKDEP_VERSION,
++	};
++
++	return &n;
++}
++
+ #include "../../../kernel/locking/lockdep.c"
+diff --git a/tools/lib/lockdep/uinclude/linux/lockdep.h b/tools/lib/lockdep/uinclude/linux/lockdep.h
+index d1079034a14d..c157242e0417 100644
+--- a/tools/lib/lockdep/uinclude/linux/lockdep.h
++++ b/tools/lib/lockdep/uinclude/linux/lockdep.h
+@@ -44,16 +44,6 @@ static inline int debug_locks_off(void)
+ #define atomic_t unsigned long
+ #define atomic_inc(x) ((*(x))++)
+ 
+-static struct new_utsname *init_utsname(void)
+-{
+-	static struct new_utsname n = (struct new_utsname) {
+-		.release = "liblockdep",
+-		.version = LIBLOCKDEP_VERSION,
+-	};
+-
+-	return &n;
+-}
+-
+ #define print_tainted() ""
+ #define static_obj(x) 1
+ 
diff --git a/debian/patches/bugfix/all/liblockdep-fix-set-but-not-used-warnings.patch b/debian/patches/bugfix/all/liblockdep-fix-set-but-not-used-warnings.patch
new file mode 100644
index 0000000..1a84dad
--- /dev/null
+++ b/debian/patches/bugfix/all/liblockdep-fix-set-but-not-used-warnings.patch
@@ -0,0 +1,44 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 14 Jun 2016 20:13:24 +0100
+Subject: [PATCH 6/7] liblockdep: Fix 'set but not used' warnings
+Forwarded: http://mid.gmane.org/20160614204900.GY7555@decadent.org.uk
+
+liblockdep defines trivial macros for working with interrupt flags, as
+interrupts are never disabled in userland.  This results in warnings
+from gcc when -Wunused-but-set-variable is enabled, and it is enabled
+by -Wall.  Fix this by evaluating the flags parameter and casting it to
+void.
+
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ tools/lib/lockdep/uinclude/linux/irqflags.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/tools/lib/lockdep/uinclude/linux/irqflags.h b/tools/lib/lockdep/uinclude/linux/irqflags.h
+index 6cc296f0fad0..df77669cfe1c 100644
+--- a/tools/lib/lockdep/uinclude/linux/irqflags.h
++++ b/tools/lib/lockdep/uinclude/linux/irqflags.h
+@@ -17,19 +17,19 @@
+ #define raw_local_irq_disable() do { } while (0)
+ #define raw_local_irq_enable() do { } while (0)
+ #define raw_local_irq_save(flags) ((flags) = 0)
+-#define raw_local_irq_restore(flags) do { } while (0)
++#define raw_local_irq_restore(flags) ((void)(flags))
+ #define raw_local_save_flags(flags) ((flags) = 0)
+-#define raw_irqs_disabled_flags(flags) do { } while (0)
++#define raw_irqs_disabled_flags(flags) ((void)(flags))
+ #define raw_irqs_disabled() 0
+ #define raw_safe_halt()
+ 
+ #define local_irq_enable() do { } while (0)
+ #define local_irq_disable() do { } while (0)
+ #define local_irq_save(flags) ((flags) = 0)
+-#define local_irq_restore(flags) do { } while (0)
++#define local_irq_restore(flags) ((void)(flags))
+ #define local_save_flags(flags)	((flags) = 0)
+ #define irqs_disabled() (1)
+-#define irqs_disabled_flags(flags) (0)
++#define irqs_disabled_flags(flags) ((void)(flags), 0)
+ #define safe_halt() do { } while (0)
+ 
+ #define trace_lock_release(x, y)
diff --git a/debian/patches/bugfix/all/liblockdep-fix-undefined-symbol-prandom_u32.patch b/debian/patches/bugfix/all/liblockdep-fix-undefined-symbol-prandom_u32.patch
new file mode 100644
index 0000000..b03f7f5
--- /dev/null
+++ b/debian/patches/bugfix/all/liblockdep-fix-undefined-symbol-prandom_u32.patch
@@ -0,0 +1,39 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 14 Jun 2016 21:09:19 +0100
+Subject: [PATCH 1/7] liblockdep: Fix undefined symbol prandom_u32
+Forwarded: http://mid.gmane.org/20160614204713.GT7555@decadent.org.uk
+
+__lock_pin_lock() now calls prandom_u32() which is not defined in
+liblockdep.  __lock_pin_lock() and its caller lock_pin_lock() are dead
+code in liblockdep, but we still need to provide a definition of
+prandom_u32() in case lazy binding is disabled.
+
+Fixes: e7904a28f533 ("locking/lockdep, sched/core: Implement a better ...")
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ tools/lib/lockdep/common.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/tools/lib/lockdep/common.c b/tools/lib/lockdep/common.c
+index d1c89cc06f5f..405c17667c4d 100644
+--- a/tools/lib/lockdep/common.c
++++ b/tools/lib/lockdep/common.c
+@@ -1,5 +1,6 @@
+ #include <stddef.h>
+ #include <stdbool.h>
++#include <stdlib.h>
+ #include <linux/compiler.h>
+ #include <linux/lockdep.h>
+ #include <unistd.h>
+@@ -10,6 +11,11 @@ static __thread struct task_struct current_obj;
+ /* lockdep wants these */
+ bool debug_locks = true;
+ bool debug_locks_silent;
++u32 prandom_u32(void)
++{
++	/* Used only by lock_pin_lock() which is dead code */
++	abort();
++}
+ 
+ __attribute__((destructor)) static void liblockdep_exit(void)
+ {
diff --git a/debian/patches/bugfix/all/liblockdep-fix-unused-value-warnings.patch b/debian/patches/bugfix/all/liblockdep-fix-unused-value-warnings.patch
new file mode 100644
index 0000000..4612489
--- /dev/null
+++ b/debian/patches/bugfix/all/liblockdep-fix-unused-value-warnings.patch
@@ -0,0 +1,72 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 14 Jun 2016 20:13:23 +0100
+Subject: [PATCH 5/7] liblockdep: Fix 'unused value' warnings
+Forwarded: http://mid.gmane.org/20160614204853.GX7555@decadent.org.uk
+
+liblockdep defines various macros that may expand to an expression
+with no effect, while the in-kernel definition does have an effect.
+This results in warnings from gcc when -Wunused-value is enabled, and
+is is enabled by -Wall.  Fix this by introducing trivial functions,
+as function return values are generally allowed to be ignored.
+
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ tools/lib/lockdep/uinclude/linux/debug_locks.h |  2 +-
+ tools/lib/lockdep/uinclude/linux/kernel.h      | 12 +++++++++---
+ tools/lib/lockdep/uinclude/linux/lockdep.h     |  6 +++++-
+ 3 files changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/tools/lib/lockdep/uinclude/linux/debug_locks.h b/tools/lib/lockdep/uinclude/linux/debug_locks.h
+index f38eb64df794..1d4fbec5c649 100644
+--- a/tools/lib/lockdep/uinclude/linux/debug_locks.h
++++ b/tools/lib/lockdep/uinclude/linux/debug_locks.h
+@@ -4,7 +4,7 @@
+ #include <stddef.h>
+ #include <linux/compiler.h>
+ 
+-#define DEBUG_LOCKS_WARN_ON(x) (x)
++#define DEBUG_LOCKS_WARN_ON(x) WARN_ON(x)
+ 
+ extern bool debug_locks;
+ extern bool debug_locks_silent;
+diff --git a/tools/lib/lockdep/uinclude/linux/kernel.h b/tools/lib/lockdep/uinclude/linux/kernel.h
+index da87bd9ad2c1..021cff4f4e3d 100644
+--- a/tools/lib/lockdep/uinclude/linux/kernel.h
++++ b/tools/lib/lockdep/uinclude/linux/kernel.h
+@@ -22,10 +22,16 @@
+ 	_max1 > _max2 ? _max1 : _max2; })
+ 
+ #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
+-#define WARN_ON(x) (x)
+-#define WARN_ON_ONCE(x) (x)
++
++static inline int lockdep_warn(int condition)
++{
++	return condition;
++}
++#define WARN_ON(x) lockdep_warn(x)
++#define WARN_ON_ONCE(x) WARN_ON(x)
++#define WARN(x, y...) WARN_ON(x)
++
+ #define likely(x) (x)
+-#define WARN(x, y...) (x)
+ #define uninitialized_var(x) x
+ #define __init
+ #define noinline
+diff --git a/tools/lib/lockdep/uinclude/linux/lockdep.h b/tools/lib/lockdep/uinclude/linux/lockdep.h
+index d30214221920..d1079034a14d 100644
+--- a/tools/lib/lockdep/uinclude/linux/lockdep.h
++++ b/tools/lib/lockdep/uinclude/linux/lockdep.h
+@@ -29,7 +29,11 @@ extern struct task_struct *__curr(void);
+ 
+ #define current (__curr())
+ 
+-#define debug_locks_off() 1
++static inline int debug_locks_off(void)
++{
++	return 1;
++}
++
+ #define task_pid_nr(tsk) ((tsk)->pid)
+ 
+ #define KSYM_NAME_LEN 128
diff --git a/debian/patches/bugfix/all/liblockdep-reduce-max_lock_depth-to-avoid-overflowin.patch b/debian/patches/bugfix/all/liblockdep-reduce-max_lock_depth-to-avoid-overflowin.patch
new file mode 100644
index 0000000..f15e6d3
--- /dev/null
+++ b/debian/patches/bugfix/all/liblockdep-reduce-max_lock_depth-to-avoid-overflowin.patch
@@ -0,0 +1,44 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 14 Jun 2016 20:44:14 +0100
+Subject: [PATCH 2/7] liblockdep: Reduce MAX_LOCK_DEPTH to avoid overflowing
+ lock_chain::depth
+Forwarded: http://mid.gmane.org/20160614204752.GU7555@decadent.org.uk
+
+liblockdep has been broken since commit 75dd602a5198 ("lockdep: Fix
+lock_chain::base size"), as that adds a check that MAX_LOCK_DEPTH is
+within the range of lock_chain::depth and in liblockdep it is much
+too large.
+
+That should have resulted in a compiler error, but didn't because:
+
+- the check uses ARRAY_SIZE(), which isn't yet defined in liblockdep
+  so is assumed to be an (undeclared) function
+- putting a function call inside a BUILD_BUG_ON() expression quietly
+  turns it into some nonsense involving a variable-length array
+
+It did produce a compiler warning, but I didn't notice because
+liblockdep already produces too many warnings if -Wall is enabled
+(which I'll fix shortly).
+
+Even before that commit, which reduced lock_chain::depth from 8 bits
+to 6, MAX_LOCK_DEPTH was too large.
+
+Cc: <stable at vger.kernel.org> # for versions before 4.6, use a value of 255
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ tools/lib/lockdep/uinclude/linux/lockdep.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/lib/lockdep/uinclude/linux/lockdep.h b/tools/lib/lockdep/uinclude/linux/lockdep.h
+index c808c7d02d21..d30214221920 100644
+--- a/tools/lib/lockdep/uinclude/linux/lockdep.h
++++ b/tools/lib/lockdep/uinclude/linux/lockdep.h
+@@ -8,7 +8,7 @@
+ #include <linux/utsname.h>
+ #include <linux/compiler.h>
+ 
+-#define MAX_LOCK_DEPTH 2000UL
++#define MAX_LOCK_DEPTH 63UL
+ 
+ #define asmlinkage
+ #define __visible
diff --git a/debian/patches/bugfix/all/lockdep-add-missing-macros.patch b/debian/patches/bugfix/all/lockdep-add-missing-macros.patch
deleted file mode 100644
index be41cc2..0000000
--- a/debian/patches/bugfix/all/lockdep-add-missing-macros.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From: Ben Hutchings <ben at decadent.org.uk>
-Date: Thu, 18 Feb 2016 03:34:25 +0000
-Subject: lockdep: Add missing macros
-Forwarded: no
-
-liblockdep is broken again due to lockdep using kernel macros that it
-doesn't have substitutes for.
----
---- a/tools/lib/lockdep/uinclude/linux/kernel.h
-+++ b/tools/lib/lockdep/uinclude/linux/kernel.h
-@@ -6,6 +6,7 @@
- #include <linux/rcu.h>
- #include <linux/hardirq.h>
- #include <linux/kern_levels.h>
-+#include <linux/compiler.h>
- 
- #ifndef container_of
- #define container_of(ptr, type, member) ({			\
---- a/tools/lib/lockdep/uinclude/linux/list.h
-+++ b/tools/lib/lockdep/uinclude/linux/list.h
-@@ -1,1 +1,4 @@
- #include "../../../include/linux/list.h"
-+#define hlist_add_head_rcu hlist_add_head
-+#define hlist_del_rcu hlist_del
-+#define hlist_for_each_entry_rcu hlist_for_each_entry
diff --git a/debian/patches/series b/debian/patches/series
index 0a43fd7..5886d42 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -127,8 +127,14 @@ bugfix/x86/tools-hv-fix-fortify-format-warning.patch
 bugfix/x86/revert-perf-build-fix-libunwind-feature-detection-on.patch
 bugfix/alpha/alpha-uapi-add-support-for-__sane_userspace_types__.patch
 bugfix/x86/revert-perf-tools-x86-build-perf-on-older-user-space.patch
-bugfix/all/lockdep-add-missing-macros.patch
 bugfix/all/tools-build-remove-bpf-run-time-check-at-build-time.patch
 bugfix/all/power-cpupower-fix-manpages-NAME.patch
 bugfix/all/tools-lib-traceevent-fix-use-of-uninitialized-variables.patch
 bugfix/all/scripts-fix-x.509-pem-support-in-sign-file.patch
+bugfix/all/liblockdep-fix-undefined-symbol-prandom_u32.patch
+bugfix/all/liblockdep-reduce-max_lock_depth-to-avoid-overflowin.patch
+bugfix/all/liblockdep-define-the-array_size-macro.patch
+bugfix/all/liblockdep-enable-wall-by-default.patch
+bugfix/all/liblockdep-fix-unused-value-warnings.patch
+bugfix/all/liblockdep-fix-set-but-not-used-warnings.patch
+bugfix/all/liblockdep-fix-defined-but-not-used-warning-for-init.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git



More information about the Kernel-svn-changes mailing list