]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Jul 2017 14:48:19 +0000 (16:48 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Jul 2017 14:48:19 +0000 (16:48 +0200)
added patches:
crypto-caam-fix-gfp-allocation-flags-part-i.patch
crypto-rsa-pkcs1pad-use-constant-time-memory-comparison-for-macs.patch
ext4-check-return-value-of-kstrtoull-correctly-in-reserved_clusters_store.patch
saa7134-fix-warm-medion-7134-eeprom-read.patch
staging-comedi-fix-clean-up-of-comedi_class-in-comedi_init.patch
x86-mm-pat-don-t-report-pat-on-cpus-that-don-t-support-it.patch

queue-4.9/crypto-caam-fix-gfp-allocation-flags-part-i.patch [new file with mode: 0644]
queue-4.9/crypto-rsa-pkcs1pad-use-constant-time-memory-comparison-for-macs.patch [new file with mode: 0644]
queue-4.9/ext4-check-return-value-of-kstrtoull-correctly-in-reserved_clusters_store.patch [new file with mode: 0644]
queue-4.9/saa7134-fix-warm-medion-7134-eeprom-read.patch [new file with mode: 0644]
queue-4.9/series
queue-4.9/staging-comedi-fix-clean-up-of-comedi_class-in-comedi_init.patch [new file with mode: 0644]
queue-4.9/x86-mm-pat-don-t-report-pat-on-cpus-that-don-t-support-it.patch [new file with mode: 0644]

diff --git a/queue-4.9/crypto-caam-fix-gfp-allocation-flags-part-i.patch b/queue-4.9/crypto-caam-fix-gfp-allocation-flags-part-i.patch
new file mode 100644 (file)
index 0000000..8153b2f
--- /dev/null
@@ -0,0 +1,48 @@
+From 42cfcafb91dabb0f9d9e08396c39824535948c67 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Horia=20Geant=C4=83?= <horia.geanta@nxp.com>
+Date: Mon, 19 Jun 2017 11:44:45 +0300
+Subject: crypto: caam - fix gfp allocation flags (part I)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Horia Geantă <horia.geanta@nxp.com>
+
+commit 42cfcafb91dabb0f9d9e08396c39824535948c67 upstream.
+
+Changes in the SW cts (ciphertext stealing) code in
+commit 0605c41cc53ca ("crypto: cts - Convert to skcipher")
+revealed a problem in the CAAM driver:
+when cts(cbc(aes)) is executed and cts runs in SW,
+cbc(aes) is offloaded in CAAM; cts encrypts the last block
+in atomic context and CAAM incorrectly decides to use GFP_KERNEL
+for memory allocation.
+
+Fix this by allowing GFP_KERNEL (sleeping) only when MAY_SLEEP flag is
+set, i.e. remove MAY_BACKLOG flag.
+
+We split the fix in two parts - first is sent to -stable, while the
+second is not (since there is no known failure case).
+
+Link: http://lkml.kernel.org/g/20170602122446.2427-1-david@sigma-star.at
+Reported-by: David Gstir <david@sigma-star.at>
+Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/crypto/caam/caamalg.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/crypto/caam/caamalg.c
++++ b/drivers/crypto/caam/caamalg.c
+@@ -2601,8 +2601,7 @@ static struct ablkcipher_edesc *ablkciph
+       struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req);
+       struct caam_ctx *ctx = crypto_ablkcipher_ctx(ablkcipher);
+       struct device *jrdev = ctx->jrdev;
+-      gfp_t flags = (req->base.flags & (CRYPTO_TFM_REQ_MAY_BACKLOG |
+-                                        CRYPTO_TFM_REQ_MAY_SLEEP)) ?
++      gfp_t flags = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
+                      GFP_KERNEL : GFP_ATOMIC;
+       int src_nents, dst_nents = 0, sec4_sg_bytes;
+       struct ablkcipher_edesc *edesc;
diff --git a/queue-4.9/crypto-rsa-pkcs1pad-use-constant-time-memory-comparison-for-macs.patch b/queue-4.9/crypto-rsa-pkcs1pad-use-constant-time-memory-comparison-for-macs.patch
new file mode 100644 (file)
index 0000000..da8141b
--- /dev/null
@@ -0,0 +1,36 @@
+From fec17cb2231733174e039ad9054fa16bb358e2ec Mon Sep 17 00:00:00 2001
+From: "Jason A. Donenfeld" <Jason@zx2c4.com>
+Date: Sun, 11 Jun 2017 23:20:23 +0200
+Subject: crypto: rsa-pkcs1pad - use constant time memory comparison for MACs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Jason A. Donenfeld <Jason@zx2c4.com>
+
+commit fec17cb2231733174e039ad9054fa16bb358e2ec upstream.
+
+Otherwise, we enable all sorts of forgeries via timing attack.
+
+Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
+Suggested-by: Stephan Müller <smueller@chronox.de>
+Cc: Herbert Xu <herbert@gondor.apana.org.au>
+Cc: linux-crypto@vger.kernel.org
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ crypto/rsa-pkcs1pad.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/crypto/rsa-pkcs1pad.c
++++ b/crypto/rsa-pkcs1pad.c
+@@ -496,7 +496,7 @@ static int pkcs1pad_verify_complete(stru
+               goto done;
+       pos++;
+-      if (memcmp(out_buf + pos, digest_info->data, digest_info->size))
++      if (crypto_memneq(out_buf + pos, digest_info->data, digest_info->size))
+               goto done;
+       pos += digest_info->size;
diff --git a/queue-4.9/ext4-check-return-value-of-kstrtoull-correctly-in-reserved_clusters_store.patch b/queue-4.9/ext4-check-return-value-of-kstrtoull-correctly-in-reserved_clusters_store.patch
new file mode 100644 (file)
index 0000000..1c678fa
--- /dev/null
@@ -0,0 +1,34 @@
+From 1ea1516fbbab2b30bf98c534ecaacba579a35208 Mon Sep 17 00:00:00 2001
+From: Chao Yu <yuchao0@huawei.com>
+Date: Fri, 23 Jun 2017 01:08:22 -0400
+Subject: ext4: check return value of kstrtoull correctly in reserved_clusters_store
+
+From: Chao Yu <yuchao0@huawei.com>
+
+commit 1ea1516fbbab2b30bf98c534ecaacba579a35208 upstream.
+
+kstrtoull returns 0 on success, however, in reserved_clusters_store we
+will return -EINVAL if kstrtoull returns 0, it makes us fail to update
+reserved_clusters value through sysfs.
+
+Fixes: 76d33bca5581b1dd5c3157fa168db849a784ada4
+Signed-off-by: Chao Yu <yuchao0@huawei.com>
+Signed-off-by: Miao Xie <miaoxie@huawei.com>
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/ext4/sysfs.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/ext4/sysfs.c
++++ b/fs/ext4/sysfs.c
+@@ -100,7 +100,7 @@ static ssize_t reserved_clusters_store(s
+       int ret;
+       ret = kstrtoull(skip_spaces(buf), 0, &val);
+-      if (!ret || val >= clusters)
++      if (ret || val >= clusters)
+               return -EINVAL;
+       atomic64_set(&sbi->s_resv_clusters, val);
diff --git a/queue-4.9/saa7134-fix-warm-medion-7134-eeprom-read.patch b/queue-4.9/saa7134-fix-warm-medion-7134-eeprom-read.patch
new file mode 100644 (file)
index 0000000..e94e680
--- /dev/null
@@ -0,0 +1,73 @@
+From 5a91206ff0d0548939f3e85a65fb76b400fb0e89 Mon Sep 17 00:00:00 2001
+From: "Maciej S. Szmigiero" <mail@maciej.szmigiero.name>
+Date: Sat, 2 Jul 2016 20:27:46 -0300
+Subject: [media] saa7134: fix warm Medion 7134 EEPROM read
+
+From: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
+
+commit 5a91206ff0d0548939f3e85a65fb76b400fb0e89 upstream.
+
+When saa7134 module driving a Medion 7134 card is reloaded reads of this
+card EEPROM (required for automatic detection of tuner model) will be
+corrupted due to I2C gate in DVB-T demod being left closed.
+This sometimes also happens on first saa7134 module load after a warm
+reboot.
+
+Fix this by opening this I2C gate before doing EEPROM read during i2c
+initialization.
+
+Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
+Cc: Oliver Hartkopp <socketcan@hartkopp.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/media/pci/saa7134/saa7134-i2c.c |   31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
+
+--- a/drivers/media/pci/saa7134/saa7134-i2c.c
++++ b/drivers/media/pci/saa7134/saa7134-i2c.c
+@@ -355,12 +355,43 @@ static struct i2c_client saa7134_client_
+ /* ----------------------------------------------------------- */
++/* On Medion 7134 reading EEPROM needs DVB-T demod i2c gate open */
++static void saa7134_i2c_eeprom_md7134_gate(struct saa7134_dev *dev)
++{
++      u8 subaddr = 0x7, dmdregval;
++      u8 data[2];
++      int ret;
++      struct i2c_msg i2cgatemsg_r[] = { {.addr = 0x08, .flags = 0,
++                                         .buf = &subaddr, .len = 1},
++                                        {.addr = 0x08,
++                                         .flags = I2C_M_RD,
++                                         .buf = &dmdregval, .len = 1}
++                                      };
++      struct i2c_msg i2cgatemsg_w[] = { {.addr = 0x08, .flags = 0,
++                                         .buf = data, .len = 2} };
++
++      ret = i2c_transfer(&dev->i2c_adap, i2cgatemsg_r, 2);
++      if ((ret == 2) && (dmdregval & 0x2)) {
++              pr_debug("%s: DVB-T demod i2c gate was left closed\n",
++                       dev->name);
++
++              data[0] = subaddr;
++              data[1] = (dmdregval & ~0x2);
++              if (i2c_transfer(&dev->i2c_adap, i2cgatemsg_w, 1) != 1)
++                      pr_err("%s: EEPROM i2c gate open failure\n",
++                        dev->name);
++      }
++}
++
+ static int
+ saa7134_i2c_eeprom(struct saa7134_dev *dev, unsigned char *eedata, int len)
+ {
+       unsigned char buf;
+       int i,err;
++      if (dev->board == SAA7134_BOARD_MD7134)
++              saa7134_i2c_eeprom_md7134_gate(dev);
++
+       dev->i2c_client.addr = 0xa0 >> 1;
+       buf = 0;
+       if (1 != (err = i2c_master_send(&dev->i2c_client,&buf,1))) {
index e4959702a871a3f03e8202de8cba9a2841ef5b5c..8df7bdaad0f601f3691ecf2809c2d39119901248 100644 (file)
@@ -17,3 +17,9 @@ md-fix-incorrect-use-of-lexx_to_cpu-in-does_sb_need_changing.patch
 md-fix-super_offset-endianness-in-super_1_rdev_size_change.patch
 locking-rwsem-spinlock-fix-eintr-branch-in-__down_write_common.patch
 staging-vt6556-vnt_start-fix-missing-call-to-vnt_key_init_table.patch
+staging-comedi-fix-clean-up-of-comedi_class-in-comedi_init.patch
+crypto-caam-fix-gfp-allocation-flags-part-i.patch
+crypto-rsa-pkcs1pad-use-constant-time-memory-comparison-for-macs.patch
+ext4-check-return-value-of-kstrtoull-correctly-in-reserved_clusters_store.patch
+x86-mm-pat-don-t-report-pat-on-cpus-that-don-t-support-it.patch
+saa7134-fix-warm-medion-7134-eeprom-read.patch
diff --git a/queue-4.9/staging-comedi-fix-clean-up-of-comedi_class-in-comedi_init.patch b/queue-4.9/staging-comedi-fix-clean-up-of-comedi_class-in-comedi_init.patch
new file mode 100644 (file)
index 0000000..ee312cd
--- /dev/null
@@ -0,0 +1,35 @@
+From a9332e9ad09c2644c99058fcf6ae2f355e93ce74 Mon Sep 17 00:00:00 2001
+From: Ian Abbott <abbotti@mev.co.uk>
+Date: Fri, 16 Jun 2017 19:35:34 +0100
+Subject: staging: comedi: fix clean-up of comedi_class in comedi_init()
+
+From: Ian Abbott <abbotti@mev.co.uk>
+
+commit a9332e9ad09c2644c99058fcf6ae2f355e93ce74 upstream.
+
+There is a clean-up bug in the core comedi module initialization
+functions, `comedi_init()`.  If the `comedi_num_legacy_minors` module
+parameter is non-zero (and valid), it creates that many "legacy" devices
+and registers them in SysFS.  A failure causes the function to clean up
+and return an error.  Unfortunately, it fails to destroy the "comedi"
+class that was created earlier.  Fix it by adding a call to
+`class_destroy(comedi_class)` at the appropriate place in the clean-up
+sequence.
+
+Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/staging/comedi/comedi_fops.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/staging/comedi/comedi_fops.c
++++ b/drivers/staging/comedi/comedi_fops.c
+@@ -2908,6 +2908,7 @@ static int __init comedi_init(void)
+               dev = comedi_alloc_board_minor(NULL);
+               if (IS_ERR(dev)) {
+                       comedi_cleanup_board_minors();
++                      class_destroy(comedi_class);
+                       cdev_del(&comedi_cdev);
+                       unregister_chrdev_region(MKDEV(COMEDI_MAJOR, 0),
+                                                COMEDI_NUM_MINORS);
diff --git a/queue-4.9/x86-mm-pat-don-t-report-pat-on-cpus-that-don-t-support-it.patch b/queue-4.9/x86-mm-pat-don-t-report-pat-on-cpus-that-don-t-support-it.patch
new file mode 100644 (file)
index 0000000..056ad88
--- /dev/null
@@ -0,0 +1,169 @@
+From 99c13b8c8896d7bcb92753bf0c63a8de4326e78d Mon Sep 17 00:00:00 2001
+From: Mikulas Patocka <mpatocka@redhat.com>
+Date: Tue, 4 Jul 2017 19:04:23 -0400
+Subject: x86/mm/pat: Don't report PAT on CPUs that don't support it
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+commit 99c13b8c8896d7bcb92753bf0c63a8de4326e78d upstream.
+
+The pat_enabled() logic is broken on CPUs which do not support PAT and
+where the initialization code fails to call pat_init(). Due to that the
+enabled flag stays true and pat_enabled() returns true wrongfully.
+
+As a consequence the mappings, e.g. for Xorg, are set up with the wrong
+caching mode and the required MTRR setups are omitted.
+
+To cure this the following changes are required:
+
+  1) Make pat_enabled() return true only if PAT initialization was
+     invoked and successful.
+
+  2) Invoke init_cache_modes() unconditionally in setup_arch() and
+     remove the extra callsites in pat_disable() and the pat disabled
+     code path in pat_init().
+
+Also rename __pat_enabled to pat_disabled to reflect the real purpose of
+this variable.
+
+Fixes: 9cd25aac1f44 ("x86/mm/pat: Emulate PAT when it is disabled")
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Bernhard Held <berny156@gmx.de>
+Cc: Denys Vlasenko <dvlasenk@redhat.com>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Brian Gerst <brgerst@gmail.com>
+Cc: "Luis R. Rodriguez" <mcgrof@suse.com>
+Cc: Borislav Petkov <bp@alien8.de>
+Cc: Andy Lutomirski <luto@kernel.org>
+Cc: Josh Poimboeuf <jpoimboe@redhat.com>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Link: http://lkml.kernel.org/r/alpine.LRH.2.02.1707041749300.3456@file01.intranet.prod.int.rdu2.redhat.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/include/asm/pat.h |    1 +
+ arch/x86/kernel/setup.c    |    7 +++++++
+ arch/x86/mm/pat.c          |   28 ++++++++++++----------------
+ 3 files changed, 20 insertions(+), 16 deletions(-)
+
+--- a/arch/x86/include/asm/pat.h
++++ b/arch/x86/include/asm/pat.h
+@@ -7,6 +7,7 @@
+ bool pat_enabled(void);
+ void pat_disable(const char *reason);
+ extern void pat_init(void);
++extern void init_cache_modes(void);
+ extern int reserve_memtype(u64 start, u64 end,
+               enum page_cache_mode req_pcm, enum page_cache_mode *ret_pcm);
+--- a/arch/x86/kernel/setup.c
++++ b/arch/x86/kernel/setup.c
+@@ -1054,6 +1054,13 @@ void __init setup_arch(char **cmdline_p)
+       max_possible_pfn = max_pfn;
+       /*
++       * This call is required when the CPU does not support PAT. If
++       * mtrr_bp_init() invoked it already via pat_init() the call has no
++       * effect.
++       */
++      init_cache_modes();
++
++      /*
+        * Define random base addresses for memory sections after max_pfn is
+        * defined and before each memory section base is used.
+        */
+--- a/arch/x86/mm/pat.c
++++ b/arch/x86/mm/pat.c
+@@ -36,14 +36,14 @@
+ #undef pr_fmt
+ #define pr_fmt(fmt) "" fmt
+-static bool boot_cpu_done;
+-
+-static int __read_mostly __pat_enabled = IS_ENABLED(CONFIG_X86_PAT);
+-static void init_cache_modes(void);
++static bool __read_mostly boot_cpu_done;
++static bool __read_mostly pat_disabled = !IS_ENABLED(CONFIG_X86_PAT);
++static bool __read_mostly pat_initialized;
++static bool __read_mostly init_cm_done;
+ void pat_disable(const char *reason)
+ {
+-      if (!__pat_enabled)
++      if (pat_disabled)
+               return;
+       if (boot_cpu_done) {
+@@ -51,10 +51,8 @@ void pat_disable(const char *reason)
+               return;
+       }
+-      __pat_enabled = 0;
++      pat_disabled = true;
+       pr_info("x86/PAT: %s\n", reason);
+-
+-      init_cache_modes();
+ }
+ static int __init nopat(char *str)
+@@ -66,7 +64,7 @@ early_param("nopat", nopat);
+ bool pat_enabled(void)
+ {
+-      return !!__pat_enabled;
++      return pat_initialized;
+ }
+ EXPORT_SYMBOL_GPL(pat_enabled);
+@@ -204,6 +202,8 @@ static void __init_cache_modes(u64 pat)
+               update_cache_mode_entry(i, cache);
+       }
+       pr_info("x86/PAT: Configuration [0-7]: %s\n", pat_msg);
++
++      init_cm_done = true;
+ }
+ #define PAT(x, y)     ((u64)PAT_ ## y << ((x)*8))
+@@ -224,6 +224,7 @@ static void pat_bsp_init(u64 pat)
+       }
+       wrmsrl(MSR_IA32_CR_PAT, pat);
++      pat_initialized = true;
+       __init_cache_modes(pat);
+ }
+@@ -241,10 +242,9 @@ static void pat_ap_init(u64 pat)
+       wrmsrl(MSR_IA32_CR_PAT, pat);
+ }
+-static void init_cache_modes(void)
++void init_cache_modes(void)
+ {
+       u64 pat = 0;
+-      static int init_cm_done;
+       if (init_cm_done)
+               return;
+@@ -286,8 +286,6 @@ static void init_cache_modes(void)
+       }
+       __init_cache_modes(pat);
+-
+-      init_cm_done = 1;
+ }
+ /**
+@@ -305,10 +303,8 @@ void pat_init(void)
+       u64 pat;
+       struct cpuinfo_x86 *c = &boot_cpu_data;
+-      if (!pat_enabled()) {
+-              init_cache_modes();
++      if (pat_disabled)
+               return;
+-      }
+       if ((c->x86_vendor == X86_VENDOR_INTEL) &&
+           (((c->x86 == 0x6) && (c->x86_model <= 0xd)) ||