Hello community, here is the log from the commit of package kernel-source.3606 for openSUSE:13.2:Update checked in at 2015-04-22 13:19:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:13.2:Update/kernel-source.3606 (Old) and /work/SRC/openSUSE:13.2:Update/.kernel-source.3606.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kernel-source.3606" Changes: -------- --- /work/SRC/openSUSE:13.2:Update/kernel-source.3606/kernel-debug.changes 2015-04-13 13:08:15.000000000 +0200 +++ /work/SRC/openSUSE:13.2:Update/.kernel-source.3606.new/kernel-debug.changes 2015-04-22 13:19:43.000000000 +0200 @@ -1,0 +2,104 @@ +Tue Apr 14 09:11:37 CEST 2015 - [email protected] + +- kabi: fix for move of d_rcu (bnc#903640 CVE-2014-8559 + boo#927018). +- commit 93c1539 + +------------------------------------------------------------------- +Tue Apr 14 06:18:10 CEST 2015 - [email protected] + +- Update config files. (boo#925479) + Do not set CONFIG_SYSTEM_TRUSTED_KEYRING until we need it in future + openSUSE version: + e.g. MODULE_SIG, IMA, PKCS7(new), KEXEC_BZIMAGE_VERIFY_SIG(new) +- commit 55df6c2 + +------------------------------------------------------------------- +Thu Apr 9 12:57:08 CEST 2015 - [email protected] + +- x86/asm/entry/64: Remove a bogus 'ret_from_fork' optimization + (bsc#926240, CVE-2015-2830). +- commit 3a397b8 + +------------------------------------------------------------------- +Thu Apr 9 12:15:54 CEST 2015 - [email protected] + +- net: rds: use correct size for max unacked packets and bytes + (bsc#919018 CVE-2015-2042). +- commit a7793ed + +------------------------------------------------------------------- +Thu Apr 9 12:02:41 CEST 2015 - [email protected] + +- eCryptfs: Remove buggy and unnecessary write in file name + decode routine (bsc#918333, CVE-2014-9683). +- commit 8629f98 + +------------------------------------------------------------------- +Wed Apr 8 16:20:19 CEST 2015 - [email protected] + +- btrfs: simplify insert_orphan_item (boo#926385). +- btrfs: set proper message level for skinny metadata. +- Btrfs: make sure we wait on logged extents when fsycning + two subvols. +- btrfs: fix lost return value due to variable shadowing. +- btrfs: fix leak of path in btrfs_find_item. +- Btrfs: fix fsync data loss after adding hard link to inode. +- Btrfs: fix fs corruption on transaction abort if device + supports discard. +- Btrfs: fix data loss in the fast fsync path. +- Btrfs: don't delay inode ref updates during log replay. +- Btrfs: do not move em to modified list when unpinning. +- commit b3e6aaf + +------------------------------------------------------------------- +Wed Apr 8 16:17:36 CEST 2015 - [email protected] + +- Btrfs:__add_inode_ref: out of bounds memory read when looking + for extended ref. +- Btrfs: fix inode eviction infinite loop after cloning into it + (boo#905088). +- commit 02270f6 + +------------------------------------------------------------------- +Wed Apr 8 15:20:32 CEST 2015 - [email protected] + +- Add CVE reference to + patches.fixes/ext4-allocate-entire-range-in-zero-range.patch + (bnc#919032 CVE-2015-0275). +- commit 059ac72 + +------------------------------------------------------------------- +Wed Apr 8 15:15:49 CEST 2015 - [email protected] + +- ext4: allocate entire range in zero range (bnc#919032). +- commit 6f1dee9 + +------------------------------------------------------------------- +Wed Apr 8 15:15:00 CEST 2015 - [email protected] + +- ext4: fix ZERO_RANGE bug hidden by flag aliasing. +- commit 9d6a4be + +------------------------------------------------------------------- +Wed Apr 8 14:31:19 CEST 2015 - [email protected] + +- Input: xpad - use proper endpoint type (bnc#926397). +- commit 07617fe + +------------------------------------------------------------------- +Mon Mar 23 11:08:34 CET 2015 - [email protected] + +- Update + patches.arch/x86-microcode-intel-guard-against-stack-overflow-in-the-loader.patch + (bsc#922944, CVE-2015-2666). +- commit 04be35a + +------------------------------------------------------------------- +Mon Mar 23 07:46:11 CET 2015 - [email protected] + +- md: don't require sync_min to be a multiple of chunk_size + (bnc#910500). +- commit fde41e8 + +------------------------------------------------------------------- @@ -48,0 +153,12 @@ + +------------------------------------------------------------------- +Mon Mar 16 15:04:51 CET 2015 - [email protected] + +- ARM64: Enable CONFIG_COMPAT +- commit 23df5ff + +------------------------------------------------------------------- +Sun Mar 15 12:44:37 CET 2015 - [email protected] + +- ARM64: Fix support for ARMv7 userspace +- commit e18816f kernel-default.changes: same change kernel-desktop.changes: same change kernel-docs.changes: same change kernel-ec2.changes: same change kernel-lpae.changes: same change kernel-obs-build.changes: same change kernel-obs-qa-xen.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-vanilla.changes: same change kernel-xen.changes: same change ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kernel-debug.spec ++++++ --- /var/tmp/diff_new_pack.XMEq6X/_old 2015-04-22 13:19:51.000000000 +0200 +++ /var/tmp/diff_new_pack.XMEq6X/_new 2015-04-22 13:19:51.000000000 +0200 @@ -61,7 +61,7 @@ Group: System/Kernel Version: 3.16.7 %if 0%{?is_kotd} -Release: <RELEASE>.gba2afab +Release: <RELEASE>.g93c1539 %else Release: 0 %endif kernel-default.spec: same change kernel-desktop.spec: same change ++++++ kernel-docs.spec ++++++ --- /var/tmp/diff_new_pack.XMEq6X/_old 2015-04-22 13:19:51.000000000 +0200 +++ /var/tmp/diff_new_pack.XMEq6X/_new 2015-04-22 13:19:51.000000000 +0200 @@ -27,7 +27,7 @@ Group: Documentation/Man Version: 3.16.7 %if 0%{?is_kotd} -Release: <RELEASE>.gba2afab +Release: <RELEASE>.g93c1539 %else Release: 0 %endif ++++++ kernel-ec2.spec ++++++ --- /var/tmp/diff_new_pack.XMEq6X/_old 2015-04-22 13:19:51.000000000 +0200 +++ /var/tmp/diff_new_pack.XMEq6X/_new 2015-04-22 13:19:51.000000000 +0200 @@ -61,7 +61,7 @@ Group: System/Kernel Version: 3.16.7 %if 0%{?is_kotd} -Release: <RELEASE>.gba2afab +Release: <RELEASE>.g93c1539 %else Release: 0 %endif kernel-lpae.spec: same change ++++++ kernel-obs-build.spec ++++++ --- /var/tmp/diff_new_pack.XMEq6X/_old 2015-04-22 13:19:51.000000000 +0200 +++ /var/tmp/diff_new_pack.XMEq6X/_new 2015-04-22 13:19:51.000000000 +0200 @@ -47,7 +47,7 @@ Group: SLES Version: 3.16.7 %if 0%{?is_kotd} -Release: <RELEASE>.gba2afab +Release: <RELEASE>.g93c1539 %else Release: 0 %endif kernel-obs-qa-xen.spec: same change kernel-obs-qa.spec: same change ++++++ kernel-pae.spec ++++++ --- /var/tmp/diff_new_pack.XMEq6X/_old 2015-04-22 13:19:51.000000000 +0200 +++ /var/tmp/diff_new_pack.XMEq6X/_new 2015-04-22 13:19:51.000000000 +0200 @@ -61,7 +61,7 @@ Group: System/Kernel Version: 3.16.7 %if 0%{?is_kotd} -Release: <RELEASE>.gba2afab +Release: <RELEASE>.g93c1539 %else Release: 0 %endif ++++++ kernel-source.spec ++++++ --- /var/tmp/diff_new_pack.XMEq6X/_old 2015-04-22 13:19:51.000000000 +0200 +++ /var/tmp/diff_new_pack.XMEq6X/_new 2015-04-22 13:19:51.000000000 +0200 @@ -32,7 +32,7 @@ Group: Development/Sources Version: 3.16.7 %if 0%{?is_kotd} -Release: <RELEASE>.gba2afab +Release: <RELEASE>.g93c1539 %else Release: 0 %endif ++++++ kernel-syms.spec ++++++ --- /var/tmp/diff_new_pack.XMEq6X/_old 2015-04-22 13:19:51.000000000 +0200 +++ /var/tmp/diff_new_pack.XMEq6X/_new 2015-04-22 13:19:51.000000000 +0200 @@ -27,7 +27,7 @@ Version: 3.16.7 %if %using_buildservice %if 0%{?is_kotd} -Release: <RELEASE>.gba2afab +Release: <RELEASE>.g93c1539 %else Release: 0 %endif ++++++ kernel-vanilla.spec ++++++ --- /var/tmp/diff_new_pack.XMEq6X/_old 2015-04-22 13:19:51.000000000 +0200 +++ /var/tmp/diff_new_pack.XMEq6X/_new 2015-04-22 13:19:51.000000000 +0200 @@ -61,7 +61,7 @@ Group: System/Kernel Version: 3.16.7 %if 0%{?is_kotd} -Release: <RELEASE>.gba2afab +Release: <RELEASE>.g93c1539 %else Release: 0 %endif kernel-xen.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 2015-01-24 21:25:15.000000000 +0100 +++ new/config/arm64/default 2015-04-14 06:18:10.000000000 +0200 @@ -145,8 +145,10 @@ # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_SYSCTL=y CONFIG_ANON_INODES=y +CONFIG_HAVE_UID16=y CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_EXPERT=y +CONFIG_UID16=y CONFIG_SGETMASK_SYSCALL=y CONFIG_SYSFS_SYSCALL=y # CONFIG_SYSCTL_SYSCALL is not set @@ -178,7 +180,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y # CONFIG_JUMP_LABEL is not set @@ -201,6 +203,8 @@ CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y CONFIG_MODULES_USE_ELF_RELA=y CONFIG_CLONE_BACKWARDS=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_COMPAT_OLD_SIGACTION=y # # GCOV-based kernel profiling @@ -249,6 +253,7 @@ CONFIG_EFI_PARTITION=y CONFIG_SYSV68_PARTITION=y # CONFIG_CMDLINE_PARTITION is not set +CONFIG_BLOCK_COMPAT=y # # IO Schedulers @@ -387,11 +392,14 @@ # Userspace binary formats # CONFIG_BINFMT_ELF=y +CONFIG_COMPAT_BINFMT_ELF=y CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y CONFIG_BINFMT_SCRIPT=y # CONFIG_HAVE_AOUT is not set CONFIG_BINFMT_MISC=m CONFIG_COREDUMP=y +CONFIG_COMPAT=y +CONFIG_SYSVIPC_COMPAT=y # # Power management options @@ -446,6 +454,7 @@ # # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set CONFIG_NET=y +CONFIG_COMPAT_NETLINK_MESSAGES=y # # Networking options diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/armv6hl/default new/config/armv6hl/default --- old/config/armv6hl/default 2015-01-24 21:25:15.000000000 +0100 +++ new/config/armv6hl/default 2015-04-14 06:18:10.000000000 +0200 @@ -181,7 +181,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/armv7hl/default new/config/armv7hl/default --- old/config/armv7hl/default 2015-01-24 21:25:15.000000000 +0100 +++ new/config/armv7hl/default 2015-04-14 06:18:10.000000000 +0200 @@ -198,7 +198,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/armv7hl/lpae new/config/armv7hl/lpae --- old/config/armv7hl/lpae 2015-01-24 21:25:15.000000000 +0100 +++ new/config/armv7hl/lpae 2015-04-14 06:18:10.000000000 +0200 @@ -199,7 +199,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/debug new/config/i386/debug --- old/config/i386/debug 2015-01-24 21:25:15.000000000 +0100 +++ new/config/i386/debug 2015-04-14 06:18:10.000000000 +0200 @@ -220,7 +220,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/default new/config/i386/default --- old/config/i386/default 2015-01-24 21:25:15.000000000 +0100 +++ new/config/i386/default 2015-04-14 06:18:10.000000000 +0200 @@ -220,7 +220,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/desktop new/config/i386/desktop --- old/config/i386/desktop 2015-01-24 21:25:15.000000000 +0100 +++ new/config/i386/desktop 2015-04-14 06:18:10.000000000 +0200 @@ -223,7 +223,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/ec2 new/config/i386/ec2 --- old/config/i386/ec2 2015-01-24 21:25:15.000000000 +0100 +++ new/config/i386/ec2 2015-04-14 06:18:10.000000000 +0200 @@ -196,7 +196,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y # CONFIG_OPROFILE is not set diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/pae new/config/i386/pae --- old/config/i386/pae 2015-01-24 21:25:15.000000000 +0100 +++ new/config/i386/pae 2015-04-14 06:18:10.000000000 +0200 @@ -220,7 +220,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/vanilla new/config/i386/vanilla --- old/config/i386/vanilla 2015-01-24 21:25:15.000000000 +0100 +++ new/config/i386/vanilla 2015-04-14 06:18:10.000000000 +0200 @@ -218,7 +218,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/i386/xen new/config/i386/xen --- old/config/i386/xen 2015-01-24 21:25:15.000000000 +0100 +++ new/config/i386/xen 2015-04-14 06:18:10.000000000 +0200 @@ -211,7 +211,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc/default new/config/ppc/default --- old/config/ppc/default 2015-01-24 21:25:15.000000000 +0100 +++ new/config/ppc/default 2015-04-14 06:18:10.000000000 +0200 @@ -215,7 +215,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc/vanilla new/config/ppc/vanilla --- old/config/ppc/vanilla 2015-01-24 21:25:15.000000000 +0100 +++ new/config/ppc/vanilla 2015-04-14 06:18:10.000000000 +0200 @@ -213,7 +213,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/debug new/config/ppc64/debug --- old/config/ppc64/debug 2015-01-24 21:25:15.000000000 +0100 +++ new/config/ppc64/debug 2015-04-14 06:18:10.000000000 +0200 @@ -242,7 +242,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/default new/config/ppc64/default --- old/config/ppc64/default 2015-01-24 21:25:15.000000000 +0100 +++ new/config/ppc64/default 2015-04-14 06:18:10.000000000 +0200 @@ -242,7 +242,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64/vanilla new/config/ppc64/vanilla --- old/config/ppc64/vanilla 2015-01-24 21:25:15.000000000 +0100 +++ new/config/ppc64/vanilla 2015-04-14 06:18:10.000000000 +0200 @@ -240,7 +240,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64le/debug new/config/ppc64le/debug --- old/config/ppc64le/debug 2015-01-24 21:25:15.000000000 +0100 +++ new/config/ppc64le/debug 2015-04-14 06:18:10.000000000 +0200 @@ -238,7 +238,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64le/default new/config/ppc64le/default --- old/config/ppc64le/default 2015-01-24 21:25:15.000000000 +0100 +++ new/config/ppc64le/default 2015-04-14 06:18:10.000000000 +0200 @@ -238,7 +238,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/ppc64le/vanilla new/config/ppc64le/vanilla --- old/config/ppc64le/vanilla 2015-01-24 21:25:15.000000000 +0100 +++ new/config/ppc64le/vanilla 2015-04-14 06:18:10.000000000 +0200 @@ -236,7 +236,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/s390x/default new/config/s390x/default --- old/config/s390x/default 2015-01-24 21:25:15.000000000 +0100 +++ new/config/s390x/default 2015-04-14 06:18:10.000000000 +0200 @@ -185,7 +185,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/s390x/vanilla new/config/s390x/vanilla --- old/config/s390x/vanilla 2015-01-24 21:25:15.000000000 +0100 +++ new/config/s390x/vanilla 2015-04-14 06:18:10.000000000 +0200 @@ -183,7 +183,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m 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 2015-01-24 21:25:15.000000000 +0100 +++ new/config/x86_64/debug 2015-04-14 06:18:10.000000000 +0200 @@ -231,7 +231,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m 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 2015-01-24 21:25:15.000000000 +0100 +++ new/config/x86_64/default 2015-04-14 06:18:10.000000000 +0200 @@ -231,7 +231,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/desktop new/config/x86_64/desktop --- old/config/x86_64/desktop 2015-01-24 21:25:15.000000000 +0100 +++ new/config/x86_64/desktop 2015-04-14 06:18:10.000000000 +0200 @@ -234,7 +234,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/ec2 new/config/x86_64/ec2 --- old/config/x86_64/ec2 2015-01-24 21:25:15.000000000 +0100 +++ new/config/x86_64/ec2 2015-04-14 06:18:10.000000000 +0200 @@ -202,7 +202,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y # CONFIG_OPROFILE is not set diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/vanilla new/config/x86_64/vanilla --- old/config/x86_64/vanilla 2015-01-24 21:25:15.000000000 +0100 +++ new/config/x86_64/vanilla 2015-04-14 06:18:10.000000000 +0200 @@ -229,7 +229,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/config/x86_64/xen new/config/x86_64/xen --- old/config/x86_64/xen 2015-01-24 21:25:15.000000000 +0100 +++ new/config/x86_64/xen 2015-04-14 06:18:10.000000000 +0200 @@ -219,7 +219,7 @@ CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set -CONFIG_SYSTEM_TRUSTED_KEYRING=y +# CONFIG_SYSTEM_TRUSTED_KEYRING is not set CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y CONFIG_OPROFILE=m ++++++ patches.arch.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.arch/arm64-Enable-CONFIG_COMPAT-also-for-64k-page-size.patch new/patches.arch/arm64-Enable-CONFIG_COMPAT-also-for-64k-page-size.patch --- old/patches.arch/arm64-Enable-CONFIG_COMPAT-also-for-64k-page-size.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.arch/arm64-Enable-CONFIG_COMPAT-also-for-64k-page-size.patch 2015-04-09 12:59:37.000000000 +0200 @@ -0,0 +1,54 @@ +From a3ebb7c0471ed11000f024203ff2695fb2346797 Mon Sep 17 00:00:00 2001 +From: Alexander Graf <[email protected]> +Date: Thu, 4 Dec 2014 16:44:05 +0100 +Subject: [PATCH v2] arm64: Enable CONFIG_COMPAT also for 64k page size +Patch-mainline: No +References: bnc#908468 + +With binutils 2.25 the default alignment for 32bit arm sections changed to +have everything 64k aligned. Armv7 binaries built with this binutils version +run successfully on an arm64 system. + +Since effectively there is now the chance to run armv7 code on arm64 even +with 64k page size, it doesn't make sense to block people from enabling +CONFIG_COMPAT on those configurations. + +Signed-off-by: Alexander Graf <[email protected]> + +--- + +v1 -> v2: + + - add comment in KConfig explaining that segments need to be 64k aligned + - conditionalize the option on EXPERT +--- + arch/arm64/Kconfig | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig +index 9532f8d..7fc0ad6 100644 +--- a/arch/arm64/Kconfig ++++ b/arch/arm64/Kconfig +@@ -409,7 +409,7 @@ source "fs/Kconfig.binfmt" + + config COMPAT + bool "Kernel support for 32-bit EL0" +- depends on !ARM64_64K_PAGES ++ depends on !ARM64_64K_PAGES || EXPERT + select COMPAT_BINFMT_ELF + select HAVE_UID16 + select OLD_SIGSUSPEND3 +@@ -420,6 +420,10 @@ config COMPAT + the user helper functions, VFP support and the ptrace interface are + handled appropriately by the kernel. + ++ If you also enabled CONFIG_ARM64_64K_PAGES, please be aware that you ++ will only be able to execute AArch32 binaries that were compiled with ++ 64k aligned segments. ++ + If you want to execute 32-bit userspace applications, say Y. + + config SYSVIPC_COMPAT +-- +1.7.12.4 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.arch/arm64-fix-mmap2-compat-syscall.patch new/patches.arch/arm64-fix-mmap2-compat-syscall.patch --- old/patches.arch/arm64-fix-mmap2-compat-syscall.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.arch/arm64-fix-mmap2-compat-syscall.patch 2015-04-09 12:59:37.000000000 +0200 @@ -0,0 +1,73 @@ +From: Andreas Schwab <[email protected]> +Date: Mon, 9 Mar 2015 17:27:36 +0100 +Subject: [PATCH] arm64: fix implementation of mmap2 compat syscall +Patch-mainline: Submitted, http://lists.infradead.org/pipermail/linux-arm-kernel/2015-March/330081.html +References: bnc#923505 + +The arm mmap2 syscall takes the offset in units of 4K, thus with 64K pages +the offset needs to be scaled to units of pages. + +Tested-by: Alexander Graf <[email protected]> +Signed-off-by: Andreas Schwab <[email protected]> +[dmueller: backport to openSUSE 13.2] +Signed-off-by: Dirk Mueller <[email protected]> + +--- + arch/arm64/include/asm/unistd32.h | 2 +- + arch/arm64/kernel/sys32.S | 17 +++++++++++++++++ + 2 files changed, 18 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h +index c8d8fc1..5e31f43 100644 +--- a/arch/arm64/include/asm/unistd32.h ++++ b/arch/arm64/include/asm/unistd32.h +@@ -213,7 +213,7 @@ __SYSCALL(188, sys_ni_syscall) /* 188 reserved */ + __SYSCALL(189, sys_ni_syscall) /* 189 reserved */ + __SYSCALL(190, sys_vfork) + __SYSCALL(191, compat_sys_getrlimit) /* SuS compliant getrlimit */ +-__SYSCALL(192, sys_mmap_pgoff) ++__SYSCALL(192, compat_sys_mmap2_wrapper) + __SYSCALL(193, compat_sys_truncate64_wrapper) + __SYSCALL(194, compat_sys_ftruncate64_wrapper) + __SYSCALL(195, sys_stat64) +diff --git a/arch/arm64/kernel/sys32.S b/arch/arm64/kernel/sys32.S +index 423a5b3..baf024d 100644 +--- a/arch/arm64/kernel/sys32.S ++++ b/arch/arm64/kernel/sys32.S +@@ -19,9 +19,12 @@ + */ + + #include <linux/linkage.h> ++#include <linux/const.h> + + #include <asm/assembler.h> + #include <asm/asm-offsets.h> ++#include <asm/errno.h> ++#include <asm/page.h> + + /* + * System call wrappers for the AArch32 compatibility layer. +@@ -53,6 +56,20 @@ compat_sys_fstatfs64_wrapper: + b compat_sys_fstatfs64 + ENDPROC(compat_sys_fstatfs64_wrapper) + ++ ++ ++/* ++ * Note: off_4k (w5) is always units of 4K. If we can't do the requested ++ * offset, we return EINVAL. ++ */ ++compat_sys_mmap2_wrapper: ++ tst w5, #~PAGE_MASK >> 12 ++ b.ne 1f ++ lsr w5, w5, #PAGE_SHIFT - 12 ++ b sys_mmap_pgoff ++1: mov x0, #-EINVAL ++ ret lr ++ + /* + * Wrappers for AArch32 syscalls that either take 64-bit parameters + * in registers or that take 32-bit parameters which require sign +-- +2.3.1 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.arch/x86-asm-entry-64-remove-a-bogus-ret_from_fork-optimization.patch new/patches.arch/x86-asm-entry-64-remove-a-bogus-ret_from_fork-optimization.patch --- old/patches.arch/x86-asm-entry-64-remove-a-bogus-ret_from_fork-optimization.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.arch/x86-asm-entry-64-remove-a-bogus-ret_from_fork-optimization.patch 2015-04-09 12:59:37.000000000 +0200 @@ -0,0 +1,56 @@ +From: Andy Lutomirski <[email protected]> +Date: Thu, 5 Mar 2015 01:09:44 +0100 +Subject: x86/asm/entry/64: Remove a bogus 'ret_from_fork' optimization +Git-commit: 956421fbb74c3a6261903f3836c0740187cf038b +Patch-mainline: v4.0-rc3 +References: bsc#926240, CVE-2015-2830 + +'ret_from_fork' checks TIF_IA32 to determine whether 'pt_regs' and +the related state make sense for 'ret_from_sys_call'. This is +entirely the wrong check. TS_COMPAT would make a little more +sense, but there's really no point in keeping this optimization +at all. + +This fixes a return to the wrong user CS if we came from int +0x80 in a 64-bit task. + +Signed-off-by: Andy Lutomirski <[email protected]> +Cc: Borislav Petkov <[email protected]> +Cc: Denys Vlasenko <[email protected]> +Cc: H. Peter Anvin <[email protected]> +Cc: Linus Torvalds <[email protected]> +Cc: Oleg Nesterov <[email protected]> +Cc: Thomas Gleixner <[email protected]> +Cc: <[email protected]> +Link: http://lkml.kernel.org/r/4710be56d76ef994ddf59087aad98c000fbab9a4.1424989793.git.l...@amacapital.net +[ Backported from tip:x86/asm. ] +Signed-off-by: Ingo Molnar <[email protected]> +Acked-by: Borislav Petkov <[email protected]> +--- + arch/x86/kernel/entry_64.S | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +Index: current/arch/x86/kernel/entry_64.S +=================================================================== +--- current.orig/arch/x86/kernel/entry_64.S 2014-08-04 00:25:02.000000000 +0200 ++++ current/arch/x86/kernel/entry_64.S 2015-04-09 12:55:07.060074628 +0200 +@@ -335,11 +335,14 @@ ENTRY(ret_from_fork) + testl $3, CS-ARGOFFSET(%rsp) # from kernel_thread? + jz 1f + +- testl $_TIF_IA32, TI_flags(%rcx) # 32-bit compat task needs IRET +- jnz int_ret_from_sys_call +- +- RESTORE_TOP_OF_STACK %rdi, -ARGOFFSET +- jmp ret_from_sys_call # go to the SYSRET fastpath ++ /* ++ * By the time we get here, we have no idea whether our pt_regs, ++ * ti flags, and ti status came from the 64-bit SYSCALL fast path, ++ * the slow path, or one of the ia32entry paths. ++ * Use int_ret_from_sys_call to return, since it can safely handle ++ * all of the above. ++ */ ++ jmp int_ret_from_sys_call + + 1: + subq $REST_SKIP, %rsp # leave space for volatiles diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.arch/x86-microcode-intel-guard-against-stack-overflow-in-the-loader.patch new/patches.arch/x86-microcode-intel-guard-against-stack-overflow-in-the-loader.patch --- old/patches.arch/x86-microcode-intel-guard-against-stack-overflow-in-the-loader.patch 2015-03-18 18:31:15.000000000 +0100 +++ new/patches.arch/x86-microcode-intel-guard-against-stack-overflow-in-the-loader.patch 2015-04-09 12:59:37.000000000 +0200 @@ -3,7 +3,7 @@ Subject: x86/microcode/intel: Guard against stack overflow in the loader Git-commit: f84598bd7c851f8b0bf8cd0d7c3be0d73c432ff4 Patch-mainline: v3.20-rc1 -References: bsc#922944 +References: bsc#922944, CVE-2015-2666 mc_saved_tmp is a static array allocated on the stack, we need to make sure mc_saved_count stays within its bounds, otherwise we're overflowing ++++++ patches.drivers.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.drivers/0001-Input-xpad-use-proper-endpoint-type.patch new/patches.drivers/0001-Input-xpad-use-proper-endpoint-type.patch --- old/patches.drivers/0001-Input-xpad-use-proper-endpoint-type.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.drivers/0001-Input-xpad-use-proper-endpoint-type.patch 2015-04-08 14:31:19.000000000 +0200 @@ -0,0 +1,54 @@ +From 32282966d58feb5f92ca06f88a1319613f51494e Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman <[email protected]> +Date: Tue, 25 Nov 2014 00:38:17 -0800 +Subject: [PATCH] Input: xpad - use proper endpoint type +Git-Commit: a1f9a4072655843fc03186acbad65990cc05dd2d +Patch-Mainline: v3.18 +References: bnc#926397 + +The xpad wireless endpoint is not a bulk endpoint on my devices, but +rather an interrupt one, so the USB core complains when it is submitted. +I'm guessing that the author really did mean that this should be an +interrupt urb, but as there are a zillion different xpad devices out +there, let's cover out bases and handle both bulk and interrupt +endpoints just as easily. + +Signed-off-by: "Pierre-Loup A. Griffais" <[email protected]> +Signed-off-by: Greg Kroah-Hartman <[email protected]> +Cc: stable <[email protected]> +Signed-off-by: Dmitry Torokhov <[email protected]> +Signed-off-by: Oliver Neukum <[email protected]> +--- + drivers/input/joystick/xpad.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c +index 603fe0d..517829f 100644 +--- a/drivers/input/joystick/xpad.c ++++ b/drivers/input/joystick/xpad.c +@@ -1003,9 +1003,19 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id + } + + ep_irq_in = &intf->cur_altsetting->endpoint[1].desc; +- usb_fill_bulk_urb(xpad->bulk_out, udev, +- usb_sndbulkpipe(udev, ep_irq_in->bEndpointAddress), +- xpad->bdata, XPAD_PKT_LEN, xpad_bulk_out, xpad); ++ if (usb_endpoint_is_bulk_out(ep_irq_in)) { ++ usb_fill_bulk_urb(xpad->bulk_out, udev, ++ usb_sndbulkpipe(udev, ++ ep_irq_in->bEndpointAddress), ++ xpad->bdata, XPAD_PKT_LEN, ++ xpad_bulk_out, xpad); ++ } else { ++ usb_fill_int_urb(xpad->bulk_out, udev, ++ usb_sndintpipe(udev, ++ ep_irq_in->bEndpointAddress), ++ xpad->bdata, XPAD_PKT_LEN, ++ xpad_bulk_out, xpad, 0); ++ } + + /* + * Submit the int URB immediately rather than waiting for open +-- +2.1.4 + ++++++ patches.fixes.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/0001-md-don-t-require-sync_min-to-be-a-multiple-of-chunk_.patch new/patches.fixes/0001-md-don-t-require-sync_min-to-be-a-multiple-of-chunk_.patch --- old/patches.fixes/0001-md-don-t-require-sync_min-to-be-a-multiple-of-chunk_.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/0001-md-don-t-require-sync_min-to-be-a-multiple-of-chunk_.patch 2015-04-14 09:11:37.000000000 +0200 @@ -0,0 +1,40 @@ +From: NeilBrown <[email protected]> +Date: Mon, 23 Mar 2015 17:36:38 +1100 +Subject: [PATCH] md: don't require sync_min to be a multiple of chunk_size. +Git-commit: 2d92d8c7ecc268051e9b1d93bde2868b83a20a86 +Patch-mainline: Submit for 4.1 +References: bnc#910500 + +There is really no need for sync_min to be a multiple of +chunk_size, and values read from here often aren't. +That means you cannot read a value and expect to be able +to write it back later. + +So remove the chunk_size check, and round down to a multiple +of 4K, to be sure everything works with 4K-sector devices. + +Signed-off-by: NeilBrown <[email protected]> +Acked-by: NeilBrown <[email protected]> + +--- + drivers/md/md.c | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +--- linux-3.16-openSUSE-13.2.orig/drivers/md/md.c ++++ linux-3.16-openSUSE-13.2/drivers/md/md.c +@@ -4423,13 +4423,8 @@ min_sync_store(struct mddev *mddev, cons + if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) + return -EBUSY; + +- /* Must be a multiple of chunk_size */ +- if (mddev->chunk_sectors) { +- sector_t temp = min; +- if (sector_div(temp, mddev->chunk_sectors)) +- return -EINVAL; +- } +- mddev->resync_min = min; ++ /* Round down to multiple of 4K for safety */ ++ mddev->resync_min = round_down(min, 8); + + return len; + } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/btrfs-fix-inode-eviction-infinite-loop-after-cloning.patch new/patches.fixes/btrfs-fix-inode-eviction-infinite-loop-after-cloning.patch --- old/patches.fixes/btrfs-fix-inode-eviction-infinite-loop-after-cloning.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/btrfs-fix-inode-eviction-infinite-loop-after-cloning.patch 2015-04-14 09:11:37.000000000 +0200 @@ -0,0 +1,100 @@ +From: Filipe Manana <[email protected]> +Date: Mon, 30 Mar 2015 18:23:59 +0100 +Patch-mainline: 4.1 +Git-commit: 2fdc94abb6fc347bb45bb44206d9360211cfc44b +References: boo#905088 +Subject: [PATCH] Btrfs: fix inode eviction infinite loop after cloning into it + +If we attempt to clone a 0 length region into a file we can end up +inserting a range in the inode's extent_io tree with a start offset +that is greater then the end offset, which triggers immediately the +following warning: + +[ 3914.619057] WARNING: CPU: 17 PID: 4199 at fs/btrfs/extent_io.c:435 insert_state+0x4b/0x10b [btrfs]() +[ 3914.620886] BTRFS: end < start 4095 4096 +(...) +[ 3914.638093] Call Trace: +[ 3914.638636] [<ffffffff81425fd9>] dump_stack+0x4c/0x65 +[ 3914.639620] [<ffffffff81045390>] warn_slowpath_common+0xa1/0xbb +[ 3914.640789] [<ffffffffa03ca44f>] ? insert_state+0x4b/0x10b [btrfs] +[ 3914.642041] [<ffffffff810453f0>] warn_slowpath_fmt+0x46/0x48 +[ 3914.643236] [<ffffffffa03ca44f>] insert_state+0x4b/0x10b [btrfs] +[ 3914.644441] [<ffffffffa03ca729>] __set_extent_bit+0x107/0x3f4 [btrfs] +[ 3914.645711] [<ffffffffa03cb256>] lock_extent_bits+0x65/0x1bf [btrfs] +[ 3914.646914] [<ffffffff8142b2fb>] ? _raw_spin_unlock+0x28/0x33 +[ 3914.648058] [<ffffffffa03cbac4>] ? test_range_bit+0xcc/0xde [btrfs] +[ 3914.650105] [<ffffffffa03cb3c3>] lock_extent+0x13/0x15 [btrfs] +[ 3914.651361] [<ffffffffa03db39e>] lock_extent_range+0x3d/0xcd [btrfs] +[ 3914.652761] [<ffffffffa03de1fe>] btrfs_ioctl_clone+0x278/0x388 [btrfs] +[ 3914.654128] [<ffffffff811226dd>] ? might_fault+0x58/0xb5 +[ 3914.655320] [<ffffffffa03e0909>] btrfs_ioctl+0xb51/0x2195 [btrfs] +(...) +[ 3914.669271] ---[ end trace 14843d3e2e622fc1 ]--- + +This later makes the inode eviction handler enter an infinite loop that +keeps dumping the following warning over and over: + +[ 3915.117629] WARNING: CPU: 22 PID: 4228 at fs/btrfs/extent_io.c:435 insert_state+0x4b/0x10b [btrfs]() +[ 3915.119913] BTRFS: end < start 4095 4096 +(...) +[ 3915.137394] Call Trace: +[ 3915.137913] [<ffffffff81425fd9>] dump_stack+0x4c/0x65 +[ 3915.139154] [<ffffffff81045390>] warn_slowpath_common+0xa1/0xbb +[ 3915.140316] [<ffffffffa03ca44f>] ? insert_state+0x4b/0x10b [btrfs] +[ 3915.141505] [<ffffffff810453f0>] warn_slowpath_fmt+0x46/0x48 +[ 3915.142709] [<ffffffffa03ca44f>] insert_state+0x4b/0x10b [btrfs] +[ 3915.143849] [<ffffffffa03ca729>] __set_extent_bit+0x107/0x3f4 [btrfs] +[ 3915.145120] [<ffffffffa038c1e3>] ? btrfs_kill_super+0x17/0x23 [btrfs] +[ 3915.146352] [<ffffffff811548f6>] ? deactivate_locked_super+0x3b/0x50 +[ 3915.147565] [<ffffffffa03cb256>] lock_extent_bits+0x65/0x1bf [btrfs] +[ 3915.148785] [<ffffffff8142b7e2>] ? _raw_write_unlock+0x28/0x33 +[ 3915.149931] [<ffffffffa03bc325>] btrfs_evict_inode+0x196/0x482 [btrfs] +[ 3915.151154] [<ffffffff81168904>] evict+0xa0/0x148 +[ 3915.152094] [<ffffffff811689e5>] dispose_list+0x39/0x43 +[ 3915.153081] [<ffffffff81169564>] evict_inodes+0xdc/0xeb +[ 3915.154062] [<ffffffff81154418>] generic_shutdown_super+0x49/0xef +[ 3915.155193] [<ffffffff811546d1>] kill_anon_super+0x13/0x1e +[ 3915.156274] [<ffffffffa038c1e3>] btrfs_kill_super+0x17/0x23 [btrfs] +(...) +[ 3915.167404] ---[ end trace 14843d3e2e622fc2 ]--- + +So just bail out of the clone ioctl if the length of the region to clone +is zero, without locking any extent range, in order to prevent this issue +(same behaviour as a pwrite with a 0 length for example). + +This is trivial to reproduce. For example, the steps for the test I just +made for fstests: + + mkfs.btrfs -f SCRATCH_DEV + mount SCRATCH_DEV $SCRATCH_MNT + + touch $SCRATCH_MNT/foo + touch $SCRATCH_MNT/bar + + $CLONER_PROG -s 0 -d 4096 -l 0 $SCRATCH_MNT/foo $SCRATCH_MNT/bar + umount $SCRATCH_MNT + +A test case for fstests follows soon. + +CC: <[email protected]> +Signed-off-by: Filipe Manana <[email protected]> +Reviewed-by: Omar Sandoval <[email protected]> +Signed-off-by: David Sterba <[email protected]> +--- + fs/btrfs/ioctl.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/fs/btrfs/ioctl.c ++++ b/fs/btrfs/ioctl.c +@@ -3676,6 +3676,11 @@ static noinline long btrfs_ioctl_clone(s + if (off + len == src->i_size) + len = ALIGN(src->i_size, bs) - off; + ++ if (len == 0) { ++ ret = 0; ++ goto out_unlock; ++ } ++ + /* verify the end result is block aligned */ + if (!IS_ALIGNED(off, bs) || !IS_ALIGNED(off + len, bs) || + !IS_ALIGNED(destoff, bs)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/ecryptfs-remove-buggy-and-unnecessary-write-in-file-name-decode-routine.patch new/patches.fixes/ecryptfs-remove-buggy-and-unnecessary-write-in-file-name-decode-routine.patch --- old/patches.fixes/ecryptfs-remove-buggy-and-unnecessary-write-in-file-name-decode-routine.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/ecryptfs-remove-buggy-and-unnecessary-write-in-file-name-decode-routine.patch 2015-04-14 09:11:37.000000000 +0200 @@ -0,0 +1,36 @@ +From: Michael Halcrow <[email protected]> +Date: Wed, 26 Nov 2014 09:09:16 -0800 +Subject: eCryptfs: Remove buggy and unnecessary write in file name decode + routine +Git-commit: 942080643bce061c3dd9d5718d3b745dcb39a8bc +Patch-mainline: v3.19-rc1 +References: bsc#918333, CVE-2014-9683 + +Dmitry Chernenkov used KASAN to discover that eCryptfs writes past the +end of the allocated buffer during encrypted filename decoding. This +fix corrects the issue by getting rid of the unnecessary 0 write when +the current bit offset is 2. + +Signed-off-by: Michael Halcrow <[email protected]> +Reported-by: Dmitry Chernenkov <[email protected]> +Suggested-by: Kees Cook <[email protected]> +Cc: [email protected] # v2.6.29+: 51ca58d eCryptfs: Filename Encryption: Encoding and encryption functions +Signed-off-by: Tyler Hicks <[email protected]> +Acked-by: Borislav Petkov <[email protected]> +--- + fs/ecryptfs/crypto.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c +index 2f6735dbf1a9..31b148f3e772 100644 +--- a/fs/ecryptfs/crypto.c ++++ b/fs/ecryptfs/crypto.c +@@ -1917,7 +1917,6 @@ ecryptfs_decode_from_filename(unsigned char *dst, size_t *dst_size, + break; + case 2: + dst[dst_byte_offset++] |= (src_byte); +- dst[dst_byte_offset] = 0; + current_bit_offset = 0; + break; + } + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/ext4-allocate-entire-range-in-zero-range.patch new/patches.fixes/ext4-allocate-entire-range-in-zero-range.patch --- old/patches.fixes/ext4-allocate-entire-range-in-zero-range.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/ext4-allocate-entire-range-in-zero-range.patch 2015-04-14 09:11:37.000000000 +0200 @@ -0,0 +1,83 @@ +From 0f2af21aae11972fa924374ddcf52e88347cf5a8 Mon Sep 17 00:00:00 2001 +From: Lukas Czerner <[email protected]> +Date: Fri, 3 Apr 2015 00:09:13 -0400 +Subject: ext4: allocate entire range in zero range +Git-commit: 0f2af21aae11972fa924374ddcf52e88347cf5a8 +Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git +Patch-mainline: expected 4.1 +References: bnc#919032 CVE-2015-0275 + +Currently there is a bug in zero range code which causes zero range +calls to only allocate block aligned portion of the range, while +ignoring the rest in some cases. + +In some cases, namely if the end of the range is past i_size, we do +attempt to preallocate the last nonaligned block. However this might +cause kernel to BUG() in some carefully designed zero range requests +on setups where page size > block size. + +Fix this problem by first preallocating the entire range, including +the nonaligned edges and converting the written extents to unwritten +in the next step. This approach will also give us the advantage of +having the range to be as linearly contiguous as possible. + +Signed-off-by: Lukas Czerner <[email protected]> +Signed-off-by: Theodore Ts'o <[email protected]> +Acked-by: Jan Kara <[email protected]> + +diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c +index 2e6af88..3cc17aa 100644 + +--- a/fs/ext4/extents.c ++++ b/fs/ext4/extents.c +@@ -4797,12 +4797,6 @@ static long ext4_zero_range(struct file *file, loff_t offset, + else + max_blocks -= lblk; + +- flags = EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT | +- EXT4_GET_BLOCKS_CONVERT_UNWRITTEN | +- EXT4_EX_NOCACHE; +- if (mode & FALLOC_FL_KEEP_SIZE) +- flags |= EXT4_GET_BLOCKS_KEEP_SIZE; +- + mutex_lock(&inode->i_mutex); + + /* +@@ -4819,15 +4813,28 @@ static long ext4_zero_range(struct file *file, loff_t offset, + ret = inode_newsize_ok(inode, new_size); + if (ret) + goto out_mutex; +- /* +- * If we have a partial block after EOF we have to allocate +- * the entire block. +- */ +- if (partial_end) +- max_blocks += 1; + } + ++ flags = EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT; ++ if (mode & FALLOC_FL_KEEP_SIZE) ++ flags |= EXT4_GET_BLOCKS_KEEP_SIZE; ++ ++ /* Preallocate the range including the unaligned edges */ ++ if (partial_begin || partial_end) { ++ ret = ext4_alloc_file_blocks(file, ++ round_down(offset, 1 << blkbits) >> blkbits, ++ (round_up((offset + len), 1 << blkbits) - ++ round_down(offset, 1 << blkbits)) >> blkbits, ++ new_size, flags, mode); ++ if (ret) ++ goto out_mutex; ++ ++ } ++ ++ /* Zero range excluding the unaligned edges */ + if (max_blocks > 0) { ++ flags |= (EXT4_GET_BLOCKS_CONVERT_UNWRITTEN | ++ EXT4_EX_NOCACHE); + + /* Now release the pages and zero block aligned part of pages*/ + truncate_pagecache_range(inode, start, end - 1); +-- +cgit v0.10.2 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/ext4-fix-ZERO_RANGE-bug-hidden-by-flag-aliasing.patch new/patches.fixes/ext4-fix-ZERO_RANGE-bug-hidden-by-flag-aliasing.patch --- old/patches.fixes/ext4-fix-ZERO_RANGE-bug-hidden-by-flag-aliasing.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/ext4-fix-ZERO_RANGE-bug-hidden-by-flag-aliasing.patch 2015-04-14 09:11:37.000000000 +0200 @@ -0,0 +1,75 @@ +From 713e8dde3e71e92db2d8cc8459d236ce1fb576ce Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o <[email protected]> +Date: Mon, 1 Sep 2014 14:32:09 -0400 +Subject: [PATCH] ext4: fix ZERO_RANGE bug hidden by flag aliasing +Git-commit: 713e8dde3e71e92db2d8cc8459d236ce1fb576ce +Patch-mainline: v3.18-rc2 + +We accidently aliased EXT4_EX_NOCACHE and EXT4_GET_CONVERT_UNWRITTEN +falgs, which apparently was hiding a bug that was unmasked when this +flag aliasing issue was addressed (see the subsequent commit). The +reproduction case was: + + fsx -N 10000 -l 500000 -r 4096 -t 4096 -w 4096 -Z -R -W /vdb/junk + +... which would cause fsx to report corruption in the data file. + +The fix we have is a bit of an overkill, but I'd much rather be +conservative for now, and we can optimize ZERO_RANGE_FL handling +later. The fact that we need to zap the extent_status cache for the +inode is unfortunate, but correctness is far more important than +performance. + +Signed-off-by: Theodore Ts'o <[email protected]> +Cc: Namjae Jeon <[email protected]> +Acked-by: Jan Kara <[email protected]> + +--- + fs/ext4/extents.c | 21 ++++++++++++++------- + 1 file changed, 14 insertions(+), 7 deletions(-) + +diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c +index d00937336f19..bf205f72be35 100644 +--- a/fs/ext4/extents.c ++++ b/fs/ext4/extents.c +@@ -4802,7 +4802,8 @@ static long ext4_zero_range(struct file *file, loff_t offset, + max_blocks -= lblk; + + flags = EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT | +- EXT4_GET_BLOCKS_CONVERT_UNWRITTEN; ++ EXT4_GET_BLOCKS_CONVERT_UNWRITTEN | ++ EXT4_EX_NOCACHE; + if (mode & FALLOC_FL_KEEP_SIZE) + flags |= EXT4_GET_BLOCKS_KEEP_SIZE; + +@@ -4840,15 +4841,21 @@ static long ext4_zero_range(struct file *file, loff_t offset, + ext4_inode_block_unlocked_dio(inode); + inode_dio_wait(inode); + ++ ret = ext4_alloc_file_blocks(file, lblk, max_blocks, new_size, ++ flags, mode); ++ if (ret) ++ goto out_dio; + /* + * Remove entire range from the extent status tree. ++ * ++ * ext4_es_remove_extent(inode, lblk, max_blocks) is ++ * NOT sufficient. I'm not sure why this is the case, ++ * but let's be conservative and remove the extent ++ * status tree for the entire inode. There should be ++ * no outstanding delalloc extents thanks to the ++ * filemap_write_and_wait_range() call above. + */ +- ret = ext4_es_remove_extent(inode, lblk, max_blocks); +- if (ret) +- goto out_dio; +- +- ret = ext4_alloc_file_blocks(file, lblk, max_blocks, new_size, +- flags, mode); ++ ret = ext4_es_remove_extent(inode, 0, EXT_MAX_BLOCKS); + if (ret) + goto out_dio; + } +-- +2.1.4 + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/kabi-fix-for-move-d_rcu.patch new/patches.fixes/kabi-fix-for-move-d_rcu.patch --- old/patches.fixes/kabi-fix-for-move-d_rcu.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/kabi-fix-for-move-d_rcu.patch 2015-04-14 09:11:37.000000000 +0200 @@ -0,0 +1,41 @@ +From: Miklos Szeredi <[email protected]> +Subject: kabi: fix for move of d_rcu +Patch-mainline: no +References: bnc#903640 CVE-2014-8559 boo#927018 + +d_rcu shouldn't be used outside core VFS. The size and offset of the other +fields doesn't change. So it's OK to ignore this move. + +[rebased for openSUSE-13.2 kernel by tiwai] + +Signed-off-by: Miklos Szeredi <[email protected]> +Signed-off-by: Takashi Iwai <[email protected]> +--- + include/linux/dcache.h | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/include/linux/dcache.h ++++ b/include/linux/dcache.h +@@ -126,8 +126,14 @@ struct dentry { + struct list_head d_lru; /* LRU list */ + union { + struct list_head d_child; /* child of parent list */ ++#ifdef __GENKSYMS__ ++ struct rcu_head d_rcu; ++#endif + } d_u; + struct list_head d_subdirs; /* our children */ ++#ifdef __GENKSYMS__ ++ struct hlist_node d_alias; ++#else + /* + * d_alias and d_rcu can share memory + */ +@@ -135,6 +141,7 @@ struct dentry { + struct hlist_node d_alias; /* inode alias list */ + struct rcu_head d_rcu; + }; ++#endif + }; + + /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.fixes/net-rds-use-correct-size-for-max-unacked-packets-and.patch new/patches.fixes/net-rds-use-correct-size-for-max-unacked-packets-and.patch --- old/patches.fixes/net-rds-use-correct-size-for-max-unacked-packets-and.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.fixes/net-rds-use-correct-size-for-max-unacked-packets-and.patch 2015-04-14 09:11:37.000000000 +0200 @@ -0,0 +1,45 @@ +From: Michal Kubecek <[email protected]> +Date: Thu, 9 Apr 2015 11:14:13 +0200 +Subject: net: rds: use correct size for max unacked packets and bytes +Patch-mainline: v3.19 +Git-commit: db27ebb111e9f69efece08e4cb6a34ff980f8896 +References: bsc#919018 CVE-2015-2042 + +Max unacked packets/bytes is an int while sizeof(long) was used in the +sysctl table. + +This means that when they were getting read we'd also leak kernel memory +to userspace along with the timeout values. + +Signed-off-by: Sasha Levin <[email protected]> +Signed-off-by: David S. Miller <[email protected]> +Acked-by: Michal Kubecek <[email protected]> + +--- + net/rds/sysctl.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/net/rds/sysctl.c b/net/rds/sysctl.c +index c3b0cd43eb56..c173f69e1479 100644 +--- a/net/rds/sysctl.c ++++ b/net/rds/sysctl.c +@@ -71,14 +71,14 @@ static struct ctl_table rds_sysctl_rds_table[] = { + { + .procname = "max_unacked_packets", + .data = &rds_sysctl_max_unacked_packets, +- .maxlen = sizeof(unsigned long), ++ .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, + { + .procname = "max_unacked_bytes", + .data = &rds_sysctl_max_unacked_bytes, +- .maxlen = sizeof(unsigned long), ++ .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, +-- +2.3.5 + ++++++ patches.rpmify.tar.bz2 ++++++ ++++++ patches.suse.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-__add_inode_ref-out-of-bounds-memory-read-when-looking-for-extended-ref.patch new/patches.suse/btrfs-__add_inode_ref-out-of-bounds-memory-read-when-looking-for-extended-ref.patch --- old/patches.suse/btrfs-__add_inode_ref-out-of-bounds-memory-read-when-looking-for-extended-ref.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-__add_inode_ref-out-of-bounds-memory-read-when-looking-for-extended-ref.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,29 @@ +From: Quentin Casasnovas <[email protected]> +Date: Tue, 3 Mar 2015 16:31:38 +0100 +Git-commit: dd9ef135e3542ffc621c4eb7f0091870ec7a1504 +Patch-mainline: 4.0 +Subject: Btrfs:__add_inode_ref: out of bounds memory read when looking for extended ref. + +Improper arithmetics when calculting the address of the extended ref could +lead to an out of bounds memory read and kernel panic. + +Signed-off-by: Quentin Casasnovas <[email protected]> +Reviewed-by: David Sterba <[email protected]> +Signed-off-by: Chris Mason <[email protected]> +Signed-off-by: David Sterba <[email protected]> + +--- + fs/btrfs/tree-log.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/fs/btrfs/tree-log.c ++++ b/fs/btrfs/tree-log.c +@@ -999,7 +999,7 @@ again: + base = btrfs_item_ptr_offset(leaf, path->slots[0]); + + while (cur_offset < item_size) { +- extref = (struct btrfs_inode_extref *)base + cur_offset; ++ extref = (struct btrfs_inode_extref *)(base + cur_offset); + + victim_name_len = btrfs_inode_extref_name_len(leaf, extref); + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-do-not-move-em-to-modified-list-when-unpinning.patch new/patches.suse/btrfs-do-not-move-em-to-modified-list-when-unpinning.patch --- old/patches.suse/btrfs-do-not-move-em-to-modified-list-when-unpinning.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-do-not-move-em-to-modified-list-when-unpinning.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,52 @@ +From: Josef Bacik <[email protected]> +Date: Fri, 14 Nov 2014 16:16:30 -0500 +Git-commit: a28046956c71985046474283fa3bcd256915fb72 +Patch-mainline: 3.19 +Subject: Btrfs: do not move em to modified list when unpinning + +We use the modified list to keep track of which extents have been modified so we +know which ones are candidates for logging at fsync() time. Newly modified +extents are added to the list at modification time, around the same time the +ordered extent is created. We do this so that we don't have to wait for ordered +extents to complete before we know what we need to log. The problem is when +something like this happens + +log extent 0-4k on inode 1 +copy csum for 0-4k from ordered extent into log +sync log +commit transaction +log some other extent on inode 1 +ordered extent for 0-4k completes and adds itself onto modified list again +log changed extents +see ordered extent for 0-4k has already been logged + at this point we assume the csum has been copied +sync log +crash + +On replay we will see the extent 0-4k in the log, drop the original 0-4k extent +which is the same one that we are replaying which also drops the csum, and then +we won't find the csum in the log for that bytenr. This of course causes us to +have errors about not having csums for certain ranges of our inode. So remove +the modified list manipulation in unpin_extent_cache, any modified extents +should have been added well before now, and we don't want them re-logged. This +fixes my test that I could reliably reproduce this problem with. Thanks, + +Signed-off-by: Josef Bacik <[email protected]> +Signed-off-by: Chris Mason <[email protected]> +Signed-off-by: David Sterba <[email protected]> + +--- + fs/btrfs/extent_map.c | 2 -- + 1 file changed, 2 deletions(-) + +--- a/fs/btrfs/extent_map.c ++++ b/fs/btrfs/extent_map.c +@@ -287,8 +287,6 @@ int unpin_extent_cache(struct extent_map + if (!em) + goto out; + +- if (!test_bit(EXTENT_FLAG_LOGGING, &em->flags)) +- list_move(&em->list, &tree->modified_extents); + em->generation = gen; + clear_bit(EXTENT_FLAG_PINNED, &em->flags); + em->mod_start = em->start; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-don-t-delay-inode-ref-updates-during-log-replay.patch new/patches.suse/btrfs-don-t-delay-inode-ref-updates-during-log-replay.patch --- old/patches.suse/btrfs-don-t-delay-inode-ref-updates-during-log-replay.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-don-t-delay-inode-ref-updates-during-log-replay.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,47 @@ +From: Chris Mason <[email protected]> +Date: Wed, 31 Dec 2014 12:18:29 -0500 +Git-commit: 6f8960541b1eb6054a642da48daae2320fddba93 +Patch-mainline: 3.19 +Subject: Btrfs: don't delay inode ref updates during log replay + +Commit 1d52c78afbb (Btrfs: try not to ENOSPC on log replay) added a +check to skip delayed inode updates during log replay because it +confuses the enospc code. But the delayed processing will end up +ignoring delayed refs from log replay because the inode itself wasn't +put through the delayed code. + +This can end up triggering a warning at commit time: + +WARNING: CPU: 2 PID: 778 at fs/btrfs/delayed-inode.c:1410 btrfs_assert_delayed_root_empty+0x32/0x34() + +Which is repeated for each commit because we never process the delayed +inode ref update. + +The fix used here is to change btrfs_delayed_delete_inode_ref to return +an error if we're currently in log replay. The caller will do the ref +deletion immediately and everything will work properly. + +Signed-off-by: Chris Mason <[email protected]> +Signed-off-by: David Sterba <[email protected]> + +--- + fs/btrfs/delayed-inode.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/fs/btrfs/delayed-inode.c ++++ b/fs/btrfs/delayed-inode.c +@@ -1857,6 +1857,14 @@ int btrfs_delayed_delete_inode_ref(struc + { + struct btrfs_delayed_node *delayed_node; + ++ /* ++ * we don't do delayed inode updates during log recovery because it ++ * leads to enospc problems. This means we also can't do ++ * delayed inode refs ++ */ ++ if (BTRFS_I(inode)->root->fs_info->log_root_recovering) ++ return -EAGAIN; ++ + delayed_node = btrfs_get_or_create_delayed_node(inode); + if (IS_ERR(delayed_node)) + return PTR_ERR(delayed_node); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-fix-data-loss-in-the-fast-fsync-path.patch new/patches.suse/btrfs-fix-data-loss-in-the-fast-fsync-path.patch --- old/patches.suse/btrfs-fix-data-loss-in-the-fast-fsync-path.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-fix-data-loss-in-the-fast-fsync-path.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,251 @@ +From: Filipe Manana <[email protected]> +Date: Sun, 1 Mar 2015 20:36:00 +0000 +Subject: Btrfs: fix data loss in the fast fsync path +Git-commit: 3a8b36f378060d20062a0918e99fae39ff077bf0 +Patch-mainline: 3.19 + +When using the fast file fsync code path we can miss the fact that new +writes happened since the last file fsync and therefore return without +waiting for the IO to finish and write the new extents to the fsync log. + +Here's an example scenario where the fsync will miss the fact that new +file data exists that wasn't yet durably persisted: + +1. fs_info->last_trans_committed == N - 1 and current transaction is + transaction N (fs_info->generation == N); + +2. do a buffered write; + +3. fsync our inode, this clears our inode's full sync flag, starts + an ordered extent and waits for it to complete - when it completes + at btrfs_finish_ordered_io(), the inode's last_trans is set to the + value N (via btrfs_update_inode_fallback -> btrfs_update_inode -> + btrfs_set_inode_last_trans); + +4. transaction N is committed, so fs_info->last_trans_committed is now + set to the value N and fs_info->generation remains with the value N; + +5. do another buffered write, when this happens btrfs_file_write_iter + sets our inode's last_trans to the value N + 1 (that is + fs_info->generation + 1 == N + 1); + +6. transaction N + 1 is started and fs_info->generation now has the + value N + 1; + +7. transaction N + 1 is committed, so fs_info->last_trans_committed + is set to the value N + 1; + +8. fsync our inode - because it doesn't have the full sync flag set, + we only start the ordered extent, we don't wait for it to complete + (only in a later phase) therefore its last_trans field has the + value N + 1 set previously by btrfs_file_write_iter(), and so we + have: + + inode->last_trans <= fs_info->last_trans_committed + (N + 1) (N + 1) + + Which made us not log the last buffered write and exit the fsync + handler immediately, returning success (0) to user space and resulting + in data loss after a crash. + +This can actually be triggered deterministically and the following excerpt +from a testcase I made for xfstests triggers the issue. It moves a dummy +file across directories and then fsyncs the old parent directory - this +is just to trigger a transaction commit, so moving files around isn't +directly related to the issue but it was chosen because running 'sync' for +example does more than just committing the current transaction, as it +flushes/waits for all file data to be persisted. The issue can also happen +at random periods, since the transaction kthread periodicaly commits the +current transaction (about every 30 seconds by default). +The body of the test is: + + _scratch_mkfs >> $seqres.full 2>&1 + _init_flakey + _mount_flakey + + # Create our main test file 'foo', the one we check for data loss. + # By doing an fsync against our file, it makes btrfs clear the 'needs_full_sync' + # bit from its flags (btrfs inode specific flags). + $XFS_IO_PROG -f -c "pwrite -S 0xaa 0 8K" \ + -c "fsync" $SCRATCH_MNT/foo | _filter_xfs_io + + # Now create one other file and 2 directories. We will move this second file + # from one directory to the other later because it forces btrfs to commit its + # currently open transaction if we fsync the old parent directory. This is + # necessary to trigger the data loss bug that affected btrfs. + mkdir $SCRATCH_MNT/testdir_1 + touch $SCRATCH_MNT/testdir_1/bar + mkdir $SCRATCH_MNT/testdir_2 + + # Make sure everything is durably persisted. + sync + + # Write more 8Kb of data to our file. + $XFS_IO_PROG -c "pwrite -S 0xbb 8K 8K" $SCRATCH_MNT/foo | _filter_xfs_io + + # Move our 'bar' file into a new directory. + mv $SCRATCH_MNT/testdir_1/bar $SCRATCH_MNT/testdir_2/bar + + # Fsync our first directory. Because it had a file moved into some other + # directory, this made btrfs commit the currently open transaction. This is + # a condition necessary to trigger the data loss bug. + $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/testdir_1 + + # Now fsync our main test file. If the fsync succeeds, we expect the 8Kb of + # data we wrote previously to be persisted and available if a crash happens. + # This did not happen with btrfs, because of the transaction commit that + # happened when we fsynced the parent directory. + $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo + + # Simulate a crash/power loss. + _load_flakey_table $FLAKEY_DROP_WRITES + _unmount_flakey + + _load_flakey_table $FLAKEY_ALLOW_WRITES + _mount_flakey + + # Now check that all data we wrote before are available. + echo "File content after log replay:" + od -t x1 $SCRATCH_MNT/foo + + status=0 + exit + +The expected golden output for the test, which is what we get with this +fix applied (or when running against ext3/4 and xfs), is: + + wrote 8192/8192 bytes at offset 0 + XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 8192/8192 bytes at offset 8192 + XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + File content after log replay: + 0000000 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa + * + 0020000 bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb + * + 0040000 + +Without this fix applied, the output shows the test file does not have +the second 8Kb extent that we successfully fsynced: + + wrote 8192/8192 bytes at offset 0 + XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + wrote 8192/8192 bytes at offset 8192 + XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + File content after log replay: + 0000000 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa + * + 0020000 + +So fix this by skipping the fsync only if we're doing a full sync and +if the inode's last_trans is <= fs_info->last_trans_committed, or if +the inode is already in the log. Also remove setting the inode's +last_trans in btrfs_file_write_iter since it's useless/unreliable. + +Also because btrfs_file_write_iter no longer sets inode->last_trans to +fs_info->generation + 1, don't set last_trans to 0 if we bail out and don't +bail out if last_trans is 0, otherwise something as simple as the following +example wouldn't log the second write on the last fsync: + + 1. write to file + + 2. fsync file + + 3. fsync file + |--> btrfs_inode_in_log() returns true and it set last_trans to 0 + + 4. write to file + |--> btrfs_file_write_iter() no longers sets last_trans, so it + remained with a value of 0 + 5. fsync + |--> inode->last_trans == 0, so it bails out without logging the + second write + +A test case for xfstests will be sent soon. + +Signed-off-by: Filipe Manana <[email protected]> +Signed-off-by: Chris Mason <[email protected]> + +--- + fs/btrfs/file.c | 56 ++++++++++++++++++++++++++++---------------------------- + 1 file changed, 28 insertions(+), 28 deletions(-) + +--- a/fs/btrfs/file.c ++++ b/fs/btrfs/file.c +@@ -1806,22 +1806,10 @@ static ssize_t btrfs_file_write_iter(str + mutex_unlock(&inode->i_mutex); + + /* +- * we want to make sure fsync finds this change +- * but we haven't joined a transaction running right now. +- * +- * Later on, someone is sure to update the inode and get the +- * real transid recorded. +- * +- * We set last_trans now to the fs_info generation + 1, +- * this will either be one more than the running transaction +- * or the generation used for the next transaction if there isn't +- * one running right now. +- * + * We also have to set last_sub_trans to the current log transid, + * otherwise subsequent syncs to a file that's been synced in this + * transaction will appear to have already occured. + */ +- BTRFS_I(inode)->last_trans = root->fs_info->generation + 1; + BTRFS_I(inode)->last_sub_trans = root->log_transid; + if (num_written > 0) { + err = generic_write_sync(file, pos, num_written); +@@ -1909,25 +1897,37 @@ int btrfs_sync_file(struct file *file, l + atomic_inc(&root->log_batch); + + /* +- * check the transaction that last modified this inode +- * and see if its already been committed +- */ +- if (!BTRFS_I(inode)->last_trans) { +- mutex_unlock(&inode->i_mutex); +- goto out; +- } +- +- /* +- * if the last transaction that changed this file was before +- * the current transaction, we can bail out now without any +- * syncing ++ * If the last transaction that changed this file was before the current ++ * transaction and we have the full sync flag set in our inode, we can ++ * bail out now without any syncing. ++ * ++ * Note that we can't bail out if the full sync flag isn't set. This is ++ * because when the full sync flag is set we start all ordered extents ++ * and wait for them to fully complete - when they complete they update ++ * the inode's last_trans field through: ++ * ++ * btrfs_finish_ordered_io() -> ++ * btrfs_update_inode_fallback() -> ++ * btrfs_update_inode() -> ++ * btrfs_set_inode_last_trans() ++ * ++ * So we are sure that last_trans is up to date and can do this check to ++ * bail out safely. For the fast path, when the full sync flag is not ++ * set in our inode, we can not do it because we start only our ordered ++ * extents and don't wait for them to complete (that is when ++ * btrfs_finish_ordered_io runs), so here at this point their last_trans ++ * value might be less than or equals to fs_info->last_trans_committed, ++ * and setting a speculative last_trans for an inode when a buffered ++ * write is made (such as fs_info->generation + 1 for example) would not ++ * be reliable since after setting the value and before fsync is called ++ * any number of transactions can start and commit (transaction kthread ++ * commits the current transaction periodically), and a transaction ++ * commit does not start nor waits for ordered extents to complete. + */ + smp_mb(); + if (btrfs_inode_in_log(inode, root->fs_info->generation) || +- BTRFS_I(inode)->last_trans <= +- root->fs_info->last_trans_committed) { +- BTRFS_I(inode)->last_trans = 0; +- ++ (full_sync && BTRFS_I(inode)->last_trans <= ++ root->fs_info->last_trans_committed)) { + /* + * We'v had everything committed since the last time we were + * modified so clear this flag in case it was set for whatever diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-fix-fs-corruption-on-transaction-abort-if-device-supports-discard.patch new/patches.suse/btrfs-fix-fs-corruption-on-transaction-abort-if-device-supports-discard.patch --- old/patches.suse/btrfs-fix-fs-corruption-on-transaction-abort-if-device-supports-discard.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-fix-fs-corruption-on-transaction-abort-if-device-supports-discard.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,168 @@ +From: Filipe Manana <[email protected]> +Date: Sun, 7 Dec 2014 21:31:47 +0000 +Subject: Btrfs: fix fs corruption on transaction abort if device supports discard +Git-commit: 678886bdc6378c1cbd5072da2c5a3035000214e3 +Patch-mainline: 3.19 + +When we abort a transaction we iterate over all the ranges marked as dirty +in fs_info->freed_extents[0] and fs_info->freed_extents[1], clear them +from those trees, add them back (unpin) to the free space caches and, if +the fs was mounted with "-o discard", perform a discard on those regions. +Also, after adding the regions to the free space caches, a fitrim ioctl call +can see those ranges in a block group's free space cache and perform a discard +on the ranges, so the same issue can happen without "-o discard" as well. + +This causes corruption, affecting one or multiple btree nodes (in the worst +case leaving the fs unmountable) because some of those ranges (the ones in +the fs_info->pinned_extents tree) correspond to btree nodes/leafs that are +referred by the last committed super block - breaking the rule that anything +that was committed by a transaction is untouched until the next transaction +commits successfully. + +I ran into this while running in a loop (for several hours) the fstest that +I recently submitted: + + [PATCH] fstests: add btrfs test to stress chunk allocation/removal and fstrim + +The corruption always happened when a transaction aborted and then fsck complained +like this: + + _check_btrfs_filesystem: filesystem on /dev/sdc is inconsistent + *** fsck.btrfs output *** + Check tree block failed, want=94945280, have=0 + Check tree block failed, want=94945280, have=0 + Check tree block failed, want=94945280, have=0 + Check tree block failed, want=94945280, have=0 + Check tree block failed, want=94945280, have=0 + read block failed check_tree_block + Couldn't open file system + +In this case 94945280 corresponded to the root of a tree. +Using frace what I observed was the following sequence of steps happened: + + 1) transaction N started, fs_info->pinned_extents pointed to + fs_info->freed_extents[0]; + + 2) node/eb 94945280 is created; + + 3) eb is persisted to disk; + + 4) transaction N commit starts, fs_info->pinned_extents now points to + fs_info->freed_extents[1], and transaction N completes; + + 5) transaction N + 1 starts; + + 6) eb is COWed, and btrfs_free_tree_block() called for this eb; + + 7) eb range (94945280 to 94945280 + 16Kb) is added to + fs_info->pinned_extents (fs_info->freed_extents[1]); + + 8) Something goes wrong in transaction N + 1, like hitting ENOSPC + for example, and the transaction is aborted, turning the fs into + readonly mode. The stack trace I got for example: + + [112065.253935] [<ffffffff8140c7b6>] dump_stack+0x4d/0x66 + [112065.254271] [<ffffffff81042984>] warn_slowpath_common+0x7f/0x98 + [112065.254567] [<ffffffffa0325990>] ? __btrfs_abort_transaction+0x50/0x10b [btrfs] + [112065.261674] [<ffffffff810429e5>] warn_slowpath_fmt+0x48/0x50 + [112065.261922] [<ffffffffa032949e>] ? btrfs_free_path+0x26/0x29 [btrfs] + [112065.262211] [<ffffffffa0325990>] __btrfs_abort_transaction+0x50/0x10b [btrfs] + [112065.262545] [<ffffffffa036b1d6>] btrfs_remove_chunk+0x537/0x58b [btrfs] + [112065.262771] [<ffffffffa033840f>] btrfs_delete_unused_bgs+0x1de/0x21b [btrfs] + [112065.263105] [<ffffffffa0343106>] cleaner_kthread+0x100/0x12f [btrfs] + (...) + [112065.264493] ---[ end trace dd7903a975a31a08 ]--- + [112065.264673] BTRFS: error (device sdc) in btrfs_remove_chunk:2625: errno=-28 No space left + [112065.264997] BTRFS info (device sdc): forced readonly + + 9) The clear kthread sees that the BTRFS_FS_STATE_ERROR bit is set in + fs_info->fs_state and calls btrfs_cleanup_transaction(), which in + turn calls btrfs_destroy_pinned_extent(); + + 10) Then btrfs_destroy_pinned_extent() iterates over all the ranges + marked as dirty in fs_info->freed_extents[], and for each one + it calls discard, if the fs was mounted with "-o discard", and + adds the range to the free space cache of the respective block + group; + + 11) btrfs_trim_block_group(), invoked from the fitrim ioctl code path, + sees the free space entries and performs a discard; + + 12) After an umount and mount (or fsck), our eb's location on disk was full + of zeroes, and it should have been untouched, because it was marked as + dirty in the fs_info->pinned_extents tree, and therefore used by the + trees that the last committed superblock points to. + +Fix this by not performing a discard and not adding the ranges to the free space +caches - it's useless from this point since the fs is now in readonly mode and +we won't write free space caches to disk anymore (otherwise we would leak space) +nor any new superblock. By not adding the ranges to the free space caches, it +prevents other code paths from allocating that space and write to it as well, +therefore being safer and simpler. + +This isn't a new problem, as it's been present since 2011 (git commit +acce952b0263825da32cf10489413dec78053347). + +Signed-off-by: Filipe Manana <[email protected]> +Signed-off-by: Chris Mason <[email protected]> + +--- + fs/btrfs/disk-io.c | 6 ------ + fs/btrfs/extent-tree.c | 10 ++++++---- + 2 files changed, 6 insertions(+), 10 deletions(-) + +--- a/fs/btrfs/disk-io.c ++++ b/fs/btrfs/disk-io.c +@@ -4043,12 +4043,6 @@ again: + if (ret) + break; + +- /* opt_discard */ +- if (btrfs_test_opt(root, DISCARD)) +- ret = btrfs_error_discard_extent(root, start, +- end + 1 - start, +- NULL); +- + clear_extent_dirty(unpin, start, end, GFP_NOFS); + btrfs_error_unpin_extent_range(root, start, end); + cond_resched(); +--- a/fs/btrfs/extent-tree.c ++++ b/fs/btrfs/extent-tree.c +@@ -5690,7 +5690,8 @@ void btrfs_prepare_extent_commit(struct + update_global_block_rsv(fs_info); + } + +-static int unpin_extent_range(struct btrfs_root *root, u64 start, u64 end) ++static int unpin_extent_range(struct btrfs_root *root, u64 start, u64 end, ++ const bool return_free_space) + { + struct btrfs_fs_info *fs_info = root->fs_info; + struct btrfs_block_group_cache *cache = NULL; +@@ -5714,7 +5715,8 @@ static int unpin_extent_range(struct btr + + if (start < cache->last_byte_to_unpin) { + len = min(len, cache->last_byte_to_unpin - start); +- btrfs_add_free_space(cache, start, len); ++ if (return_free_space) ++ btrfs_add_free_space(cache, start, len); + } + + start += len; +@@ -5778,7 +5780,7 @@ int btrfs_finish_extent_commit(struct bt + end + 1 - start, NULL); + + clear_extent_dirty(unpin, start, end, GFP_NOFS); +- unpin_extent_range(root, start, end); ++ unpin_extent_range(root, start, end, true); + cond_resched(); + } + +@@ -9462,7 +9464,7 @@ out: + + int btrfs_error_unpin_extent_range(struct btrfs_root *root, u64 start, u64 end) + { +- return unpin_extent_range(root, start, end); ++ return unpin_extent_range(root, start, end, false); + } + + int btrfs_error_discard_extent(struct btrfs_root *root, u64 bytenr, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-fix-fsync-data-loss-after-adding-hard-link-to-inode.patch new/patches.suse/btrfs-fix-fsync-data-loss-after-adding-hard-link-to-inode.patch --- old/patches.suse/btrfs-fix-fsync-data-loss-after-adding-hard-link-to-inode.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-fix-fsync-data-loss-after-adding-hard-link-to-inode.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,296 @@ +From: Filipe Manana <[email protected]> +Date: Fri, 13 Feb 2015 12:30:56 +0000 +Subject: Btrfs: fix fsync data loss after adding hard link to inode +Git-commit 1a4bcf470c886b955adf36486f4c86f2441d85cb +Patch-mainline: 4.0 + +We have a scenario where after the fsync log replay we can lose file data +that had been previously fsync'ed if we added an hard link for our inode +and after that we sync'ed the fsync log (for example by fsync'ing some +other file or directory). + +This is because when adding an hard link we updated the inode item in the +log tree with an i_size value of 0. At that point the new inode item was +in memory only and a subsequent fsync log replay would not make us lose +the file data. However if after adding the hard link we sync the log tree +to disk, by fsync'ing some other file or directory for example, we ended +up losing the file data after log replay, because the inode item in the +persisted log tree had an an i_size of zero. + +This is easy to reproduce, and the following excerpt from my test for +xfstests shows this: + + _scratch_mkfs >> $seqres.full 2>&1 + _init_flakey + _mount_flakey + + # Create one file with data and fsync it. + # This made the btrfs fsync log persist the data and the inode metadata with + # a correct inode->i_size (4096 bytes). + $XFS_IO_PROG -f -c "pwrite -S 0xaa -b 4K 0 4K" -c "fsync" \ + $SCRATCH_MNT/foo | _filter_xfs_io + + # Now add one hard link to our file. This made the btrfs code update the fsync + # log, in memory only, with an inode metadata having a size of 0. + ln $SCRATCH_MNT/foo $SCRATCH_MNT/foo_link + + # Now force persistence of the fsync log to disk, for example, by fsyncing some + # other file. + touch $SCRATCH_MNT/bar + $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar + + # Before a power loss or crash, we could read the 4Kb of data from our file as + # expected. + echo "File content before:" + od -t x1 $SCRATCH_MNT/foo + + # Simulate a crash/power loss. + _load_flakey_table $FLAKEY_DROP_WRITES + _unmount_flakey + + _load_flakey_table $FLAKEY_ALLOW_WRITES + _mount_flakey + + # After the fsync log replay, because the fsync log had a value of 0 for our + # inode's i_size, we couldn't read anymore the 4Kb of data that we previously + # wrote and fsync'ed. The size of the file became 0 after the fsync log replay. + echo "File content after:" + od -t x1 $SCRATCH_MNT/foo + +Another alternative test, that doesn't need to fsync an inode in the same +transaction it was created, is: + + _scratch_mkfs >> $seqres.full 2>&1 + _init_flakey + _mount_flakey + + # Create our test file with some data. + $XFS_IO_PROG -f -c "pwrite -S 0xaa -b 8K 0 8K" \ + $SCRATCH_MNT/foo | _filter_xfs_io + + # Make sure the file is durably persisted. + sync + + # Append some data to our file, to increase its size. + $XFS_IO_PROG -f -c "pwrite -S 0xcc -b 4K 8K 4K" \ + $SCRATCH_MNT/foo | _filter_xfs_io + + # Fsync the file, so from this point on if a crash/power failure happens, our + # new data is guaranteed to be there next time the fs is mounted. + $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo + + # Add one hard link to our file. This made btrfs write into the in memory fsync + # log a special inode with generation 0 and an i_size of 0 too. Note that this + # didn't update the inode in the fsync log on disk. + ln $SCRATCH_MNT/foo $SCRATCH_MNT/foo_link + + # Now make sure the in memory fsync log is durably persisted. + # Creating and fsync'ing another file will do it. + touch $SCRATCH_MNT/bar + $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar + + # As expected, before the crash/power failure, we should be able to read the + # 12Kb of file data. + echo "File content before:" + od -t x1 $SCRATCH_MNT/foo + + # Simulate a crash/power loss. + _load_flakey_table $FLAKEY_DROP_WRITES + _unmount_flakey + + _load_flakey_table $FLAKEY_ALLOW_WRITES + _mount_flakey + + # After mounting the fs again, the fsync log was replayed. + # The btrfs fsync log replay code didn't update the i_size of the persisted + # inode because the inode item in the log had a special generation with a + # value of 0 (and it couldn't know the correct i_size, since that inode item + # had a 0 i_size too). This made the last 4Kb of file data inaccessible and + # effectively lost. + echo "File content after:" + od -t x1 $SCRATCH_MNT/foo + +This isn't a new issue/regression. This problem has been around since the +log tree code was added in 2008: + + Btrfs: Add a write ahead tree log to optimize synchronous operations + (commit e02119d5a7b4396c5a872582fddc8bd6d305a70a) + +Test cases for xfstests follow soon. + +Signed-off-by: Filipe Manana <[email protected]> +Signed-off-by: Chris Mason <[email protected]> + +--- + fs/btrfs/tree-log.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 73 insertions(+), 9 deletions(-) + +--- a/fs/btrfs/tree-log.c ++++ b/fs/btrfs/tree-log.c +@@ -489,8 +489,20 @@ insert: + src_item = (struct btrfs_inode_item *)src_ptr; + dst_item = (struct btrfs_inode_item *)dst_ptr; + +- if (btrfs_inode_generation(eb, src_item) == 0) ++ if (btrfs_inode_generation(eb, src_item) == 0) { ++ struct extent_buffer *dst_eb = path->nodes[0]; ++ ++ if (S_ISREG(btrfs_inode_mode(eb, src_item)) && ++ S_ISREG(btrfs_inode_mode(dst_eb, dst_item))) { ++ struct btrfs_map_token token; ++ u64 ino_size = btrfs_inode_size(eb, src_item); ++ ++ btrfs_init_map_token(&token); ++ btrfs_set_token_inode_size(dst_eb, dst_item, ++ ino_size, &token); ++ } + goto no_copy; ++ } + + if (overwrite_root && + S_ISDIR(btrfs_inode_mode(eb, src_item)) && +@@ -3241,7 +3253,8 @@ static int drop_objectid_items(struct bt + static void fill_inode_item(struct btrfs_trans_handle *trans, + struct extent_buffer *leaf, + struct btrfs_inode_item *item, +- struct inode *inode, int log_inode_only) ++ struct inode *inode, int log_inode_only, ++ u64 logged_isize) + { + struct btrfs_map_token token; + +@@ -3254,7 +3267,7 @@ static void fill_inode_item(struct btrfs + * to say 'update this inode with these values' + */ + btrfs_set_token_inode_generation(leaf, item, 0, &token); +- btrfs_set_token_inode_size(leaf, item, 0, &token); ++ btrfs_set_token_inode_size(leaf, item, logged_isize, &token); + } else { + btrfs_set_token_inode_generation(leaf, item, + BTRFS_I(inode)->generation, +@@ -3306,7 +3319,7 @@ static int log_inode_item(struct btrfs_t + return ret; + inode_item = btrfs_item_ptr(path->nodes[0], path->slots[0], + struct btrfs_inode_item); +- fill_inode_item(trans, path->nodes[0], inode_item, inode, 0); ++ fill_inode_item(trans, path->nodes[0], inode_item, inode, 0, 0); + btrfs_release_path(path); + return 0; + } +@@ -3315,7 +3328,8 @@ static noinline int copy_items(struct bt + struct inode *inode, + struct btrfs_path *dst_path, + struct btrfs_path *src_path, u64 *last_extent, +- int start_slot, int nr, int inode_only) ++ int start_slot, int nr, int inode_only, ++ u64 logged_isize) + { + unsigned long src_offset; + unsigned long dst_offset; +@@ -3372,7 +3386,8 @@ static noinline int copy_items(struct bt + dst_path->slots[0], + struct btrfs_inode_item); + fill_inode_item(trans, dst_path->nodes[0], inode_item, +- inode, inode_only == LOG_INODE_EXISTS); ++ inode, inode_only == LOG_INODE_EXISTS, ++ logged_isize); + } else { + copy_extent_buffer(dst_path->nodes[0], src, dst_offset, + src_offset, ins_sizes[i]); +@@ -3877,6 +3892,33 @@ process: + return ret; + } + ++static int logged_inode_size(struct btrfs_root *log, struct inode *inode, ++ struct btrfs_path *path, u64 *size_ret) ++{ ++ struct btrfs_key key; ++ int ret; ++ ++ key.objectid = btrfs_ino(inode); ++ key.type = BTRFS_INODE_ITEM_KEY; ++ key.offset = 0; ++ ++ ret = btrfs_search_slot(NULL, log, &key, path, 0, 0); ++ if (ret < 0) { ++ return ret; ++ } else if (ret > 0) { ++ *size_ret = i_size_read(inode); ++ } else { ++ struct btrfs_inode_item *item; ++ ++ item = btrfs_item_ptr(path->nodes[0], path->slots[0], ++ struct btrfs_inode_item); ++ *size_ret = btrfs_inode_size(path->nodes[0], item); ++ } ++ ++ btrfs_release_path(path); ++ return 0; ++} ++ + /* log a single inode in the tree log. + * At least one parent directory for this inode must exist in the tree + * or be logged already. +@@ -3913,6 +3955,7 @@ static int btrfs_log_inode(struct btrfs_ + bool fast_search = false; + u64 ino = btrfs_ino(inode); + struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; ++ u64 logged_isize = 0; + + path = btrfs_alloc_path(); + if (!path) +@@ -3973,6 +4016,25 @@ static int btrfs_log_inode(struct btrfs_ + max_key_type = BTRFS_XATTR_ITEM_KEY; + ret = drop_objectid_items(trans, log, path, ino, max_key_type); + } else { ++ if (inode_only == LOG_INODE_EXISTS) { ++ /* ++ * Make sure the new inode item we write to the log has ++ * the same isize as the current one (if it exists). ++ * This is necessary to prevent data loss after log ++ * replay, and also to prevent doing a wrong expanding ++ * truncate - for e.g. create file, write 4K into offset ++ * 0, fsync, write 4K into offset 4096, add hard link, ++ * fsync some other file (to sync log), power fail - if ++ * we use the inode's current i_size, after log replay ++ * we get a 8Kb file, with the last 4Kb extent as a hole ++ * (zeroes), as if an expanding truncate happened, ++ * instead of getting a file of 4Kb only. ++ */ ++ err = logged_inode_size(log, inode, path, ++ &logged_isize); ++ if (err) ++ goto out_unlock; ++ } + if (test_and_clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC, + &BTRFS_I(inode)->runtime_flags)) { + clear_bit(BTRFS_INODE_COPY_EVERYTHING, +@@ -4029,7 +4091,8 @@ again: + } + + ret = copy_items(trans, inode, dst_path, path, &last_extent, +- ins_start_slot, ins_nr, inode_only); ++ ins_start_slot, ins_nr, inode_only, ++ logged_isize); + if (ret < 0) { + err = ret; + goto out_unlock; +@@ -4052,7 +4115,7 @@ next_slot: + if (ins_nr) { + ret = copy_items(trans, inode, dst_path, path, + &last_extent, ins_start_slot, +- ins_nr, inode_only); ++ ins_nr, inode_only, logged_isize); + if (ret < 0) { + err = ret; + goto out_unlock; +@@ -4073,7 +4136,8 @@ next_slot: + } + if (ins_nr) { + ret = copy_items(trans, inode, dst_path, path, &last_extent, +- ins_start_slot, ins_nr, inode_only); ++ ins_start_slot, ins_nr, inode_only, ++ logged_isize); + if (ret < 0) { + err = ret; + goto out_unlock; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-fix-leak-of-path-in-btrfs_find_item.patch new/patches.suse/btrfs-fix-leak-of-path-in-btrfs_find_item.patch --- old/patches.suse/btrfs-fix-leak-of-path-in-btrfs_find_item.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-fix-leak-of-path-in-btrfs_find_item.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,109 @@ +From: David Sterba <[email protected]> +Date: Fri, 2 Jan 2015 18:45:16 +0100 +Subject: btrfs: fix leak of path in btrfs_find_item +Git-commit: 381cf6587f8a8a8e981bc0c1aaaa8859b51dc756 +Patch-mainline: 4.0 + +If btrfs_find_item is called with NULL path it allocates one locally but +does not free it. Affected paths are inserting an orphan item for a file +and for a subvol root. + +Move the path allocation to the callers. + +Fixes: 3f870c289900 ("btrfs: expand btrfs_find_item() to include find_orphan_item functionality") +Signed-off-by: David Sterba <[email protected]> + +--- + fs/btrfs/ctree.c | 17 ++++------------- + fs/btrfs/disk-io.c | 9 ++++++++- + fs/btrfs/tree-log.c | 11 ++++++++++- + 3 files changed, 22 insertions(+), 15 deletions(-) + +--- a/fs/btrfs/ctree.c ++++ b/fs/btrfs/ctree.c +@@ -2617,32 +2617,23 @@ static int key_search(struct extent_buff + return 0; + } + +-int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *found_path, ++int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *path, + u64 iobjectid, u64 ioff, u8 key_type, + struct btrfs_key *found_key) + { + int ret; + struct btrfs_key key; + struct extent_buffer *eb; +- struct btrfs_path *path; ++ ++ ASSERT(path); + + key.type = key_type; + key.objectid = iobjectid; + key.offset = ioff; + +- if (found_path == NULL) { +- path = btrfs_alloc_path(); +- if (!path) +- return -ENOMEM; +- } else +- path = found_path; +- + ret = btrfs_search_slot(NULL, fs_root, &key, path, 0, 0); +- if ((ret < 0) || (found_key == NULL)) { +- if (path != found_path) +- btrfs_free_path(path); ++ if ((ret < 0) || (found_key == NULL)) + return ret; +- } + + eb = path->nodes[0]; + if (ret && path->slots[0] >= btrfs_header_nritems(eb)) { +--- a/fs/btrfs/disk-io.c ++++ b/fs/btrfs/disk-io.c +@@ -1627,6 +1627,7 @@ struct btrfs_root *btrfs_get_fs_root(str + bool check_ref) + { + struct btrfs_root *root; ++ struct btrfs_path *path; + int ret; + + if (location->objectid == BTRFS_ROOT_TREE_OBJECTID) +@@ -1666,8 +1667,14 @@ again: + if (ret) + goto fail; + +- ret = btrfs_find_item(fs_info->tree_root, NULL, BTRFS_ORPHAN_OBJECTID, ++ path = btrfs_alloc_path(); ++ if (!path) { ++ ret = -ENOMEM; ++ goto fail; ++ } ++ ret = btrfs_find_item(fs_info->tree_root, path, BTRFS_ORPHAN_OBJECTID, + location->objectid, BTRFS_ORPHAN_ITEM_KEY, NULL); ++ btrfs_free_path(path); + if (ret < 0) + goto fail; + if (ret == 0) +--- a/fs/btrfs/tree-log.c ++++ b/fs/btrfs/tree-log.c +@@ -1270,10 +1270,19 @@ static int insert_orphan_item(struct btr + struct btrfs_root *root, u64 offset) + { + int ret; +- ret = btrfs_find_item(root, NULL, BTRFS_ORPHAN_OBJECTID, ++ struct btrfs_path *path; ++ ++ path = btrfs_alloc_path(); ++ if (!path) ++ return -ENOMEM; ++ ++ ret = btrfs_find_item(root, path, BTRFS_ORPHAN_OBJECTID, + offset, BTRFS_ORPHAN_ITEM_KEY, NULL); + if (ret > 0) + ret = btrfs_insert_orphan_item(trans, root, offset); ++ ++ btrfs_free_path(path); ++ + return ret; + } + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-fix-lost-return-value-due-to-variable-shadowing.patch new/patches.suse/btrfs-fix-lost-return-value-due-to-variable-shadowing.patch --- old/patches.suse/btrfs-fix-lost-return-value-due-to-variable-shadowing.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-fix-lost-return-value-due-to-variable-shadowing.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,27 @@ +From: David Sterba <[email protected]> +Date: Tue, 24 Feb 2015 18:57:18 +0100 +Subject: btrfs: fix lost return value due to variable shadowing +Git-commit: 1932b7be973b554ffe20a5bba6ffaed6fa995cdc +Patch-mainline: 4.0 + +A block-local variable stores error code but btrfs_get_blocks_direct may +not return it in the end as there's a ret defined in the function scope. + +Fixes: d187663ef24c ("Btrfs: lock extents as we map them in DIO") +Signed-off-by: David Sterba <[email protected]> +Signed-off-by: Chris Mason <[email protected]> + +--- + fs/btrfs/inode.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/fs/btrfs/inode.c ++++ b/fs/btrfs/inode.c +@@ -7093,7 +7093,6 @@ static int btrfs_get_blocks_direct(struc + ((BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW) && + em->block_start != EXTENT_MAP_HOLE)) { + int type; +- int ret; + u64 block_start, orig_start, orig_block_len, ram_bytes; + + if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-make-sure-we-wait-on-logged-extents-when-fsycning-two-subvols.patch new/patches.suse/btrfs-make-sure-we-wait-on-logged-extents-when-fsycning-two-subvols.patch --- old/patches.suse/btrfs-make-sure-we-wait-on-logged-extents-when-fsycning-two-subvols.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-make-sure-we-wait-on-logged-extents-when-fsycning-two-subvols.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,34 @@ +From: Josef Bacik <[email protected]> +Date: Thu, 6 Nov 2014 10:19:54 -0500 +Subject: Btrfs: make sure we wait on logged extents when fsycning two subvols +Git-commit: 9dba8cf128ef98257ca719722280c9634e7e9dc7 +Patch-mainline: 3.19 + +If we have two fsync()'s race on different subvols one will do all of its work +to get into the log_tree, wait on it's outstanding IO, and then allow the +log_tree to finish it's commit. The problem is we were just free'ing that +subvols logged extents instead of waiting on them, so whoever lost the race +wouldn't really have their data on disk. Fix this by waiting properly instead +of freeing the logged extents. Thanks, + +Signed-off-by: Josef Bacik <[email protected]> +Signed-off-by: Chris Mason <[email protected]> +Signed-off-by: David Sterba <[email protected]> + +--- + fs/btrfs/tree-log.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/fs/btrfs/tree-log.c ++++ b/fs/btrfs/tree-log.c +@@ -2651,9 +2651,9 @@ int btrfs_sync_log(struct btrfs_trans_ha + if (atomic_read(&log_root_tree->log_commit[index2])) { + blk_finish_plug(&plug); + btrfs_wait_marked_extents(log, &log->dirty_log_pages, mark); ++ btrfs_wait_logged_extents(log, log_transid); + wait_log_commit(trans, log_root_tree, + root_log_ctx.log_transid); +- btrfs_free_logged_extents(log, log_transid); + mutex_unlock(&log_root_tree->log_mutex); + ret = root_log_ctx.log_ret; + goto out; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-set-proper-message-level-for-skinny-metadata.patch new/patches.suse/btrfs-set-proper-message-level-for-skinny-metadata.patch --- old/patches.suse/btrfs-set-proper-message-level-for-skinny-metadata.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-set-proper-message-level-for-skinny-metadata.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,27 @@ +From: David Sterba <[email protected]> +Date: Fri, 19 Dec 2014 18:38:47 +0100 +Subject: btrfs: set proper message level for skinny metadata +Git-commit: 5efa0490cc94aee06cd8d282683e22a8ce0a0026 +Patch-mainline: 4.0 + +This has been confusing people for too long, the message is really just +informative. + +Signed-off-by: David Sterba <[email protected]> +Signed-off-by: Chris Mason <[email protected]> + +--- + fs/btrfs/disk-io.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/fs/btrfs/disk-io.c ++++ b/fs/btrfs/disk-io.c +@@ -2499,7 +2499,7 @@ int open_ctree(struct super_block *sb, + features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO; + + if (features & BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA) +- printk(KERN_ERR "BTRFS: has skinny extents\n"); ++ printk(KERN_INFO "BTRFS: has skinny extents\n"); + + /* + * flag our filesystem as having big metadata blocks if diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/patches.suse/btrfs-simplify-insert_orphan_item.patch new/patches.suse/btrfs-simplify-insert_orphan_item.patch --- old/patches.suse/btrfs-simplify-insert_orphan_item.patch 1970-01-01 01:00:00.000000000 +0100 +++ new/patches.suse/btrfs-simplify-insert_orphan_item.patch 2015-04-08 16:20:23.000000000 +0200 @@ -0,0 +1,46 @@ +From: David Sterba <[email protected]> +Date: Fri, 2 Jan 2015 19:12:57 +0100 +Subject: [PATCH 13/97] btrfs: simplify insert_orphan_item +References: boo#926385 +Git-commit: 9c4f61f01d269815bb7c37be3ede59c5587747c6 +Patch-mainline: 4.0 + +We can search and add the orphan item in one go, +btrfs_insert_orphan_item will find out if the item already exists. + +[Bug introduced in 3.19.1 stable, depends on +381cf6587f8a8a8e981bc0c1aaaa8859b51dc756 ] + +Signed-off-by: David Sterba <[email protected]> +--- + fs/btrfs/tree-log.c | 16 ++++------------ + 1 file changed, 4 insertions(+), 12 deletions(-) + +--- a/fs/btrfs/tree-log.c ++++ b/fs/btrfs/tree-log.c +@@ -1267,21 +1267,13 @@ out: + } + + static int insert_orphan_item(struct btrfs_trans_handle *trans, +- struct btrfs_root *root, u64 offset) ++ struct btrfs_root *root, u64 ino) + { + int ret; +- struct btrfs_path *path; + +- path = btrfs_alloc_path(); +- if (!path) +- return -ENOMEM; +- +- ret = btrfs_find_item(root, path, BTRFS_ORPHAN_OBJECTID, +- offset, BTRFS_ORPHAN_ITEM_KEY, NULL); +- if (ret > 0) +- ret = btrfs_insert_orphan_item(trans, root, offset); +- +- btrfs_free_path(path); ++ ret = btrfs_insert_orphan_item(trans, root, ino); ++ if (ret == -EEXIST) ++ ret = 0; + + return ret; + } ++++++ series.conf ++++++ --- /var/tmp/diff_new_pack.XMEq6X/_old 2015-04-22 13:19:53.000000000 +0200 +++ /var/tmp/diff_new_pack.XMEq6X/_new 2015-04-22 13:19:53.000000000 +0200 @@ -134,9 +134,12 @@ # bsc#917839, CVE-2015-1593 patches.fixes/x86-mm-aslr-fix-stack-randomization-on-64-bit-systems.patch - # bsc#922944 + # bsc#922944, CVE-2015-2666 patches.arch/x86-microcode-intel-guard-against-stack-overflow-in-the-loader.patch + # bsc#926240, CVE-2015-2830 + patches.arch/x86-asm-entry-64-remove-a-bogus-ret_from_fork-optimization.patch + ######################################################## # x86 MCE/MCA (Machine Check Error/Architecture) extensions ######################################################## @@ -234,6 +237,8 @@ patches.arch/arm64-0037-drivers-net-fddi-skfp-h-skfbi.h-Remove-useless-PCI_B.patch patches.arch/arm64-0038-arm64-mustang-Disable-sgenet-and-xgenet.patch patches.arch/arm64-0039-generic-pci.patch + patches.arch/arm64-Enable-CONFIG_COMPAT-also-for-64k-page-size.patch + patches.arch/arm64-fix-mmap2-compat-syscall.patch ######################################################## # S/390 @@ -251,6 +256,7 @@ # fix deadlock in dentry tree traversal (bnc#903640) patches.fixes/move-d_rcu-from-overlapping-d_child-to-overlapping-d.patch + patches.fixes/kabi-fix-for-move-d_rcu.patch patches.fixes/deal-with-deadlock-in-d_walk.patch # @@ -309,6 +315,7 @@ patches.fixes/net-sctp-fix-panic-on-duplicate-ASCONF-chunks.patch patches.fixes/net-sctp-fix-remote-memory-pressure-from-excessive-q.patch patches.fixes/net-sctp-fix-slab-corruption-from-use-after-free-on-INIT.patch + patches.fixes/net-rds-use-correct-size-for-max-unacked-packets-and.patch ######################################################## # NFS @@ -345,6 +352,8 @@ patches.fixes/ext4-limit-number-of-scanned-extents-in-status-tree.patch patches.fixes/ext4-cleanup-flag-definitions-for-extent-status-tre.patch patches.fixes/ext4-introduce-aging-to-extent-status-tree.patch + patches.fixes/ext4-fix-ZERO_RANGE-bug-hidden-by-flag-aliasing.patch + patches.fixes/ext4-allocate-entire-range-in-zero-range.patch ######################################################## # btrfs @@ -396,6 +405,18 @@ patches.suse/btrfs-0057-fix-fsync-log-replay-for-inodes-with-a-mix-of-.patch patches.suse/btrfs-0058-fix-setup_leaf_for_split-to-avoid-leaf-corrupt.patch patches.suse/btrfs-0059-fix-scrub-race-leading-to-use-after-free.patch + patches.fixes/btrfs-fix-inode-eviction-infinite-loop-after-cloning.patch + patches.suse/btrfs-__add_inode_ref-out-of-bounds-memory-read-when-looking-for-extended-ref.patch + patches.suse/btrfs-do-not-move-em-to-modified-list-when-unpinning.patch + patches.suse/btrfs-don-t-delay-inode-ref-updates-during-log-replay.patch + patches.suse/btrfs-fix-data-loss-in-the-fast-fsync-path.patch + patches.suse/btrfs-fix-fs-corruption-on-transaction-abort-if-device-supports-discard.patch + patches.suse/btrfs-fix-fsync-data-loss-after-adding-hard-link-to-inode.patch + patches.suse/btrfs-fix-leak-of-path-in-btrfs_find_item.patch + patches.suse/btrfs-fix-lost-return-value-due-to-variable-shadowing.patch + patches.suse/btrfs-make-sure-we-wait-on-logged-extents-when-fsycning-two-subvols.patch + patches.suse/btrfs-set-proper-message-level-for-skinny-metadata.patch + patches.suse/btrfs-simplify-insert_orphan_item.patch ######################################################## # Reiserfs Patches @@ -435,6 +456,9 @@ # bsc#907988 libvirt containers with user namespaces can't start patches.suse/0001-mnt-Implicitly-add-MNT_NODEV-on-remount-when-it-was-.patch + # bsc#918333, CVE-2014-9683 + patches.fixes/ecryptfs-remove-buggy-and-unnecessary-write-in-file-name-decode-routine.patch + ######################################################## # Overlayfs ######################################################## @@ -609,6 +633,7 @@ patches.drivers/Input-synaptics-add-min-max-quirk-for-Lenovo-T440s patches.drivers/Input-synaptics-gate-forcepad-support-by-DMI-check patches.fixes/input-evdev-fix-EVIOCG-type-ioctl.patch + patches.drivers/0001-Input-xpad-use-proper-endpoint-type.patch ########################################################## # Sound @@ -708,6 +733,8 @@ # md ######################################################## + patches.fixes/0001-md-don-t-require-sync_min-to-be-a-multiple-of-chunk_.patch + ########################################################## # # Security stuff ++++++ source-timestamp ++++++ --- /var/tmp/diff_new_pack.XMEq6X/_old 2015-04-22 13:19:53.000000000 +0200 +++ /var/tmp/diff_new_pack.XMEq6X/_new 2015-04-22 13:19:53.000000000 +0200 @@ -1,3 +1,3 @@ -2015-03-18 18:31:15 +0100 -GIT Revision: ba2afaba88645e6b75094d510bdf9ad00937b0ff +2015-04-14 09:11:37 +0200 +GIT Revision: 93c1539cb66bb767ff80a01d467cd6c4c3297366 GIT Branch: openSUSE-13.2
