]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.9
authorSasha Levin <sashal@kernel.org>
Wed, 19 May 2021 22:43:11 +0000 (18:43 -0400)
committerSasha Levin <sashal@kernel.org>
Wed, 19 May 2021 22:43:11 +0000 (18:43 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.9/acpi-hotplug-pci-fix-reference-count-leak-in-enable_.patch [new file with mode: 0644]
queue-4.9/alsa-hda-generic-change-the-dac-ctl-name-for-lo-spk-.patch [new file with mode: 0644]
queue-4.9/arm-9058-1-cache-v7-refactor-v7_invalidate_l1-to-avo.patch [new file with mode: 0644]
queue-4.9/ceph-fix-fscache-invalidation.patch [new file with mode: 0644]
queue-4.9/input-silead-add-workaround-for-x86-bios-es-which-br.patch [new file with mode: 0644]
queue-4.9/lib-stackdepot-turn-depot_lock-spinlock-to-raw_spinl.patch [new file with mode: 0644]
queue-4.9/series
queue-4.9/um-mark-all-kernel-symbols-as-local.patch [new file with mode: 0644]

diff --git a/queue-4.9/acpi-hotplug-pci-fix-reference-count-leak-in-enable_.patch b/queue-4.9/acpi-hotplug-pci-fix-reference-count-leak-in-enable_.patch
new file mode 100644 (file)
index 0000000..84109fe
--- /dev/null
@@ -0,0 +1,43 @@
+From 7a86a9c3ca9cc47bbdb46577692fbeee81517de6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 25 Mar 2021 15:26:00 +0800
+Subject: ACPI / hotplug / PCI: Fix reference count leak in enable_slot()
+
+From: Feilong Lin <linfeilong@huawei.com>
+
+[ Upstream commit 3bbfd319034ddce59e023837a4aa11439460509b ]
+
+In enable_slot(), if pci_get_slot() returns NULL, we clear the SLOT_ENABLED
+flag. When pci_get_slot() finds a device, it increments the device's
+reference count.  In this case, we did not call pci_dev_put() to decrement
+the reference count, so the memory of the device (struct pci_dev type) will
+eventually leak.
+
+Call pci_dev_put() to decrement its reference count when pci_get_slot()
+returns a PCI device.
+
+Link: https://lore.kernel.org/r/b411af88-5049-a1c6-83ac-d104a1f429be@huawei.com
+Signed-off-by: Feilong Lin <linfeilong@huawei.com>
+Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/hotplug/acpiphp_glue.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
+index 7f2b9ef185e4..f154b05f467f 100644
+--- a/drivers/pci/hotplug/acpiphp_glue.c
++++ b/drivers/pci/hotplug/acpiphp_glue.c
+@@ -538,6 +538,7 @@ static void enable_slot(struct acpiphp_slot *slot)
+                       slot->flags &= (~SLOT_ENABLED);
+                       continue;
+               }
++              pci_dev_put(dev);
+       }
+ }
+-- 
+2.30.2
+
diff --git a/queue-4.9/alsa-hda-generic-change-the-dac-ctl-name-for-lo-spk-.patch b/queue-4.9/alsa-hda-generic-change-the-dac-ctl-name-for-lo-spk-.patch
new file mode 100644 (file)
index 0000000..e09c379
--- /dev/null
@@ -0,0 +1,64 @@
+From 8097fd0805a26008c069ac0a43a89748478cba76 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 4 May 2021 15:39:17 +0800
+Subject: ALSA: hda: generic: change the DAC ctl name for LO+SPK or LO+HP
+
+From: Hui Wang <hui.wang@canonical.com>
+
+[ Upstream commit f48652bbe3ae62ba2835a396b7e01f063e51c4cd ]
+
+Without this change, the DAC ctl's name could be changed only when
+the machine has both Speaker and Headphone, but we met some machines
+which only has Lineout and Headhpone, and the Lineout and Headphone
+share the Audio Mixer0 and DAC0, the ctl's name is set to "Front".
+
+On most of machines, the "Front" is used for Speaker only or Lineout
+only, but on this machine it is shared by Lineout and Headphone,
+This introduces an issue in the pipewire and pulseaudio, suppose users
+want the Headphone to be on and the Speaker/Lineout to be off, they
+could turn off the "Front", this works on most of the machines, but on
+this machine, the "Front" couldn't be turned off otherwise the
+headphone will be off too. Here we do some change to let the ctl's
+name change to "Headphone+LO" on this machine, and pipewire and
+pulseaudio already could handle "Headphone+LO" and "Speaker+LO".
+(https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/747)
+
+BugLink: http://bugs.launchpad.net/bugs/804178
+Signed-off-by: Hui Wang <hui.wang@canonical.com>
+Link: https://lore.kernel.org/r/20210504073917.22406-1-hui.wang@canonical.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/pci/hda/hda_generic.c | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
+index 6089ed6efc8d..8d99ac931ff6 100644
+--- a/sound/pci/hda/hda_generic.c
++++ b/sound/pci/hda/hda_generic.c
+@@ -1165,11 +1165,17 @@ static const char *get_line_out_pfx(struct hda_codec *codec, int ch,
+               *index = ch;
+               return "Headphone";
+       case AUTO_PIN_LINE_OUT:
+-              /* This deals with the case where we have two DACs and
+-               * one LO, one HP and one Speaker */
+-              if (!ch && cfg->speaker_outs && cfg->hp_outs) {
+-                      bool hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
+-                      bool spk_lo_shared = !path_has_mixer(codec, spec->speaker_paths[0], ctl_type);
++              /* This deals with the case where one HP or one Speaker or
++               * one HP + one Speaker need to share the DAC with LO
++               */
++              if (!ch) {
++                      bool hp_lo_shared = false, spk_lo_shared = false;
++
++                      if (cfg->speaker_outs)
++                              spk_lo_shared = !path_has_mixer(codec,
++                                                              spec->speaker_paths[0], ctl_type);
++                      if (cfg->hp_outs)
++                              hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
+                       if (hp_lo_shared && spk_lo_shared)
+                               return spec->vmaster_mute.hook ? "PCM" : "Master";
+                       if (hp_lo_shared)
+-- 
+2.30.2
+
diff --git a/queue-4.9/arm-9058-1-cache-v7-refactor-v7_invalidate_l1-to-avo.patch b/queue-4.9/arm-9058-1-cache-v7-refactor-v7_invalidate_l1-to-avo.patch
new file mode 100644 (file)
index 0000000..ce7b910
--- /dev/null
@@ -0,0 +1,105 @@
+From 6320f1d9988c19d5a35599c621b6a5c9ab925975 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 11 Feb 2021 09:23:09 +0100
+Subject: ARM: 9058/1: cache-v7: refactor v7_invalidate_l1 to avoid clobbering
+ r5/r6
+
+From: Ard Biesheuvel <ardb@kernel.org>
+
+[ Upstream commit f9e7a99fb6b86aa6a00e53b34ee6973840e005aa ]
+
+The cache invalidation code in v7_invalidate_l1 can be tweaked to
+re-read the associativity from CCSIDR, and keep the way identifier
+component in a single register that is assigned in the outer loop. This
+way, we need 2 registers less.
+
+Given that the number of sets is typically much larger than the
+associativity, rearrange the code so that the outer loop has the fewer
+number of iterations, ensuring that the re-read of CCSIDR only occurs a
+handful of times in practice.
+
+Fix the whitespace while at it, and update the comment to indicate that
+this code is no longer a clone of anything else.
+
+Acked-by: Nicolas Pitre <nico@fluxnic.net>
+Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/mm/cache-v7.S | 51 +++++++++++++++++++++---------------------
+ 1 file changed, 25 insertions(+), 26 deletions(-)
+
+diff --git a/arch/arm/mm/cache-v7.S b/arch/arm/mm/cache-v7.S
+index 11d699af30ed..db568be45946 100644
+--- a/arch/arm/mm/cache-v7.S
++++ b/arch/arm/mm/cache-v7.S
+@@ -27,41 +27,40 @@
+  * processor.  We fix this by performing an invalidate, rather than a
+  * clean + invalidate, before jumping into the kernel.
+  *
+- * This function is cloned from arch/arm/mach-tegra/headsmp.S, and needs
+- * to be called for both secondary cores startup and primary core resume
+- * procedures.
++ * This function needs to be called for both secondary cores startup and
++ * primary core resume procedures.
+  */
+ ENTRY(v7_invalidate_l1)
+        mov     r0, #0
+        mcr     p15, 2, r0, c0, c0, 0
+        mrc     p15, 1, r0, c0, c0, 0
+-       movw    r1, #0x7fff
+-       and     r2, r1, r0, lsr #13
++      movw    r3, #0x3ff
++      and     r3, r3, r0, lsr #3      @ 'Associativity' in CCSIDR[12:3]
++      clz     r1, r3                  @ WayShift
++      mov     r2, #1
++      mov     r3, r3, lsl r1          @ NumWays-1 shifted into bits [31:...]
++      movs    r1, r2, lsl r1          @ #1 shifted left by same amount
++      moveq   r1, #1                  @ r1 needs value > 0 even if only 1 way
+-       movw    r1, #0x3ff
++      and     r2, r0, #0x7
++      add     r2, r2, #4              @ SetShift
+-       and     r3, r1, r0, lsr #3      @ NumWays - 1
+-       add     r2, r2, #1              @ NumSets
++1:    movw    r4, #0x7fff
++      and     r0, r4, r0, lsr #13     @ 'NumSets' in CCSIDR[27:13]
+-       and     r0, r0, #0x7
+-       add     r0, r0, #4      @ SetShift
+-
+-       clz     r1, r3          @ WayShift
+-       add     r4, r3, #1      @ NumWays
+-1:     sub     r2, r2, #1      @ NumSets--
+-       mov     r3, r4          @ Temp = NumWays
+-2:     subs    r3, r3, #1      @ Temp--
+-       mov     r5, r3, lsl r1
+-       mov     r6, r2, lsl r0
+-       orr     r5, r5, r6      @ Reg = (Temp<<WayShift)|(NumSets<<SetShift)
+-       mcr     p15, 0, r5, c7, c6, 2
+-       bgt     2b
+-       cmp     r2, #0
+-       bgt     1b
+-       dsb     st
+-       isb
+-       ret     lr
++2:    mov     r4, r0, lsl r2          @ NumSet << SetShift
++      orr     r4, r4, r3              @ Reg = (Temp<<WayShift)|(NumSets<<SetShift)
++      mcr     p15, 0, r4, c7, c6, 2
++      subs    r0, r0, #1              @ Set--
++      bpl     2b
++      subs    r3, r3, r1              @ Way--
++      bcc     3f
++      mrc     p15, 1, r0, c0, c0, 0   @ re-read cache geometry from CCSIDR
++      b       1b
++3:    dsb     st
++      isb
++      ret     lr
+ ENDPROC(v7_invalidate_l1)
+ /*
+-- 
+2.30.2
+
diff --git a/queue-4.9/ceph-fix-fscache-invalidation.patch b/queue-4.9/ceph-fix-fscache-invalidation.patch
new file mode 100644 (file)
index 0000000..1204f34
--- /dev/null
@@ -0,0 +1,47 @@
+From 36c0fe0078f5b632595e03d4a566c8013001a54b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Jan 2021 18:05:37 -0500
+Subject: ceph: fix fscache invalidation
+
+From: Jeff Layton <jlayton@kernel.org>
+
+[ Upstream commit 10a7052c7868bc7bc72d947f5aac6f768928db87 ]
+
+Ensure that we invalidate the fscache whenever we invalidate the
+pagecache.
+
+Signed-off-by: Jeff Layton <jlayton@kernel.org>
+Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ceph/caps.c  | 1 +
+ fs/ceph/inode.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
+index 2a351821d8f3..0eb2ada032c7 100644
+--- a/fs/ceph/caps.c
++++ b/fs/ceph/caps.c
+@@ -1577,6 +1577,7 @@ static int try_nonblocking_invalidate(struct inode *inode)
+       u32 invalidating_gen = ci->i_rdcache_gen;
+       spin_unlock(&ci->i_ceph_lock);
++      ceph_fscache_invalidate(inode);
+       invalidate_mapping_pages(&inode->i_data, 0, -1);
+       spin_lock(&ci->i_ceph_lock);
+diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
+index 049cff197d2a..5e12ea92f7cd 100644
+--- a/fs/ceph/inode.c
++++ b/fs/ceph/inode.c
+@@ -1762,6 +1762,7 @@ static void ceph_invalidate_work(struct work_struct *work)
+       orig_gen = ci->i_rdcache_gen;
+       spin_unlock(&ci->i_ceph_lock);
++      ceph_fscache_invalidate(inode);
+       if (invalidate_inode_pages2(inode->i_mapping) < 0) {
+               pr_err("invalidate_pages %p fails\n", inode);
+       }
+-- 
+2.30.2
+
diff --git a/queue-4.9/input-silead-add-workaround-for-x86-bios-es-which-br.patch b/queue-4.9/input-silead-add-workaround-for-x86-bios-es-which-br.patch
new file mode 100644 (file)
index 0000000..8ee9e16
--- /dev/null
@@ -0,0 +1,128 @@
+From 4159d471c76f5e0fcbe8da6dc715f8d57c3c0585 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 9 Apr 2021 22:29:49 -0700
+Subject: Input: silead - add workaround for x86 BIOS-es which bring the chip
+ up in a stuck state
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit e479187748a8f151a85116a7091c599b121fdea5 ]
+
+Some buggy BIOS-es bring up the touchscreen-controller in a stuck
+state where it blocks the I2C bus. Specifically this happens on
+the Jumper EZpad 7 tablet model.
+
+After much poking at this problem I have found that the following steps
+are necessary to unstuck the chip / bus:
+
+1. Turn off the Silead chip.
+2. Try to do an I2C transfer with the chip, this will fail in response to
+   which the I2C-bus-driver will call: i2c_recover_bus() which will unstuck
+   the I2C-bus. Note the unstuck-ing of the I2C bus only works if we first
+   drop the chip of the bus by turning it off.
+3. Turn the chip back on.
+
+On the x86/ACPI systems were this problem is seen, step 1. and 3. require
+making ACPI calls and dealing with ACPI Power Resources. This commit adds
+a workaround which runtime-suspends the chip to turn it off, leaving it up
+to the ACPI subsystem to deal with all the ACPI specific details.
+
+There is no good way to detect this bug, so the workaround gets activated
+by a new "silead,stuck-controller-bug" boolean device-property. Since this
+is only used on x86/ACPI, this will be set by model specific device-props
+set by drivers/platform/x86/touchscreen_dmi.c. Therefor this new
+device-property is not documented in the DT-bindings.
+
+Dmesg will contain the following messages on systems where the workaround
+is activated:
+
+[   54.309029] silead_ts i2c-MSSL1680:00: [Firmware Bug]: Stuck I2C bus: please ignore the next 'controller timed out' error
+[   55.373593] i2c_designware 808622C1:04: controller timed out
+[   55.582186] silead_ts i2c-MSSL1680:00: Silead chip ID: 0x80360000
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20210405202745.16777-1-hdegoede@redhat.com
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/input/touchscreen/silead.c | 44 +++++++++++++++++++++++++++---
+ 1 file changed, 40 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
+index 867772878c0c..3350c0190c4a 100644
+--- a/drivers/input/touchscreen/silead.c
++++ b/drivers/input/touchscreen/silead.c
+@@ -28,6 +28,7 @@
+ #include <linux/input/mt.h>
+ #include <linux/input/touchscreen.h>
+ #include <linux/pm.h>
++#include <linux/pm_runtime.h>
+ #include <linux/irq.h>
+ #include <asm/unaligned.h>
+@@ -317,10 +318,8 @@ static int silead_ts_get_id(struct i2c_client *client)
+       error = i2c_smbus_read_i2c_block_data(client, SILEAD_REG_ID,
+                                             sizeof(chip_id), (u8 *)&chip_id);
+-      if (error < 0) {
+-              dev_err(&client->dev, "Chip ID read error %d\n", error);
++      if (error < 0)
+               return error;
+-      }
+       data->chip_id = le32_to_cpu(chip_id);
+       dev_info(&client->dev, "Silead chip ID: 0x%8X", data->chip_id);
+@@ -333,12 +332,49 @@ static int silead_ts_setup(struct i2c_client *client)
+       int error;
+       u32 status;
++      /*
++       * Some buggy BIOS-es bring up the chip in a stuck state where it
++       * blocks the I2C bus. The following steps are necessary to
++       * unstuck the chip / bus:
++       * 1. Turn off the Silead chip.
++       * 2. Try to do an I2C transfer with the chip, this will fail in
++       *    response to which the I2C-bus-driver will call:
++       *    i2c_recover_bus() which will unstuck the I2C-bus. Note the
++       *    unstuck-ing of the I2C bus only works if we first drop the
++       *    chip off the bus by turning it off.
++       * 3. Turn the chip back on.
++       *
++       * On the x86/ACPI systems were this problem is seen, step 1. and
++       * 3. require making ACPI calls and dealing with ACPI Power
++       * Resources. The workaround below runtime-suspends the chip to
++       * turn it off, leaving it up to the ACPI subsystem to deal with
++       * this.
++       */
++
++      if (device_property_read_bool(&client->dev,
++                                    "silead,stuck-controller-bug")) {
++              pm_runtime_set_active(&client->dev);
++              pm_runtime_enable(&client->dev);
++              pm_runtime_allow(&client->dev);
++
++              pm_runtime_suspend(&client->dev);
++
++              dev_warn(&client->dev, FW_BUG "Stuck I2C bus: please ignore the next 'controller timed out' error\n");
++              silead_ts_get_id(client);
++
++              /* The forbid will also resume the device */
++              pm_runtime_forbid(&client->dev);
++              pm_runtime_disable(&client->dev);
++      }
++
+       silead_ts_set_power(client, SILEAD_POWER_OFF);
+       silead_ts_set_power(client, SILEAD_POWER_ON);
+       error = silead_ts_get_id(client);
+-      if (error)
++      if (error) {
++              dev_err(&client->dev, "Chip ID read error %d\n", error);
+               return error;
++      }
+       error = silead_ts_init(client);
+       if (error)
+-- 
+2.30.2
+
diff --git a/queue-4.9/lib-stackdepot-turn-depot_lock-spinlock-to-raw_spinl.patch b/queue-4.9/lib-stackdepot-turn-depot_lock-spinlock-to-raw_spinl.patch
new file mode 100644 (file)
index 0000000..5d1e321
--- /dev/null
@@ -0,0 +1,80 @@
+From 3bc75cba9922eef0e86f71d19c433bfbc5cc0665 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 6 May 2021 18:03:40 -0700
+Subject: lib: stackdepot: turn depot_lock spinlock to raw_spinlock
+
+From: Zqiang <qiang.zhang@windriver.com>
+
+[ Upstream commit 78564b9434878d686c5f88c4488b20cccbcc42bc ]
+
+In RT system, the spin_lock will be replaced by sleepable rt_mutex lock,
+in __call_rcu(), disable interrupts before calling
+kasan_record_aux_stack(), will trigger this calltrace:
+
+  BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:951
+  in_atomic(): 0, irqs_disabled(): 1, non_block: 0, pid: 19, name: pgdatinit0
+  Call Trace:
+    ___might_sleep.cold+0x1b2/0x1f1
+    rt_spin_lock+0x3b/0xb0
+    stack_depot_save+0x1b9/0x440
+    kasan_save_stack+0x32/0x40
+    kasan_record_aux_stack+0xa5/0xb0
+    __call_rcu+0x117/0x880
+    __exit_signal+0xafb/0x1180
+    release_task+0x1d6/0x480
+    exit_notify+0x303/0x750
+    do_exit+0x678/0xcf0
+    kthread+0x364/0x4f0
+    ret_from_fork+0x22/0x30
+
+Replace spinlock with raw_spinlock.
+
+Link: https://lkml.kernel.org/r/20210329084009.27013-1-qiang.zhang@windriver.com
+Signed-off-by: Zqiang <qiang.zhang@windriver.com>
+Reported-by: Andrew Halaney <ahalaney@redhat.com>
+Cc: Alexander Potapenko <glider@google.com>
+Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
+Cc: Vijayanand Jitta <vjitta@codeaurora.org>
+Cc: Vinayak Menon <vinmenon@codeaurora.org>
+Cc: Yogesh Lal <ylal@codeaurora.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ lib/stackdepot.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/lib/stackdepot.c b/lib/stackdepot.c
+index 759ff419fe61..c519aa07d2e9 100644
+--- a/lib/stackdepot.c
++++ b/lib/stackdepot.c
+@@ -78,7 +78,7 @@ static void *stack_slabs[STACK_ALLOC_MAX_SLABS];
+ static int depot_index;
+ static int next_slab_inited;
+ static size_t depot_offset;
+-static DEFINE_SPINLOCK(depot_lock);
++static DEFINE_RAW_SPINLOCK(depot_lock);
+ static bool init_stack_slab(void **prealloc)
+ {
+@@ -253,7 +253,7 @@ depot_stack_handle_t depot_save_stack(struct stack_trace *trace,
+                       prealloc = page_address(page);
+       }
+-      spin_lock_irqsave(&depot_lock, flags);
++      raw_spin_lock_irqsave(&depot_lock, flags);
+       found = find_stack(*bucket, trace->entries, trace->nr_entries, hash);
+       if (!found) {
+@@ -277,7 +277,7 @@ depot_stack_handle_t depot_save_stack(struct stack_trace *trace,
+               WARN_ON(!init_stack_slab(&prealloc));
+       }
+-      spin_unlock_irqrestore(&depot_lock, flags);
++      raw_spin_unlock_irqrestore(&depot_lock, flags);
+ exit:
+       if (prealloc) {
+               /* Nobody used this memory, ok to free it. */
+-- 
+2.30.2
+
index e9ea1856c7e09b4b585ae95a4d9886a4aadf4ac4..c98774df6b7b14a248a06416a713ba29a2b5cba9 100644 (file)
@@ -227,3 +227,10 @@ kgdb-fix-gcc-11-warning-on-indentation.patch
 usb-sl811-hcd-improve-misleading-indentation.patch
 cxgb4-fix-the-wmisleading-indentation-warning.patch
 isdn-capi-fix-mismatched-prototypes.patch
+arm-9058-1-cache-v7-refactor-v7_invalidate_l1-to-avo.patch
+acpi-hotplug-pci-fix-reference-count-leak-in-enable_.patch
+input-silead-add-workaround-for-x86-bios-es-which-br.patch
+um-mark-all-kernel-symbols-as-local.patch
+ceph-fix-fscache-invalidation.patch
+alsa-hda-generic-change-the-dac-ctl-name-for-lo-spk-.patch
+lib-stackdepot-turn-depot_lock-spinlock-to-raw_spinl.patch
diff --git a/queue-4.9/um-mark-all-kernel-symbols-as-local.patch b/queue-4.9/um-mark-all-kernel-symbols-as-local.patch
new file mode 100644 (file)
index 0000000..5ec0ef0
--- /dev/null
@@ -0,0 +1,111 @@
+From 12f4955a432c4c37c7c218f1301be899af0cac24 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 5 Mar 2021 21:43:15 +0100
+Subject: um: Mark all kernel symbols as local
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+[ Upstream commit d5027ca63e0e778b641cf23e3f5c6d6212cf412b ]
+
+Ritesh reported a bug [1] against UML, noting that it crashed on
+startup. The backtrace shows the following (heavily redacted):
+
+(gdb) bt
+...
+ #26 0x0000000060015b5d in sem_init () at ipc/sem.c:268
+ #27 0x00007f89906d92f7 in ?? () from /lib/x86_64-linux-gnu/libcom_err.so.2
+ #28 0x00007f8990ab8fb2 in call_init (...) at dl-init.c:72
+...
+ #40 0x00007f89909bf3a6 in nss_load_library (...) at nsswitch.c:359
+...
+ #44 0x00007f8990895e35 in _nss_compat_getgrnam_r (...) at nss_compat/compat-grp.c:486
+ #45 0x00007f8990968b85 in __getgrnam_r [...]
+ #46 0x00007f89909d6b77 in grantpt [...]
+ #47 0x00007f8990a9394e in __GI_openpty [...]
+ #48 0x00000000604a1f65 in openpty_cb (...) at arch/um/os-Linux/sigio.c:407
+ #49 0x00000000604a58d0 in start_idle_thread (...) at arch/um/os-Linux/skas/process.c:598
+ #50 0x0000000060004a3d in start_uml () at arch/um/kernel/skas/process.c:45
+ #51 0x00000000600047b2 in linux_main (...) at arch/um/kernel/um_arch.c:334
+ #52 0x000000006000574f in main (...) at arch/um/os-Linux/main.c:144
+
+indicating that the UML function openpty_cb() calls openpty(),
+which internally calls __getgrnam_r(), which causes the nsswitch
+machinery to get started.
+
+This loads, through lots of indirection that I snipped, the
+libcom_err.so.2 library, which (in an unknown function, "??")
+calls sem_init().
+
+Now, of course it wants to get libpthread's sem_init(), since
+it's linked against libpthread. However, the dynamic linker
+looks up that symbol against the binary first, and gets the
+kernel's sem_init().
+
+Hajime Tazaki noted that "objcopy -L" can localize a symbol,
+so the dynamic linker wouldn't do the lookup this way. I tried,
+but for some reason that didn't seem to work.
+
+Doing the same thing in the linker script instead does seem to
+work, though I cannot entirely explain - it *also* works if I
+just add "VERSION { { global: *; }; }" instead, indicating that
+something else is happening that I don't really understand. It
+may be that explicitly doing that marks them with some kind of
+empty version, and that's different from the default.
+
+Explicitly marking them with a version breaks kallsyms, so that
+doesn't seem to be possible.
+
+Marking all the symbols as local seems correct, and does seem
+to address the issue, so do that. Also do it for static link,
+nsswitch libraries could still be loaded there.
+
+[1] https://bugs.debian.org/983379
+
+Reported-by: Ritesh Raj Sarraf <rrs@debian.org>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Acked-By: Anton Ivanov <anton.ivanov@cambridgegreys.com>
+Tested-By: Ritesh Raj Sarraf <rrs@debian.org>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/um/kernel/dyn.lds.S | 6 ++++++
+ arch/um/kernel/uml.lds.S | 6 ++++++
+ 2 files changed, 12 insertions(+)
+
+diff --git a/arch/um/kernel/dyn.lds.S b/arch/um/kernel/dyn.lds.S
+index 4fdbcf958cd5..558e5258dfff 100644
+--- a/arch/um/kernel/dyn.lds.S
++++ b/arch/um/kernel/dyn.lds.S
+@@ -6,6 +6,12 @@ OUTPUT_ARCH(ELF_ARCH)
+ ENTRY(_start)
+ jiffies = jiffies_64;
++VERSION {
++  {
++    local: *;
++  };
++}
++
+ SECTIONS
+ {
+   PROVIDE (__executable_start = START);
+diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S
+index 1840f55ed042..f544b8c13c2e 100644
+--- a/arch/um/kernel/uml.lds.S
++++ b/arch/um/kernel/uml.lds.S
+@@ -6,6 +6,12 @@ OUTPUT_ARCH(ELF_ARCH)
+ ENTRY(_start)
+ jiffies = jiffies_64;
++VERSION {
++  {
++    local: *;
++  };
++}
++
+ SECTIONS
+ {
+   /* This must contain the right address - not quite the default ELF one.*/
+-- 
+2.30.2
+