Hello community,

here is the log from the commit of package kernel-source for openSUSE:Factory 
checked in at 2017-05-02 08:54:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kernel-source (Old)
 and      /work/SRC/openSUSE:Factory/.kernel-source.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kernel-source"

Tue May  2 08:54:18 2017 rev:362 rq:491584 version:4.10.13

Changes:
--------
--- /work/SRC/openSUSE:Factory/kernel-source/dtb-aarch64.changes        
2017-04-26 21:43:59.713366916 +0200
+++ /work/SRC/openSUSE:Factory/.kernel-source.new/dtb-aarch64.changes   
2017-05-02 08:54:20.347007300 +0200
@@ -1,0 +2,26 @@
+Thu Apr 27 14:23:31 CEST 2017 - jsl...@suse.cz
+
+- Linux 4.10.13 (bnc#1012628).
+- commit e5d11ce
+
+-------------------------------------------------------------------
+Wed Apr 26 18:22:54 CEST 2017 - ti...@suse.de
+
+- platform/x86: dell-laptop: Add keyboard backlight timeout AC
+  settings (bsc#1013561).
+- commit 7aedba7
+
+-------------------------------------------------------------------
+Wed Apr 26 11:25:10 CEST 2017 - mkube...@suse.cz
+
+- macsec: avoid heap overflow in skb_to_sgvec (CVE-2017-7477
+  bsc#1035823).
+- commit 461b1f0
+
+-------------------------------------------------------------------
+Mon Apr 24 17:47:04 CEST 2017 - ti...@suse.de
+
+- Disable CONFIG_POWER_SUPPLY_DEBUG in debug kernels (bsc#1031500).
+- commit 11b3f7c
+
+-------------------------------------------------------------------
dtb-armv6l.changes: same change
dtb-armv7l.changes: same change
kernel-64kb.changes: same change
kernel-debug.changes: same change
kernel-default.changes: same change
kernel-docs.changes: same change
kernel-lpae.changes: same change
kernel-obs-build.changes: same change
kernel-obs-qa.changes: same change
kernel-pae.changes: same change
kernel-source.changes: same change
kernel-syms.changes: same change
kernel-syzkaller.changes: same change
kernel-vanilla.changes: same change

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ dtb-aarch64.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:26.250174907 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:26.254174343 +0200
@@ -16,15 +16,15 @@
 #
 
 
-%define patchversion 4.10.12
+%define patchversion 4.10.13
 %define vanilla_only 0
 
 %include %_sourcedir/kernel-spec-macros
 
 Name:           dtb-aarch64
-Version:        4.10.12
+Version:        4.10.13
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g3043bd9
+Release:        <RELEASE>.ge5d11ce
 %else
 Release:        0
 %endif

dtb-armv6l.spec: same change
dtb-armv7l.spec: same change
++++++ kernel-64kb.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:26.378156860 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:26.382156296 +0200
@@ -18,7 +18,7 @@
 
 
 %define srcversion 4.10
-%define patchversion 4.10.12
+%define patchversion 4.10.13
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -58,9 +58,9 @@
 Summary:        Kernel with 64kb PAGE_SIZE
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        4.10.12
+Version:        4.10.13
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g3043bd9
+Release:        <RELEASE>.ge5d11ce
 %else
 Release:        0
 %endif

kernel-debug.spec: same change
kernel-default.spec: same change
++++++ kernel-docs.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:26.478142761 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:26.482142197 +0200
@@ -16,7 +16,7 @@
 #
 
 
-%define patchversion 4.10.12
+%define patchversion 4.10.13
 %define variant %{nil}
 
 %include %_sourcedir/kernel-spec-macros
@@ -42,9 +42,9 @@
 Summary:        Kernel Documentation (man pages)
 License:        GPL-2.0
 Group:          Documentation/Man
-Version:        4.10.12
+Version:        4.10.13
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g3043bd9
+Release:        <RELEASE>.ge5d11ce
 %else
 Release:        0
 %endif

++++++ kernel-lpae.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:26.514137686 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:26.518137122 +0200
@@ -18,7 +18,7 @@
 
 
 %define srcversion 4.10
-%define patchversion 4.10.12
+%define patchversion 4.10.13
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -58,9 +58,9 @@
 Summary:        Kernel for LPAE enabled systems
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        4.10.12
+Version:        4.10.13
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g3043bd9
+Release:        <RELEASE>.ge5d11ce
 %else
 Release:        0
 %endif

++++++ kernel-obs-build.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:26.550132610 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:26.550132610 +0200
@@ -19,7 +19,7 @@
 
 #!BuildIgnore: post-build-checks
 
-%define patchversion 4.10.12
+%define patchversion 4.10.13
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -57,9 +57,9 @@
 Summary:        package kernel and initrd for OBS VM builds
 License:        GPL-2.0
 Group:          SLES
-Version:        4.10.12
+Version:        4.10.13
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g3043bd9
+Release:        <RELEASE>.ge5d11ce
 %else
 Release:        0
 %endif

++++++ kernel-obs-qa.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:26.586127534 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:26.594126407 +0200
@@ -17,7 +17,7 @@
 # needsrootforbuild
 
 
-%define patchversion 4.10.12
+%define patchversion 4.10.13
 %define variant %{nil}
 
 %include %_sourcedir/kernel-spec-macros
@@ -36,9 +36,9 @@
 Summary:        Basic QA tests for the kernel
 License:        GPL-2.0
 Group:          SLES
-Version:        4.10.12
+Version:        4.10.13
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g3043bd9
+Release:        <RELEASE>.ge5d11ce
 %else
 Release:        0
 %endif

++++++ kernel-pae.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:26.626121895 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:26.630121331 +0200
@@ -18,7 +18,7 @@
 
 
 %define srcversion 4.10
-%define patchversion 4.10.12
+%define patchversion 4.10.13
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -58,9 +58,9 @@
 Summary:        Kernel with PAE Support
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        4.10.12
+Version:        4.10.13
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g3043bd9
+Release:        <RELEASE>.ge5d11ce
 %else
 Release:        0
 %endif

++++++ kernel-source.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:26.658117383 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:26.662116819 +0200
@@ -18,7 +18,7 @@
 
 
 %define srcversion 4.10
-%define patchversion 4.10.12
+%define patchversion 4.10.13
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -30,9 +30,9 @@
 Summary:        The Linux Kernel Sources
 License:        GPL-2.0
 Group:          Development/Sources
-Version:        4.10.12
+Version:        4.10.13
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g3043bd9
+Release:        <RELEASE>.ge5d11ce
 %else
 Release:        0
 %endif

++++++ kernel-syms.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:26.690112872 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:26.694112308 +0200
@@ -24,10 +24,10 @@
 Summary:        Kernel Symbol Versions (modversions)
 License:        GPL-2.0
 Group:          Development/Sources
-Version:        4.10.12
+Version:        4.10.13
 %if %using_buildservice
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g3043bd9
+Release:        <RELEASE>.ge5d11ce
 %else
 Release:        0
 %endif

++++++ kernel-syzkaller.spec ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:26.726107796 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:26.730107232 +0200
@@ -18,7 +18,7 @@
 
 
 %define srcversion 4.10
-%define patchversion 4.10.12
+%define patchversion 4.10.13
 %define variant %{nil}
 %define vanilla_only 0
 
@@ -58,9 +58,9 @@
 Summary:        Kernel used for fuzzing by syzkaller
 License:        GPL-2.0
 Group:          System/Kernel
-Version:        4.10.12
+Version:        4.10.13
 %if 0%{?is_kotd}
-Release:        <RELEASE>.g3043bd9
+Release:        <RELEASE>.ge5d11ce
 %else
 Release:        0
 %endif

kernel-vanilla.spec: same change
++++++ config.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/arm64/default new/config/arm64/default
--- old/config/arm64/default    2017-03-22 14:15:00.000000000 +0100
+++ new/config/arm64/default    2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm64 4.10.5 Kernel Configuration
+# Linux/arm64 4.10.12 Kernel Configuration
 #
 CONFIG_ARM64=y
 CONFIG_64BIT=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/armv6hl/default new/config/armv6hl/default
--- old/config/armv6hl/default  2017-03-22 14:15:00.000000000 +0100
+++ new/config/armv6hl/default  2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 4.10.0 Kernel Configuration
+# Linux/arm 4.10.12 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_ARM_HAS_SG_CHAIN=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/armv7hl/default new/config/armv7hl/default
--- old/config/armv7hl/default  2017-03-22 14:15:00.000000000 +0100
+++ new/config/armv7hl/default  2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 4.10.0 Kernel Configuration
+# Linux/arm 4.10.12 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_ARM_HAS_SG_CHAIN=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/armv7hl/lpae new/config/armv7hl/lpae
--- old/config/armv7hl/lpae     2017-03-22 14:15:00.000000000 +0100
+++ new/config/armv7hl/lpae     2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 4.10.0 Kernel Configuration
+# Linux/arm 4.10.12 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_ARM_HAS_SG_CHAIN=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/i386/debug new/config/i386/debug
--- old/config/i386/debug       2017-03-22 14:15:00.000000000 +0100
+++ new/config/i386/debug       2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/i386 4.10.0 Kernel Configuration
+# Linux/i386 4.10.12 Kernel Configuration
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
@@ -4210,7 +4210,7 @@
 CONFIG_POWER_AVS=y
 # CONFIG_POWER_RESET is not set
 CONFIG_POWER_SUPPLY=y
-CONFIG_POWER_SUPPLY_DEBUG=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
 CONFIG_PDA_POWER=m
 # CONFIG_GENERIC_ADC_BATTERY is not set
 # CONFIG_TEST_POWER is not set
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/i386/default new/config/i386/default
--- old/config/i386/default     2017-03-22 14:15:00.000000000 +0100
+++ new/config/i386/default     2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/i386 4.10.0 Kernel Configuration
+# Linux/i386 4.10.12 Kernel Configuration
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/i386/pae new/config/i386/pae
--- old/config/i386/pae 2017-03-22 14:15:00.000000000 +0100
+++ new/config/i386/pae 2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/i386 4.10.0 Kernel Configuration
+# Linux/i386 4.10.12 Kernel Configuration
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/ppc64/debug new/config/ppc64/debug
--- old/config/ppc64/debug      2017-03-22 14:15:00.000000000 +0100
+++ new/config/ppc64/debug      2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/powerpc 4.10.0 Kernel Configuration
+# Linux/powerpc 4.10.12 Kernel Configuration
 #
 CONFIG_PPC64=y
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/ppc64/default new/config/ppc64/default
--- old/config/ppc64/default    2017-03-22 14:15:00.000000000 +0100
+++ new/config/ppc64/default    2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/powerpc 4.10.0 Kernel Configuration
+# Linux/powerpc 4.10.12 Kernel Configuration
 #
 CONFIG_PPC64=y
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/ppc64le/debug new/config/ppc64le/debug
--- old/config/ppc64le/debug    2017-03-22 14:15:00.000000000 +0100
+++ new/config/ppc64le/debug    2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/powerpc 4.10.0 Kernel Configuration
+# Linux/powerpc 4.10.12 Kernel Configuration
 #
 CONFIG_PPC64=y
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/ppc64le/default new/config/ppc64le/default
--- old/config/ppc64le/default  2017-03-22 14:15:00.000000000 +0100
+++ new/config/ppc64le/default  2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/powerpc 4.10.0 Kernel Configuration
+# Linux/powerpc 4.10.12 Kernel Configuration
 #
 CONFIG_PPC64=y
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/s390x/default new/config/s390x/default
--- old/config/s390x/default    2017-03-22 14:15:00.000000000 +0100
+++ new/config/s390x/default    2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/s390 4.10.0 Kernel Configuration
+# Linux/s390 4.10.12 Kernel Configuration
 #
 CONFIG_MMU=y
 CONFIG_ZONE_DMA=y
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/x86_64/debug new/config/x86_64/debug
--- old/config/x86_64/debug     2017-03-22 14:15:00.000000000 +0100
+++ new/config/x86_64/debug     2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86_64 4.10.0 Kernel Configuration
+# Linux/x86_64 4.10.12 Kernel Configuration
 #
 CONFIG_64BIT=y
 CONFIG_X86_64=y
@@ -4132,7 +4132,7 @@
 CONFIG_POWER_AVS=y
 # CONFIG_POWER_RESET is not set
 CONFIG_POWER_SUPPLY=y
-CONFIG_POWER_SUPPLY_DEBUG=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
 CONFIG_PDA_POWER=m
 # CONFIG_GENERIC_ADC_BATTERY is not set
 # CONFIG_TEST_POWER is not set
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/config/x86_64/default new/config/x86_64/default
--- old/config/x86_64/default   2017-03-22 14:15:00.000000000 +0100
+++ new/config/x86_64/default   2017-04-24 17:52:23.000000000 +0200
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86_64 4.10.0 Kernel Configuration
+# Linux/x86_64 4.10.12 Kernel Configuration
 #
 CONFIG_64BIT=y
 CONFIG_X86_64=y

++++++ patches.drivers.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.drivers/dell-laptop-Adds-support-for-keyboard-backlight-timeout 
new/patches.drivers/dell-laptop-Adds-support-for-keyboard-backlight-timeout
--- old/patches.drivers/dell-laptop-Adds-support-for-keyboard-backlight-timeout 
1970-01-01 01:00:00.000000000 +0100
+++ new/patches.drivers/dell-laptop-Adds-support-for-keyboard-backlight-timeout 
2017-04-26 18:24:24.000000000 +0200
@@ -0,0 +1,193 @@
+From bcf7d8a30e2888f78a19778a16d3dd8c10b4b0ad Mon Sep 17 00:00:00 2001
+From: Pali Rohár <pali.ro...@gmail.com>
+Date: Sun, 23 Apr 2017 21:40:47 +0200
+Subject: [PATCH] platform/x86: dell-laptop: Add keyboard backlight timeout AC
+ settings
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf8
+Content-Transfer-Encoding: 8bit
+Git-commit: bcf7d8a30e2888f78a19778a16d3dd8c10b4b0ad
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.infradead.org/linux-platform-drivers-x86.git
+References: bsc#1013561
+
+When changing keyboard backlight state on new Dell laptops, firmware
+expects a new timeout AC value filled in Set New State SMBIOS call.
+
+Without it any change of keyboard backlight state on new Dell laptops
+fails. And user can see following error message in dmesg:
+
+  dell_laptop: Setting old previous keyboard state failed
+  leds dell::kbd_backlight: Setting an LED's brightness failed (-6)
+
+This patch adds support for retrieving current timeout AC values and also
+updating them. Current timeout value in sysfs is displayed based on current
+AC status, like current display brightness value.
+
+Detection if Dell laptop supports or not new timeout AC settings is done by
+checking existence of Keyboard Backlight with AC SMBIOS token (0x0451).
+
+Signed-off-by: Pali Rohár <pali.ro...@gmail.com>
+Acked-by: Mario Limonciello <mario.limoncie...@dell.com>
+Tested-by: Arcadiy Ivanov <arca...@ivanov.biz>
+[andy: fixed merge conflict with defined constants]
+Signed-off-by: Andy Shevchenko <andriy.shevche...@linux.intel.com>
+Acked-by: Takashi Iwai <ti...@suse.de>
+
+---
+ drivers/platform/x86/dell-laptop.c |   59 
+++++++++++++++++++++++++++++++++----
+ 1 file changed, 53 insertions(+), 6 deletions(-)
+
+--- a/drivers/platform/x86/dell-laptop.c
++++ b/drivers/platform/x86/dell-laptop.c
+@@ -42,6 +42,7 @@
+ #define KBD_LED_AUTO_50_TOKEN 0x02EB
+ #define KBD_LED_AUTO_75_TOKEN 0x02EC
+ #define KBD_LED_AUTO_100_TOKEN 0x02F6
++#define KBD_LED_AC_TOKEN 0x0451
+ 
+ struct quirk_entry {
+       u8 touchpad_led;
+@@ -1024,7 +1025,7 @@ static void touchpad_led_exit(void)
+  *     bit 2     Pointing stick
+  *     bit 3     Any mouse
+  *     bits 4-7  Reserved for future use
+- *  cbRES2, byte3  Current Timeout
++ *  cbRES2, byte3  Current Timeout on battery
+  *     bits 7:6  Timeout units indicator:
+  *     00b       Seconds
+  *     01b       Minutes
+@@ -1036,6 +1037,15 @@ static void touchpad_led_exit(void)
+  *  cbRES3, byte0  Current setting of ALS value that turns the light on or 
off.
+  *  cbRES3, byte1  Current ALS reading
+  *  cbRES3, byte2  Current keyboard light level.
++ *  cbRES3, byte3  Current timeout on AC Power
++ *     bits 7:6  Timeout units indicator:
++ *     00b       Seconds
++ *     01b       Minutes
++ *     10b       Hours
++ *     11b       Days
++ *     Bits 5:0  Timeout value (0-63) in sec/min/hr/day
++ *     NOTE: A value of 0 means always on (no timeout) if any bits of RES3 
byte2
++ *     are set upon return from the upon return from the [Get Feature 
information] call.
+  *
+  * cbArg1 0x2 = Set New State
+  *  cbRES1         Standard return codes (0, -1, -2)
+@@ -1058,7 +1068,7 @@ static void touchpad_led_exit(void)
+  *     bit 2     Pointing stick
+  *     bit 3     Any mouse
+  *     bits 4-7  Reserved for future use
+- *  cbArg2, byte3  Desired Timeout
++ *  cbArg2, byte3  Desired Timeout on battery
+  *     bits 7:6  Timeout units indicator:
+  *     00b       Seconds
+  *     01b       Minutes
+@@ -1067,6 +1077,13 @@ static void touchpad_led_exit(void)
+  *     bits 5:0  Timeout value (0-63) in sec/min/hr/day
+  *  cbArg3, byte0  Desired setting of ALS value that turns the light on or 
off.
+  *  cbArg3, byte2  Desired keyboard light level.
++ *  cbArg3, byte3  Desired Timeout on AC power
++ *     bits 7:6  Timeout units indicator:
++ *     00b       Seconds
++ *     01b       Minutes
++ *     10b       Hours
++ *     11b       Days
++ *     bits 5:0  Timeout value (0-63) in sec/min/hr/day
+  */
+ 
+ 
+@@ -1112,6 +1129,8 @@ struct kbd_state {
+       u8 triggers;
+       u8 timeout_value;
+       u8 timeout_unit;
++      u8 timeout_value_ac;
++      u8 timeout_unit_ac;
+       u8 als_setting;
+       u8 als_value;
+       u8 level;
+@@ -1131,6 +1150,7 @@ static u16 kbd_token_bits;
+ static struct kbd_info kbd_info;
+ static bool kbd_als_supported;
+ static bool kbd_triggers_supported;
++static bool kbd_timeout_ac_supported;
+ 
+ static u8 kbd_mode_levels[16];
+ static int kbd_mode_levels_count;
+@@ -1269,6 +1289,8 @@ static int kbd_get_state(struct kbd_stat
+       state->als_setting = buffer->output[2] & 0xFF;
+       state->als_value = (buffer->output[2] >> 8) & 0xFF;
+       state->level = (buffer->output[2] >> 16) & 0xFF;
++      state->timeout_value_ac = (buffer->output[2] >> 24) & 0x3F;
++      state->timeout_unit_ac = (buffer->output[2] >> 30) & 0x3;
+ 
+  out:
+       dell_smbios_release_buffer();
+@@ -1288,6 +1310,8 @@ static int kbd_set_state(struct kbd_stat
+       buffer->input[1] |= (state->timeout_unit & 0x3) << 30;
+       buffer->input[2] = state->als_setting & 0xFF;
+       buffer->input[2] |= (state->level & 0xFF) << 16;
++      buffer->input[2] |= (state->timeout_value_ac & 0x3F) << 24;
++      buffer->input[2] |= (state->timeout_unit_ac & 0x3) << 30;
+       dell_smbios_send_request(4, 11);
+       ret = buffer->output[0];
+       dell_smbios_release_buffer();
+@@ -1394,6 +1418,13 @@ static inline int kbd_init_info(void)
+       if (ret)
+               return ret;
+ 
++      /* NOTE: Old models without KBD_LED_AC_TOKEN token supports only one
++       *       timeout value which is shared for both battery and AC power
++       *       settings. So do not try to set AC values on old models.
++       */
++      if (dell_smbios_find_token(KBD_LED_AC_TOKEN))
++              kbd_timeout_ac_supported = true;
++
+       kbd_get_state(&state);
+ 
+       /* NOTE: timeout value is stored in 6 bits so max value is 63 */
+@@ -1573,8 +1604,14 @@ static ssize_t kbd_led_timeout_store(str
+               return ret;
+ 
+       new_state = state;
+-      new_state.timeout_value = value;
+-      new_state.timeout_unit = unit;
++
++      if (kbd_timeout_ac_supported && power_supply_is_system_supplied() > 0) {
++              new_state.timeout_value_ac = value;
++              new_state.timeout_unit_ac = unit;
++      } else {
++              new_state.timeout_value = value;
++              new_state.timeout_unit = unit;
++      }
+ 
+       ret = kbd_set_state_safe(&new_state, &state);
+       if (ret)
+@@ -1587,16 +1624,26 @@ static ssize_t kbd_led_timeout_show(stru
+                                   struct device_attribute *attr, char *buf)
+ {
+       struct kbd_state state;
++      int value;
+       int ret;
+       int len;
++      u8 unit;
+ 
+       ret = kbd_get_state(&state);
+       if (ret)
+               return ret;
+ 
+-      len = sprintf(buf, "%d", state.timeout_value);
++      if (kbd_timeout_ac_supported && power_supply_is_system_supplied() > 0) {
++              value = state.timeout_value_ac;
++              unit = state.timeout_unit_ac;
++      } else {
++              value = state.timeout_value;
++              unit = state.timeout_unit;
++      }
++
++      len = sprintf(buf, "%d", value);
+ 
+-      switch (state.timeout_unit) {
++      switch (unit) {
+       case KBD_TIMEOUT_SECONDS:
+               return len + sprintf(buf+len, "s\n");
+       case KBD_TIMEOUT_MINUTES:

++++++ patches.fixes.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches.fixes/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch 
new/patches.fixes/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch
--- old/patches.fixes/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch  
1970-01-01 01:00:00.000000000 +0100
+++ new/patches.fixes/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch  
2017-04-26 11:25:10.000000000 +0200
@@ -0,0 +1,78 @@
+From: "Jason A. Donenfeld" <ja...@zx2c4.com>
+Date: Fri, 21 Apr 2017 23:14:48 +0200
+Subject: macsec: avoid heap overflow in skb_to_sgvec
+Patch-mainline: Queued in subsystem maintainer repository
+Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
+Git-commit: 4d6fa57b4dab0d77f4d8e9d9c73d1e63f6fe8fee
+References: CVE-2017-7477 bsc#1035823
+
+While this may appear as a humdrum one line change, it's actually quite
+important. An sk_buff stores data in three places:
+
+1. A linear chunk of allocated memory in skb->data. This is the easiest
+   one to work with, but it precludes using scatterdata since the memory
+   must be linear.
+2. The array skb_shinfo(skb)->frags, which is of maximum length
+   MAX_SKB_FRAGS. This is nice for scattergather, since these fragments
+   can point to different pages.
+3. skb_shinfo(skb)->frag_list, which is a pointer to another sk_buff,
+   which in turn can have data in either (1) or (2).
+
+The first two are rather easy to deal with, since they're of a fixed
+maximum length, while the third one is not, since there can be
+potentially limitless chains of fragments. Fortunately dealing with
+frag_list is opt-in for drivers, so drivers don't actually have to deal
+with this mess. For whatever reason, macsec decided it wanted pain, and
+so it explicitly specified NETIF_F_FRAGLIST.
+
+Because dealing with (1), (2), and (3) is insane, most users of sk_buff
+doing any sort of crypto or paging operation calls a convenient function
+called skb_to_sgvec (which happens to be recursive if (3) is in use!).
+This takes a sk_buff as input, and writes into its output pointer an
+array of scattergather list items. Sometimes people like to declare a
+fixed size scattergather list on the stack; othertimes people like to
+allocate a fixed size scattergather list on the heap. However, if you're
+doing it in a fixed-size fashion, you really shouldn't be using
+NETIF_F_FRAGLIST too (unless you're also ensuring the sk_buff and its
+frag_list children arent't shared and then you check the number of
+fragments in total required.)
+
+Macsec specifically does this:
+
+        size += sizeof(struct scatterlist) * (MAX_SKB_FRAGS + 1);
+        tmp = kmalloc(size, GFP_ATOMIC);
+        *sg = (struct scatterlist *)(tmp + sg_offset);
+       ...
+        sg_init_table(sg, MAX_SKB_FRAGS + 1);
+        skb_to_sgvec(skb, sg, 0, skb->len);
+
+Specifying MAX_SKB_FRAGS + 1 is the right answer usually, but not if you're
+using NETIF_F_FRAGLIST, in which case the call to skb_to_sgvec will
+overflow the heap, and disaster ensues.
+
+Signed-off-by: Jason A. Donenfeld <ja...@zx2c4.com>
+Cc: sta...@vger.kernel.org
+Cc: secur...@kernel.org
+Signed-off-by: David S. Miller <da...@davemloft.net>
+Acked-by: Michal Kubecek <mkube...@suse.cz>
+
+---
+ drivers/net/macsec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
+index f83cf6696820..8420069594b3 100644
+--- a/drivers/net/macsec.c
++++ b/drivers/net/macsec.c
+@@ -2713,7 +2713,7 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
+ }
+ 
+ #define MACSEC_FEATURES \
+-      (NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST)
++      (NETIF_F_SG | NETIF_F_HIGHDMA)
+ static struct lock_class_key macsec_netdev_addr_lock_key;
+ 
+ static int macsec_dev_init(struct net_device *dev)
+-- 
+2.12.2
+

++++++ patches.kernel.org.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches.kernel.org/patch-4.10.12-13 
new/patches.kernel.org/patch-4.10.12-13
--- old/patches.kernel.org/patch-4.10.12-13     1970-01-01 01:00:00.000000000 
+0100
+++ new/patches.kernel.org/patch-4.10.12-13     2017-04-27 14:23:31.000000000 
+0200
@@ -0,0 +1,845 @@
+From: Jiri Slaby <jsl...@suse.cz>
+Subject: Linux 4.10.13
+References: bnc#1012628
+Patch-mainline: 4.10.13
+Git-commit: 956a4cd2c957acf638ff29951aabaa9d8e92bbc2
+Git-commit: 29f72ce3e4d18066ec75c79c857bee0618a3504b
+Git-commit: 9e1ba4f27f018742a1aa95d11e35106feba08ec1
+Git-commit: 9cd9a21ce070be8a918ffd3381468315a7a76ba6
+Git-commit: 0dc9c639e6553e39c13b2c0d54c8a1b098cb95e2
+Git-commit: 9e478066eae41211c92a8f63cc69aafc391bd6ab
+Git-commit: 3018e947d7fd536d57e2b550c33e456d921fff8c
+Git-commit: 32fe905c17f001c0eee13c59afddd0bf2eed509c
+Git-commit: c3d9fda688742c06e89aa1f0f8fd943fc11468cb
+Git-commit: 9f327845358d3dd0d8a5a7a5436b0aa5c432e757
+Git-commit: a6db2c86033bc41329770e90c20d4f1fec3824e4
+Git-commit: fe8c470ab87d90e4b5115902dd94eced7e3305c3
+Git-commit: 704de489e0e3640a2ee2d0daf173e9f7375582ba
+Git-commit: a8f60d1fadf7b8b54449fcc9d6b15248917478ba
+Git-commit: ce69e2fea093b7fa3991c87849c4955cd47796c9
+Git-commit: a0918f1ce6a43ac980b42b300ec443c154970979
+Git-commit: 62a6cfddcc0a5313e7da3e8311ba16226fe0ac10
+Git-commit: fc280fe871449ead4bdbd1665fa52c7c01c64765
+Git-commit: 78f7a45dac2a2d2002f98a3a95f7979867868d73
+Git-commit: 286f3f478796fb4f9e003e9f7d649f3c33f08d2f
+Git-commit: df62db5be2e5f070ecd1a5ece5945b590ee112e0
+Git-commit: c9f838d104fed6f2f61d68164712e3204bf5271b
+Git-commit: c1644fe041ebaf6519f6809146a77c3ead9193af
+Git-commit: ee8f844e3c5a73b999edf733df1c529d6503ec2f
+
+Signed-off-by: Jiri Slaby <jsl...@suse.cz>
+---
+diff --git a/Makefile b/Makefile
+index 9689d3f644ea..8285f4de02d1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 4
+ PATCHLEVEL = 10
+-SUBLEVEL = 12
++SUBLEVEL = 13
+ EXTRAVERSION =
+ NAME = Fearless Coyote
+ 
+diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
+index 6432d4bf08c8..767ef6d68c9e 100644
+--- a/arch/powerpc/kernel/entry_64.S
++++ b/arch/powerpc/kernel/entry_64.S
+@@ -689,7 +689,7 @@ resume_kernel:
+ 
+       addi    r8,r1,INT_FRAME_SIZE    /* Get the kprobed function entry */
+ 
+-      lwz     r3,GPR1(r1)
++      ld      r3,GPR1(r1)
+       subi    r3,r3,INT_FRAME_SIZE    /* dst: Allocate a trampoline exception 
frame */
+       mr      r4,r1                   /* src:  current exception frame */
+       mr      r1,r3                   /* Reroute the trampoline frame to r1 */
+@@ -703,8 +703,8 @@ resume_kernel:
+       addi    r6,r6,8
+       bdnz    2b
+ 
+-      /* Do real store operation to complete stwu */
+-      lwz     r5,GPR1(r1)
++      /* Do real store operation to complete stdu */
++      ld      r5,GPR1(r1)
+       std     r8,0(r5)
+ 
+       /* Clear _TIF_EMULATE_STACK_STORE flag */
+diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
+index 0362cd5fa187..0cea7026e4ff 100644
+--- a/arch/s390/include/asm/pgtable.h
++++ b/arch/s390/include/asm/pgtable.h
+@@ -1029,6 +1029,8 @@ int get_guest_storage_key(struct mm_struct *mm, unsigned 
long addr,
+ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
+                             pte_t *ptep, pte_t entry)
+ {
++      if (pte_present(entry))
++              pte_val(entry) &= ~_PAGE_UNUSED;
+       if (mm_has_pgste(mm))
+               ptep_set_pte_at(mm, addr, ptep, entry);
+       else
+diff --git a/arch/x86/kernel/cpu/mcheck/mce-genpool.c 
b/arch/x86/kernel/cpu/mcheck/mce-genpool.c
+index 93d824ec3120..040af1939460 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce-genpool.c
++++ b/arch/x86/kernel/cpu/mcheck/mce-genpool.c
+@@ -85,7 +85,7 @@ void mce_gen_pool_process(void)
+       head = llist_reverse_order(head);
+       llist_for_each_entry_safe(node, tmp, head, llnode) {
+               mce = &node->mce;
+-              atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, mce);
++              blocking_notifier_call_chain(&x86_mce_decoder_chain, 0, mce);
+               gen_pool_free(mce_evt_pool, (unsigned long)node, sizeof(*node));
+       }
+ }
+diff --git a/arch/x86/kernel/cpu/mcheck/mce-internal.h 
b/arch/x86/kernel/cpu/mcheck/mce-internal.h
+index cd74a3f00aea..de20902ecf23 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce-internal.h
++++ b/arch/x86/kernel/cpu/mcheck/mce-internal.h
+@@ -13,7 +13,7 @@ enum severity_level {
+       MCE_PANIC_SEVERITY,
+ };
+ 
+-extern struct atomic_notifier_head x86_mce_decoder_chain;
++extern struct blocking_notifier_head x86_mce_decoder_chain;
+ 
+ #define ATTR_LEN              16
+ #define INITIAL_CHECK_INTERVAL        5 * 60 /* 5 minutes */
+diff --git a/arch/x86/kernel/cpu/mcheck/mce.c 
b/arch/x86/kernel/cpu/mcheck/mce.c
+index 036fc03aefbd..fcf8b8d6ebfb 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce.c
++++ b/arch/x86/kernel/cpu/mcheck/mce.c
+@@ -123,7 +123,7 @@ static void (*quirk_no_way_out)(int bank, struct mce *m, 
struct pt_regs *regs);
+  * CPU/chipset specific EDAC code can register a notifier call here to print
+  * MCE errors in a human-readable form.
+  */
+-ATOMIC_NOTIFIER_HEAD(x86_mce_decoder_chain);
++BLOCKING_NOTIFIER_HEAD(x86_mce_decoder_chain);
+ 
+ /* Do initial initialization of a struct mce */
+ void mce_setup(struct mce *m)
+@@ -223,7 +223,7 @@ void mce_register_decode_chain(struct notifier_block *nb)
+       if (nb != &mce_srao_nb && nb->priority == INT_MAX)
+               nb->priority -= 1;
+ 
+-      atomic_notifier_chain_register(&x86_mce_decoder_chain, nb);
++      blocking_notifier_chain_register(&x86_mce_decoder_chain, nb);
+ }
+ EXPORT_SYMBOL_GPL(mce_register_decode_chain);
+ 
+@@ -231,7 +231,7 @@ void mce_unregister_decode_chain(struct notifier_block *nb)
+ {
+       atomic_dec(&num_notifiers);
+ 
+-      atomic_notifier_chain_unregister(&x86_mce_decoder_chain, nb);
++      blocking_notifier_chain_unregister(&x86_mce_decoder_chain, nb);
+ }
+ EXPORT_SYMBOL_GPL(mce_unregister_decode_chain);
+ 
+@@ -324,18 +324,7 @@ static void __print_mce(struct mce *m)
+ 
+ static void print_mce(struct mce *m)
+ {
+-      int ret = 0;
+-
+       __print_mce(m);
+-
+-      /*
+-       * Print out human-readable details about the MCE error,
+-       * (if the CPU has an implementation for that)
+-       */
+-      ret = atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m);
+-      if (ret == NOTIFY_STOP)
+-              return;
+-
+       pr_emerg_ratelimited(HW_ERR "Run the above through 'mcelog --ascii'\n");
+ }
+ 
+diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c 
b/arch/x86/kernel/cpu/mcheck/mce_amd.c
+index a5fd137417a2..b44a25d77a84 100644
+--- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
++++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
+@@ -60,7 +60,7 @@ static const char * const th_names[] = {
+       "load_store",
+       "insn_fetch",
+       "combined_unit",
+-      "",
++      "decode_unit",
+       "northbridge",
+       "execution_unit",
+ };
+diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
+index fcd4ce6f78d5..1c2b846c5776 100644
+--- a/drivers/acpi/power.c
++++ b/drivers/acpi/power.c
+@@ -200,6 +200,7 @@ static int acpi_power_get_list_state(struct list_head 
*list, int *state)
+               return -EINVAL;
+ 
+       /* The state of the list is 'on' IFF all resources are 'on'. */
++      cur_state = 0;
+       list_for_each_entry(entry, list, node) {
+               struct acpi_power_resource *resource = entry->resource;
+               acpi_handle handle = resource->device.handle;
+diff --git a/drivers/dax/Kconfig b/drivers/dax/Kconfig
+index 3e2ab3b14eea..9e95bf94eb13 100644
+--- a/drivers/dax/Kconfig
++++ b/drivers/dax/Kconfig
+@@ -2,6 +2,7 @@ menuconfig DEV_DAX
+       tristate "DAX: direct access to differentiated memory"
+       default m if NVDIMM_DAX
+       depends on TRANSPARENT_HUGEPAGE
++      select SRCU
+       help
+         Support raw access to differentiated (persistence, bandwidth,
+         latency...) memory via an mmap(2) capable character
+diff --git a/drivers/dax/dax.c b/drivers/dax/dax.c
+index 20ab6bf9d1c7..53a016c3dffa 100644
+--- a/drivers/dax/dax.c
++++ b/drivers/dax/dax.c
+@@ -24,6 +24,7 @@
+ #include "dax.h"
+ 
+ static dev_t dax_devt;
++DEFINE_STATIC_SRCU(dax_srcu);
+ static struct class *dax_class;
+ static DEFINE_IDA(dax_minor_ida);
+ static int nr_dax = CONFIG_NR_DEV_DAX;
+@@ -59,7 +60,7 @@ struct dax_region {
+  * @region - parent region
+  * @dev - device backing the character device
+  * @cdev - core chardev data
+- * @alive - !alive + rcu grace period == no new mappings can be established
++ * @alive - !alive + srcu grace period == no new mappings can be established
+  * @id - child id in the region
+  * @num_resources - number of physical address extents in this device
+  * @res - array of physical address ranges
+@@ -530,7 +531,7 @@ static int __dax_dev_pmd_fault(struct dax_dev *dax_dev,
+ static int dax_dev_pmd_fault(struct vm_area_struct *vma, unsigned long addr,
+               pmd_t *pmd, unsigned int flags)
+ {
+-      int rc;
++      int rc, id;
+       struct file *filp = vma->vm_file;
+       struct dax_dev *dax_dev = filp->private_data;
+ 
+@@ -538,9 +539,9 @@ static int dax_dev_pmd_fault(struct vm_area_struct *vma, 
unsigned long addr,
+                       current->comm, (flags & FAULT_FLAG_WRITE)
+                       ? "write" : "read", vma->vm_start, vma->vm_end);
+ 
+-      rcu_read_lock();
++      id = srcu_read_lock(&dax_srcu);
+       rc = __dax_dev_pmd_fault(dax_dev, vma, addr, pmd, flags);
+-      rcu_read_unlock();
++      srcu_read_unlock(&dax_srcu, id);
+ 
+       return rc;
+ }
+@@ -656,11 +657,11 @@ static void unregister_dax_dev(void *dev)
+        * Note, rcu is not protecting the liveness of dax_dev, rcu is
+        * ensuring that any fault handlers that might have seen
+        * dax_dev->alive == true, have completed.  Any fault handlers
+-       * that start after synchronize_rcu() has started will abort
++       * that start after synchronize_srcu() has started will abort
+        * upon seeing dax_dev->alive == false.
+        */
+       dax_dev->alive = false;
+-      synchronize_rcu();
++      synchronize_srcu(&dax_srcu);
+       unmap_mapping_range(dax_dev->inode->i_mapping, 0, 0, 1);
+       cdev_del(cdev);
+       device_unregister(dev);
+diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
+index 6ef4f2fcfe43..0611f082f392 100644
+--- a/drivers/hid/wacom_wac.c
++++ b/drivers/hid/wacom_wac.c
+@@ -1798,7 +1798,7 @@ static void wacom_wac_pen_event(struct hid_device *hdev, 
struct hid_field *field
+               return;
+       case HID_DG_TOOLSERIALNUMBER:
+               wacom_wac->serial[0] = (wacom_wac->serial[0] & ~0xFFFFFFFFULL);
+-              wacom_wac->serial[0] |= value;
++              wacom_wac->serial[0] |= (__u32)value;
+               return;
+       case WACOM_HID_WD_SENSE:
+               wacom_wac->hid_data.sense_state = value;
+diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
+index db7d1d666ac1..7826994c45bf 100644
+--- a/drivers/input/mouse/elantech.c
++++ b/drivers/input/mouse/elantech.c
+@@ -1118,6 +1118,7 @@ static int elantech_get_resolution_v4(struct psmouse 
*psmouse,
+  * Asus UX32VD             0x361f02        00, 15, 0e      clickpad
+  * Avatar AVIU-145A2       0x361f00        ?               clickpad
+  * Fujitsu LIFEBOOK E544   0x470f00        d0, 12, 09      2 hw buttons
++ * Fujitsu LIFEBOOK E547   0x470f00        50, 12, 09      2 hw buttons
+  * Fujitsu LIFEBOOK E554   0x570f01        40, 14, 0c      2 hw buttons
+  * Fujitsu T725            0x470f01        05, 12, 09      2 hw buttons
+  * Fujitsu H730            0x570f00        c0, 14, 0c      3 hw buttons (**)
+@@ -1524,6 +1525,13 @@ static const struct dmi_system_id 
elantech_dmi_force_crc_enabled[] = {
+               },
+       },
+       {
++              /* Fujitsu LIFEBOOK E547 does not work with crc_enabled == 0 */
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E547"),
++              },
++      },
++      {
+               /* Fujitsu LIFEBOOK E554  does not work with crc_enabled == 0 */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
+diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
+index 73db08558e4d..0a634d23b2ef 100644
+--- a/drivers/mmc/host/dw_mmc.c
++++ b/drivers/mmc/host/dw_mmc.c
+@@ -22,6 +22,7 @@
+ #include <linux/ioport.h>
+ #include <linux/module.h>
+ #include <linux/platform_device.h>
++#include <linux/pm_runtime.h>
+ #include <linux/seq_file.h>
+ #include <linux/slab.h>
+ #include <linux/stat.h>
+@@ -1179,11 +1180,13 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, 
bool force_clkinit)
+               if ((clock != slot->__clk_old &&
+                       !test_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags)) ||
+                       force_clkinit) {
+-                      dev_info(&slot->mmc->class_dev,
+-                               "Bus speed (slot %d) = %dHz (slot req %dHz, 
actual %dHZ div = %d)\n",
+-                               slot->id, host->bus_hz, clock,
+-                               div ? ((host->bus_hz / div) >> 1) :
+-                               host->bus_hz, div);
++                      /* Silent the verbose log if calling from PM context */
++                      if (!force_clkinit)
++                              dev_info(&slot->mmc->class_dev,
++                                       "Bus speed (slot %d) = %dHz (slot req 
%dHz, actual %dHZ div = %d)\n",
++                                       slot->id, host->bus_hz, clock,
++                                       div ? ((host->bus_hz / div) >> 1) :
++                                       host->bus_hz, div);
+ 
+                       /*
+                        * If card is polling, display the message only
+@@ -1616,10 +1619,16 @@ static void dw_mci_init_card(struct mmc_host *mmc, 
struct mmc_card *card)
+ 
+               if (card->type == MMC_TYPE_SDIO ||
+                   card->type == MMC_TYPE_SD_COMBO) {
+-                      set_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags);
++                      if (!test_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags)) {
++                              pm_runtime_get_noresume(mmc->parent);
++                              set_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags);
++                      }
+                       clk_en_a = clk_en_a_old & ~clken_low_pwr;
+               } else {
+-                      clear_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags);
++                      if (test_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags)) {
++                              pm_runtime_put_noidle(mmc->parent);
++                              clear_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags);
++                      }
+                       clk_en_a = clk_en_a_old | clken_low_pwr;
+               }
+ 
+diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c 
b/drivers/mmc/host/sdhci-esdhc-imx.c
+index 7123ef96ed18..445fc47dc3e7 100644
+--- a/drivers/mmc/host/sdhci-esdhc-imx.c
++++ b/drivers/mmc/host/sdhci-esdhc-imx.c
+@@ -830,6 +830,7 @@ static int esdhc_change_pinstate(struct sdhci_host *host,
+ 
+       switch (uhs) {
+       case MMC_TIMING_UHS_SDR50:
++      case MMC_TIMING_UHS_DDR50:
+               pinctrl = imx_data->pins_100mhz;
+               break;
+       case MMC_TIMING_UHS_SDR104:
+diff --git a/drivers/mtd/ubi/upd.c b/drivers/mtd/ubi/upd.c
+index 0134ba32a057..39712560b4c1 100644
+--- a/drivers/mtd/ubi/upd.c
++++ b/drivers/mtd/ubi/upd.c
+@@ -148,11 +148,11 @@ int ubi_start_update(struct ubi_device *ubi, struct 
ubi_volume *vol,
+                       return err;
+       }
+ 
+-      if (bytes == 0) {
+-              err = ubi_wl_flush(ubi, UBI_ALL, UBI_ALL);
+-              if (err)
+-                      return err;
++      err = ubi_wl_flush(ubi, UBI_ALL, UBI_ALL);
++      if (err)
++              return err;
+ 
++      if (bytes == 0) {
+               err = clear_update_marker(ubi, vol, 0);
+               if (err)
+                       return err;
+diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
+index 7ea8a3393936..54a7d078a3a8 100644
+--- a/fs/cifs/cifsglob.h
++++ b/fs/cifs/cifsglob.h
+@@ -933,7 +933,6 @@ struct cifs_tcon {
+       bool use_persistent:1; /* use persistent instead of durable handles */
+ #ifdef CONFIG_CIFS_SMB2
+       bool print:1;           /* set if connection to printer share */
+-      bool bad_network_name:1; /* set if ret status STATUS_BAD_NETWORK_NAME */
+       __le32 capabilities;
+       __u32 share_flags;
+       __u32 maximal_access;
+diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
+index fc537c29044e..87b87e091e8e 100644
+--- a/fs/cifs/smb1ops.c
++++ b/fs/cifs/smb1ops.c
+@@ -1015,6 +1015,15 @@ cifs_dir_needs_close(struct cifsFileInfo *cfile)
+       return !cfile->srch_inf.endOfSearch && !cfile->invalidHandle;
+ }
+ 
++static bool
++cifs_can_echo(struct TCP_Server_Info *server)
++{
++      if (server->tcpStatus == CifsGood)
++              return true;
++
++      return false;
++}
++
+ struct smb_version_operations smb1_operations = {
+       .send_cancel = send_nt_cancel,
+       .compare_fids = cifs_compare_fids,
+@@ -1049,6 +1058,7 @@ struct smb_version_operations smb1_operations = {
+       .get_dfs_refer = CIFSGetDFSRefer,
+       .qfs_tcon = cifs_qfs_tcon,
+       .is_path_accessible = cifs_is_path_accessible,
++      .can_echo = cifs_can_echo,
+       .query_path_info = cifs_query_path_info,
+       .query_file_info = cifs_query_file_info,
+       .get_srv_inum = cifs_get_srv_inum,
+diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
+index 7080dac3592c..802185386851 100644
+--- a/fs/cifs/smb2pdu.c
++++ b/fs/cifs/smb2pdu.c
+@@ -1084,9 +1084,6 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, 
const char *tree,
+       else
+               return -EIO;
+ 
+-      if (tcon && tcon->bad_network_name)
+-              return -ENOENT;
+-
+       if ((tcon && tcon->seal) &&
+           ((ses->server->capabilities & SMB2_GLOBAL_CAP_ENCRYPTION) == 0)) {
+               cifs_dbg(VFS, "encryption requested but no server support");
+@@ -1188,8 +1185,6 @@ SMB2_tcon(const unsigned int xid, struct cifs_ses *ses, 
const char *tree,
+ tcon_error_exit:
+       if (rsp->hdr.Status == STATUS_BAD_NETWORK_NAME) {
+               cifs_dbg(VFS, "BAD_NETWORK_NAME: %s\n", tree);
+-              if (tcon)
+-                      tcon->bad_network_name = true;
+       }
+       goto tcon_exit;
+ }
+diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
+index 528369f3e472..beaddaf52fba 100644
+--- a/fs/ubifs/dir.c
++++ b/fs/ubifs/dir.c
+@@ -748,6 +748,11 @@ static int ubifs_link(struct dentry *old_dentry, struct 
inode *dir,
+               goto out_fname;
+ 
+       lock_2_inodes(dir, inode);
++
++      /* Handle O_TMPFILE corner case, it is allowed to link a O_TMPFILE. */
++      if (inode->i_nlink == 0)
++              ubifs_delete_orphan(c, inode->i_ino);
++
+       inc_nlink(inode);
+       ihold(inode);
+       inode->i_ctime = ubifs_current_time(inode);
+@@ -768,6 +773,8 @@ static int ubifs_link(struct dentry *old_dentry, struct 
inode *dir,
+       dir->i_size -= sz_change;
+       dir_ui->ui_size = dir->i_size;
+       drop_nlink(inode);
++      if (inode->i_nlink == 0)
++              ubifs_add_orphan(c, inode->i_ino);
+       unlock_2_inodes(dir, inode);
+       ubifs_release_budget(c, &req);
+       iput(inode);
+@@ -1316,9 +1323,6 @@ static int do_rename(struct inode *old_dir, struct 
dentry *old_dentry,
+       unsigned int uninitialized_var(saved_nlink);
+       struct fscrypt_name old_nm, new_nm;
+ 
+-      if (flags & ~RENAME_NOREPLACE)
+-              return -EINVAL;
+-
+       /*
+        * Budget request settings: deletion direntry, new direntry, removing
+        * the old inode, and changing old and new parent directory inodes.
+diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
+index 8df48ccb8af6..79172c35c2b2 100644
+--- a/kernel/trace/ring_buffer.c
++++ b/kernel/trace/ring_buffer.c
+@@ -3404,11 +3404,23 @@ EXPORT_SYMBOL_GPL(ring_buffer_iter_reset);
+ int ring_buffer_iter_empty(struct ring_buffer_iter *iter)
+ {
+       struct ring_buffer_per_cpu *cpu_buffer;
++      struct buffer_page *reader;
++      struct buffer_page *head_page;
++      struct buffer_page *commit_page;
++      unsigned commit;
+ 
+       cpu_buffer = iter->cpu_buffer;
+ 
+-      return iter->head_page == cpu_buffer->commit_page &&
+-              iter->head == rb_commit_index(cpu_buffer);
++      /* Remember, trace recording is off when iterator is in use */
++      reader = cpu_buffer->reader_page;
++      head_page = cpu_buffer->head_page;
++      commit_page = cpu_buffer->commit_page;
++      commit = rb_page_commit(commit_page);
++
++      return ((iter->head_page == commit_page && iter->head == commit) ||
++              (iter->head_page == reader && commit_page == head_page &&
++               head_page->read == commit &&
++               iter->head == rb_page_commit(cpu_buffer->reader_page)));
+ }
+ EXPORT_SYMBOL_GPL(ring_buffer_iter_empty);
+ 
+diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
+index 6ee340a43f18..f76ff14be517 100644
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -6740,11 +6740,13 @@ ftrace_trace_snapshot_callback(struct ftrace_hash 
*hash,
+               return ret;
+ 
+  out_reg:
+-      ret = register_ftrace_function_probe(glob, ops, count);
++      ret = alloc_snapshot(&global_trace);
++      if (ret < 0)
++              goto out;
+ 
+-      if (ret >= 0)
+-              alloc_snapshot(&global_trace);
++      ret = register_ftrace_function_probe(glob, ops, count);
+ 
++ out:
+       return ret < 0 ? ret : 0;
+ }
+ 
+diff --git a/mm/migrate.c b/mm/migrate.c
+index 87f4d0f81819..c509a92639f6 100644
+--- a/mm/migrate.c
++++ b/mm/migrate.c
+@@ -183,9 +183,9 @@ void putback_movable_pages(struct list_head *l)
+                       unlock_page(page);
+                       put_page(page);
+               } else {
+-                      putback_lru_page(page);
+                       dec_node_page_state(page, NR_ISOLATED_ANON +
+                                       page_is_file_cache(page));
++                      putback_lru_page(page);
+               }
+       }
+ }
+diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
+index 1109e60e9121..03476694a7c8 100644
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -208,6 +208,51 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local 
*local,
+       return len;
+ }
+ 
++static void ieee80211_handle_mu_mimo_mon(struct ieee80211_sub_if_data *sdata,
++                                       struct sk_buff *skb,
++                                       int rtap_vendor_space)
++{
++      struct {
++              struct ieee80211_hdr_3addr hdr;
++              u8 category;
++              u8 action_code;
++      } __packed action;
++
++      if (!sdata)
++              return;
++
++      BUILD_BUG_ON(sizeof(action) != IEEE80211_MIN_ACTION_SIZE + 1);
++
++      if (skb->len < rtap_vendor_space + sizeof(action) +
++                     VHT_MUMIMO_GROUPS_DATA_LEN)
++              return;
++
++      if (!is_valid_ether_addr(sdata->u.mntr.mu_follow_addr))
++              return;
++
++      skb_copy_bits(skb, rtap_vendor_space, &action, sizeof(action));
++
++      if (!ieee80211_is_action(action.hdr.frame_control))
++              return;
++
++      if (action.category != WLAN_CATEGORY_VHT)
++              return;
++
++      if (action.action_code != WLAN_VHT_ACTION_GROUPID_MGMT)
++              return;
++
++      if (!ether_addr_equal(action.hdr.addr1, sdata->u.mntr.mu_follow_addr))
++              return;
++
++      skb = skb_copy(skb, GFP_ATOMIC);
++      if (!skb)
++              return;
++
++      skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME;
++      skb_queue_tail(&sdata->skb_queue, skb);
++      ieee80211_queue_work(&sdata->local->hw, &sdata->work);
++}
++
+ /*
+  * ieee80211_add_rx_radiotap_header - add radiotap header
+  *
+@@ -515,7 +560,6 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct 
sk_buff *origskb,
+       struct net_device *prev_dev = NULL;
+       int present_fcs_len = 0;
+       unsigned int rtap_vendor_space = 0;
+-      struct ieee80211_mgmt *mgmt;
+       struct ieee80211_sub_if_data *monitor_sdata =
+               rcu_dereference(local->monitor_sdata);
+ 
+@@ -553,6 +597,8 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct 
sk_buff *origskb,
+               return remove_monitor_info(local, origskb, rtap_vendor_space);
+       }
+ 
++      ieee80211_handle_mu_mimo_mon(monitor_sdata, origskb, rtap_vendor_space);
++
+       /* room for the radiotap header based on driver features */
+       rt_hdrlen = ieee80211_rx_radiotap_hdrlen(local, status, origskb);
+       needed_headroom = rt_hdrlen - rtap_vendor_space;
+@@ -618,23 +664,6 @@ ieee80211_rx_monitor(struct ieee80211_local *local, 
struct sk_buff *origskb,
+               ieee80211_rx_stats(sdata->dev, skb->len);
+       }
+ 
+-      mgmt = (void *)skb->data;
+-      if (monitor_sdata &&
+-          skb->len >= IEEE80211_MIN_ACTION_SIZE + 1 + 
VHT_MUMIMO_GROUPS_DATA_LEN &&
+-          ieee80211_is_action(mgmt->frame_control) &&
+-          mgmt->u.action.category == WLAN_CATEGORY_VHT &&
+-          mgmt->u.action.u.vht_group_notif.action_code == 
WLAN_VHT_ACTION_GROUPID_MGMT &&
+-          is_valid_ether_addr(monitor_sdata->u.mntr.mu_follow_addr) &&
+-          ether_addr_equal(mgmt->da, monitor_sdata->u.mntr.mu_follow_addr)) {
+-              struct sk_buff *mu_skb = skb_copy(skb, GFP_ATOMIC);
+-
+-              if (mu_skb) {
+-                      mu_skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME;
+-                      skb_queue_tail(&monitor_sdata->skb_queue, mu_skb);
+-                      ieee80211_queue_work(&local->hw, &monitor_sdata->work);
+-              }
+-      }
+-
+       if (prev_dev) {
+               skb->dev = prev_dev;
+               netif_receive_skb(skb);
+@@ -3614,6 +3643,27 @@ static bool ieee80211_accept_frame(struct 
ieee80211_rx_data *rx)
+                           !ether_addr_equal(bssid, hdr->addr1))
+                               return false;
+               }
++
++              /*
++               * 802.11-2016 Table 9-26 says that for data frames, A1 must be
++               * the BSSID - we've checked that already but may have accepted
++               * the wildcard (ff:ff:ff:ff:ff:ff).
++               *
++               * It also says:
++               *      The BSSID of the Data frame is determined as follows:
++               *      a) If the STA is contained within an AP or is associated
++               *         with an AP, the BSSID is the address currently in use
++               *         by the STA contained in the AP.
++               *
++               * So we should not accept data frames with an address that's
++               * multicast.
++               *
++               * Accepting it also opens a security problem because stations
++               * could encrypt it with the GTK and inject traffic that way.
++               */
++              if (ieee80211_is_data(hdr->frame_control) && multicast)
++                      return false;
++
+               return true;
+       case NL80211_IFTYPE_WDS:
+               if (bssid || !ieee80211_is_data(hdr->frame_control))
+diff --git a/security/keys/gc.c b/security/keys/gc.c
+index addf060399e0..9cb4fe4478a1 100644
+--- a/security/keys/gc.c
++++ b/security/keys/gc.c
+@@ -46,7 +46,7 @@ static unsigned long key_gc_flags;
+  * immediately unlinked.
+  */
+ struct key_type key_type_dead = {
+-      .name = "dead",
++      .name = ".dead",
+ };
+ 
+ /*
+diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
+index 04a764f71ec8..3c7f6897fd5b 100644
+--- a/security/keys/keyctl.c
++++ b/security/keys/keyctl.c
+@@ -271,7 +271,8 @@ long keyctl_get_keyring_ID(key_serial_t id, int create)
+  * Create and join an anonymous session keyring or join a named session
+  * keyring, creating it if necessary.  A named session keyring must have 
Search
+  * permission for it to be joined.  Session keyrings without this permit will
+- * be skipped over.
++ * be skipped over.  It is not permitted for userspace to create or join
++ * keyrings whose name begin with a dot.
+  *
+  * If successful, the ID of the joined session keyring will be returned.
+  */
+@@ -288,12 +289,16 @@ long keyctl_join_session_keyring(const char __user 
*_name)
+                       ret = PTR_ERR(name);
+                       goto error;
+               }
++
++              ret = -EPERM;
++              if (name[0] == '.')
++                      goto error_name;
+       }
+ 
+       /* join the session */
+       ret = join_session_keyring(name);
++error_name:
+       kfree(name);
+-
+ error:
+       return ret;
+ }
+@@ -1251,8 +1256,8 @@ long keyctl_reject_key(key_serial_t id, unsigned 
timeout, unsigned error,
+  * Read or set the default keyring in which request_key() will cache keys and
+  * return the old setting.
+  *
+- * If a process keyring is specified then this will be created if it doesn't
+- * yet exist.  The old setting will be returned if successful.
++ * If a thread or process keyring is specified then it will be created if it
++ * doesn't yet exist.  The old setting will be returned if successful.
+  */
+ long keyctl_set_reqkey_keyring(int reqkey_defl)
+ {
+@@ -1277,11 +1282,8 @@ long keyctl_set_reqkey_keyring(int reqkey_defl)
+ 
+       case KEY_REQKEY_DEFL_PROCESS_KEYRING:
+               ret = install_process_keyring_to_cred(new);
+-              if (ret < 0) {
+-                      if (ret != -EEXIST)
+-                              goto error;
+-                      ret = 0;
+-              }
++              if (ret < 0)
++                      goto error;
+               goto set;
+ 
+       case KEY_REQKEY_DEFL_DEFAULT:
+diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c
+index 918cddcd4516..855b94df1126 100644
+--- a/security/keys/process_keys.c
++++ b/security/keys/process_keys.c
+@@ -127,13 +127,18 @@ int install_user_keyrings(void)
+ }
+ 
+ /*
+- * Install a fresh thread keyring directly to new credentials.  This keyring 
is
+- * allowed to overrun the quota.
++ * Install a thread keyring to the given credentials struct if it didn't have
++ * one already.  This is allowed to overrun the quota.
++ *
++ * Return: 0 if a thread keyring is now present; -errno on failure.
+  */
+ int install_thread_keyring_to_cred(struct cred *new)
+ {
+       struct key *keyring;
+ 
++      if (new->thread_keyring)
++              return 0;
++
+       keyring = keyring_alloc("_tid", new->uid, new->gid, new,
+                               KEY_POS_ALL | KEY_USR_VIEW,
+                               KEY_ALLOC_QUOTA_OVERRUN,
+@@ -146,7 +151,9 @@ int install_thread_keyring_to_cred(struct cred *new)
+ }
+ 
+ /*
+- * Install a fresh thread keyring, discarding the old one.
++ * Install a thread keyring to the current task if it didn't have one already.
++ *
++ * Return: 0 if a thread keyring is now present; -errno on failure.
+  */
+ static int install_thread_keyring(void)
+ {
+@@ -157,8 +164,6 @@ static int install_thread_keyring(void)
+       if (!new)
+               return -ENOMEM;
+ 
+-      BUG_ON(new->thread_keyring);
+-
+       ret = install_thread_keyring_to_cred(new);
+       if (ret < 0) {
+               abort_creds(new);
+@@ -169,17 +174,17 @@ static int install_thread_keyring(void)
+ }
+ 
+ /*
+- * Install a process keyring directly to a credentials struct.
++ * Install a process keyring to the given credentials struct if it didn't have
++ * one already.  This is allowed to overrun the quota.
+  *
+- * Returns -EEXIST if there was already a process keyring, 0 if one installed,
+- * and other value on any other error
++ * Return: 0 if a process keyring is now present; -errno on failure.
+  */
+ int install_process_keyring_to_cred(struct cred *new)
+ {
+       struct key *keyring;
+ 
+       if (new->process_keyring)
+-              return -EEXIST;
++              return 0;
+ 
+       keyring = keyring_alloc("_pid", new->uid, new->gid, new,
+                               KEY_POS_ALL | KEY_USR_VIEW,
+@@ -193,11 +198,9 @@ int install_process_keyring_to_cred(struct cred *new)
+ }
+ 
+ /*
+- * Make sure a process keyring is installed for the current process.  The
+- * existing process keyring is not replaced.
++ * Install a process keyring to the current task if it didn't have one 
already.
+  *
+- * Returns 0 if there is a process keyring by the end of this function, some
+- * error otherwise.
++ * Return: 0 if a process keyring is now present; -errno on failure.
+  */
+ static int install_process_keyring(void)
+ {
+@@ -211,14 +214,18 @@ static int install_process_keyring(void)
+       ret = install_process_keyring_to_cred(new);
+       if (ret < 0) {
+               abort_creds(new);
+-              return ret != -EEXIST ? ret : 0;
++              return ret;
+       }
+ 
+       return commit_creds(new);
+ }
+ 
+ /*
+- * Install a session keyring directly to a credentials struct.
++ * Install the given keyring as the session keyring of the given credentials
++ * struct, replacing the existing one if any.  If the given keyring is NULL,
++ * then install a new anonymous session keyring.
++ *
++ * Return: 0 on success; -errno on failure.
+  */
+ int install_session_keyring_to_cred(struct cred *cred, struct key *keyring)
+ {
+@@ -253,8 +260,11 @@ int install_session_keyring_to_cred(struct cred *cred, 
struct key *keyring)
+ }
+ 
+ /*
+- * Install a session keyring, discarding the old one.  If a keyring is not
+- * supplied, an empty one is invented.
++ * Install the given keyring as the session keyring of the current task,
++ * replacing the existing one if any.  If the given keyring is NULL, then
++ * install a new anonymous session keyring.
++ *
++ * Return: 0 on success; -errno on failure.
+  */
+ static int install_session_keyring(struct key *keyring)
+ {

++++++ series.conf ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:28.269890110 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:28.273889546 +0200
@@ -39,6 +39,7 @@
        patches.kernel.org/patch-4.10.9-10
        patches.kernel.org/patch-4.10.10-11
        patches.kernel.org/patch-4.10.11-12
+       patches.kernel.org/patch-4.10.12-13
 
        ########################################################
        # Build fixes that apply to the vanilla kernel too.
@@ -226,6 +227,7 @@
        patches.fixes/net-packet-fix-overflow-in-check-for-tp_reserve.patch
        patches.fixes/tcp-fix-SCM_TIMESTAMPING_OPT_STATS-for-normal-skbs.patch
        patches.fixes/tcp-mark-skbs-with-SCM_TIMESTAMPING_OPT_STATS.patch
+       patches.fixes/macsec-avoid-heap-overflow-in-skb_to_sgvec.patch
 
        ########################################################
        # Netfilter
@@ -394,6 +396,7 @@
 
        # Needs updating WRT d27769ec (block: add GENHD_FL_NO_PART_SCAN)
 +hare  patches.suse/no-partition-scan
+       patches.drivers/dell-laptop-Adds-support-for-keyboard-backlight-timeout
 
        ########################################################
        # Other drivers we have added to the tree

++++++ source-timestamp ++++++
--- /var/tmp/diff_new_pack.a9m8ju/_old  2017-05-02 08:54:28.325882215 +0200
+++ /var/tmp/diff_new_pack.a9m8ju/_new  2017-05-02 08:54:28.329881651 +0200
@@ -1,3 +1,3 @@
-2017-04-21 13:50:25 +0200
-GIT Revision: 3043bd9db53ecc7a2fc611d0b97e506c9ee34e2e
+2017-04-27 14:23:31 +0200
+GIT Revision: e5d11ce1f407819f53d0cfc6fcda4a98700c1f9c
 GIT Branch: stable


Reply via email to