]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 10 Apr 2016 01:05:01 +0000 (18:05 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 10 Apr 2016 01:05:01 +0000 (18:05 -0700)
added patches:
bluetooth-add-new-ar3012-id-0489-e095.patch
bluetooth-fix-potential-buffer-overflow-with-add-advertising.patch
cgroup-ignore-css_sets-associated-with-dead-cgroups-during-migration.patch

queue-4.4/bluetooth-add-new-ar3012-id-0489-e095.patch [new file with mode: 0644]
queue-4.4/bluetooth-fix-potential-buffer-overflow-with-add-advertising.patch [new file with mode: 0644]
queue-4.4/cgroup-ignore-css_sets-associated-with-dead-cgroups-during-migration.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/bluetooth-add-new-ar3012-id-0489-e095.patch b/queue-4.4/bluetooth-add-new-ar3012-id-0489-e095.patch
new file mode 100644 (file)
index 0000000..819649b
--- /dev/null
@@ -0,0 +1,59 @@
+From 28c971d82fb58ef7cba22e5308be6d2d2590473d Mon Sep 17 00:00:00 2001
+From: Dmitry Tunin <hanipouspilot@gmail.com>
+Date: Wed, 10 Feb 2016 00:49:11 +0300
+Subject: Bluetooth: Add new AR3012 ID 0489:e095
+
+From: Dmitry Tunin <hanipouspilot@gmail.com>
+
+commit 28c971d82fb58ef7cba22e5308be6d2d2590473d upstream.
+
+T: Bus=01 Lev=01 Prnt=01 Port=04 Cnt=02 Dev#= 3 Spd=12 MxCh= 0
+D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
+P: Vendor=0489 ProdID=e095 Rev=00.01
+C: #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
+I: If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
+
+This device requires ar3k/AthrBT_0x31010100.dfu and
+ar3k/ramps_0x31010100_40.dfu firmware files that are not in
+linux-firmware yet.
+
+BugLink: https://bugs.launchpad.net/bugs/1542944
+
+Signed-off-by: Dmitry Tunin <hanipouspilot@gmail.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/bluetooth/ath3k.c |    2 ++
+ drivers/bluetooth/btusb.c |    1 +
+ 2 files changed, 3 insertions(+)
+
+--- a/drivers/bluetooth/ath3k.c
++++ b/drivers/bluetooth/ath3k.c
+@@ -82,6 +82,7 @@ static const struct usb_device_id ath3k_
+       { USB_DEVICE(0x0489, 0xe05f) },
+       { USB_DEVICE(0x0489, 0xe076) },
+       { USB_DEVICE(0x0489, 0xe078) },
++      { USB_DEVICE(0x0489, 0xe095) },
+       { USB_DEVICE(0x04c5, 0x1330) },
+       { USB_DEVICE(0x04CA, 0x3004) },
+       { USB_DEVICE(0x04CA, 0x3005) },
+@@ -147,6 +148,7 @@ static const struct usb_device_id ath3k_
+       { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
++      { USB_DEVICE(0x0489, 0xe095), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -196,6 +196,7 @@ static const struct usb_device_id blackl
+       { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
++      { USB_DEVICE(0x0489, 0xe095), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
+       { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
diff --git a/queue-4.4/bluetooth-fix-potential-buffer-overflow-with-add-advertising.patch b/queue-4.4/bluetooth-fix-potential-buffer-overflow-with-add-advertising.patch
new file mode 100644 (file)
index 0000000..82c6e28
--- /dev/null
@@ -0,0 +1,37 @@
+From 6a0e78072c2ae7b20b14e0249d8108441ea928d2 Mon Sep 17 00:00:00 2001
+From: Johan Hedberg <johan.hedberg@intel.com>
+Date: Fri, 11 Mar 2016 09:56:33 +0200
+Subject: Bluetooth: Fix potential buffer overflow with Add Advertising
+
+From: Johan Hedberg <johan.hedberg@intel.com>
+
+commit 6a0e78072c2ae7b20b14e0249d8108441ea928d2 upstream.
+
+The Add Advertising command handler does the appropriate checks for
+the AD and Scan Response data, however fails to take into account the
+general length of the mgmt command itself, which could lead to
+potential buffer overflows. This patch adds the necessary check that
+the mgmt command length is consistent with the given ad and scan_rsp
+lengths.
+
+Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/bluetooth/mgmt.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/net/bluetooth/mgmt.c
++++ b/net/bluetooth/mgmt.c
+@@ -7155,6 +7155,10 @@ static int add_advertising(struct sock *
+               return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
+                                      status);
++      if (data_len != sizeof(*cp) + cp->adv_data_len + cp->scan_rsp_len)
++              return mgmt_cmd_status(sk, hdev->id, MGMT_OP_ADD_ADVERTISING,
++                                     MGMT_STATUS_INVALID_PARAMS);
++
+       flags = __le32_to_cpu(cp->flags);
+       timeout = __le16_to_cpu(cp->timeout);
+       duration = __le16_to_cpu(cp->duration);
diff --git a/queue-4.4/cgroup-ignore-css_sets-associated-with-dead-cgroups-during-migration.patch b/queue-4.4/cgroup-ignore-css_sets-associated-with-dead-cgroups-during-migration.patch
new file mode 100644 (file)
index 0000000..8ada635
--- /dev/null
@@ -0,0 +1,120 @@
+From 2b021cbf3cb6208f0d40fd2f1869f237934340ed Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Tue, 15 Mar 2016 20:43:04 -0400
+Subject: cgroup: ignore css_sets associated with dead cgroups during migration
+
+From: Tejun Heo <tj@kernel.org>
+
+commit 2b021cbf3cb6208f0d40fd2f1869f237934340ed upstream.
+
+Before 2e91fa7f6d45 ("cgroup: keep zombies associated with their
+original cgroups"), all dead tasks were associated with init_css_set.
+If a zombie task is requested for migration, while migration prep
+operations would still be performed on init_css_set, the actual
+migration would ignore zombie tasks.  As init_css_set is always valid,
+this worked fine.
+
+However, after 2e91fa7f6d45, zombie tasks stay with the css_set it was
+associated with at the time of death.  Let's say a task T associated
+with cgroup A on hierarchy H-1 and cgroup B on hiearchy H-2.  After T
+becomes a zombie, it would still remain associated with A and B.  If A
+only contains zombie tasks, it can be removed.  On removal, A gets
+marked offline but stays pinned until all zombies are drained.  At
+this point, if migration is initiated on T to a cgroup C on hierarchy
+H-2, migration path would try to prepare T's css_set for migration and
+trigger the following.
+
+ WARNING: CPU: 0 PID: 1576 at kernel/cgroup.c:474 cgroup_get+0x121/0x160()
+ CPU: 0 PID: 1576 Comm: bash Not tainted 4.4.0-work+ #289
+ ...
+ Call Trace:
+  [<ffffffff8127e63c>] dump_stack+0x4e/0x82
+  [<ffffffff810445e8>] warn_slowpath_common+0x78/0xb0
+  [<ffffffff810446d5>] warn_slowpath_null+0x15/0x20
+  [<ffffffff810c33e1>] cgroup_get+0x121/0x160
+  [<ffffffff810c349b>] link_css_set+0x7b/0x90
+  [<ffffffff810c4fbc>] find_css_set+0x3bc/0x5e0
+  [<ffffffff810c5269>] cgroup_migrate_prepare_dst+0x89/0x1f0
+  [<ffffffff810c7547>] cgroup_attach_task+0x157/0x230
+  [<ffffffff810c7a17>] __cgroup_procs_write+0x2b7/0x470
+  [<ffffffff810c7bdc>] cgroup_tasks_write+0xc/0x10
+  [<ffffffff810c4790>] cgroup_file_write+0x30/0x1b0
+  [<ffffffff811c68fc>] kernfs_fop_write+0x13c/0x180
+  [<ffffffff81151673>] __vfs_write+0x23/0xe0
+  [<ffffffff81152494>] vfs_write+0xa4/0x1a0
+  [<ffffffff811532d4>] SyS_write+0x44/0xa0
+  [<ffffffff814af2d7>] entry_SYSCALL_64_fastpath+0x12/0x6f
+
+It doesn't make sense to prepare migration for css_sets pointing to
+dead cgroups as they are guaranteed to contain only zombies which are
+ignored later during migration.  This patch makes cgroup destruction
+path mark all affected css_sets as dead and updates the migration path
+to ignore them during preparation.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Fixes: 2e91fa7f6d45 ("cgroup: keep zombies associated with their original cgroups")
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/cgroup-defs.h |    3 +++
+ kernel/cgroup.c             |   20 ++++++++++++++++++--
+ 2 files changed, 21 insertions(+), 2 deletions(-)
+
+--- a/include/linux/cgroup-defs.h
++++ b/include/linux/cgroup-defs.h
+@@ -216,6 +216,9 @@ struct css_set {
+       /* all css_task_iters currently walking this cset */
+       struct list_head task_iters;
++      /* dead and being drained, ignore for migration */
++      bool dead;
++
+       /* For RCU-protected deletion */
+       struct rcu_head rcu_head;
+ };
+--- a/kernel/cgroup.c
++++ b/kernel/cgroup.c
+@@ -2498,6 +2498,14 @@ static void cgroup_migrate_add_src(struc
+       lockdep_assert_held(&cgroup_mutex);
+       lockdep_assert_held(&css_set_lock);
++      /*
++       * If ->dead, @src_set is associated with one or more dead cgroups
++       * and doesn't contain any migratable tasks.  Ignore it early so
++       * that the rest of migration path doesn't get confused by it.
++       */
++      if (src_cset->dead)
++              return;
++
+       src_cgrp = cset_cgroup_from_root(src_cset, dst_cgrp->root);
+       if (!list_empty(&src_cset->mg_preload_node))
+@@ -5131,6 +5139,7 @@ static int cgroup_destroy_locked(struct
+       __releases(&cgroup_mutex) __acquires(&cgroup_mutex)
+ {
+       struct cgroup_subsys_state *css;
++      struct cgrp_cset_link *link;
+       int ssid;
+       lockdep_assert_held(&cgroup_mutex);
+@@ -5151,11 +5160,18 @@ static int cgroup_destroy_locked(struct
+               return -EBUSY;
+       /*
+-       * Mark @cgrp dead.  This prevents further task migration and child
+-       * creation by disabling cgroup_lock_live_group().
++       * Mark @cgrp and the associated csets dead.  The former prevents
++       * further task migration and child creation by disabling
++       * cgroup_lock_live_group().  The latter makes the csets ignored by
++       * the migration path.
+        */
+       cgrp->self.flags &= ~CSS_ONLINE;
++      spin_lock_bh(&css_set_lock);
++      list_for_each_entry(link, &cgrp->cset_links, cset_link)
++              link->cset->dead = true;
++      spin_unlock_bh(&css_set_lock);
++
+       /* initiate massacre of all css's */
+       for_each_css(css, ssid, cgrp)
+               kill_css(css);
index 2ace8bcbc06a87942d2a99a6966d12b46074f876..2dd88cc02e29f70299e99aa0a33e8c20dc8ef851 100644 (file)
@@ -127,3 +127,6 @@ mm-memcontrol-reclaim-and-oom-kill-when-shrinking-memory.max-below-usage.patch
 ia64-define-ioremap_uc.patch
 watchdog-don-t-run-proc_watchdog_update-if-new-value-is-same-as-old.patch
 watchdog-rc32434_wdt-fix-ioctl-error-handling.patch
+bluetooth-add-new-ar3012-id-0489-e095.patch
+bluetooth-fix-potential-buffer-overflow-with-add-advertising.patch
+cgroup-ignore-css_sets-associated-with-dead-cgroups-during-migration.patch