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