* [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review
@ 2013-10-10 15:40 Kamal Mostafa
2013-10-10 15:40 ` [PATCH 001/104] htb: fix sign extension bug Kamal Mostafa
` (104 more replies)
0 siblings, 105 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Kamal Mostafa
This is the start of the review cycle for the Linux 3.8.13.11 stable kernel.
This version contains 104 new patches, summarized below. The new patches are
posted as replies to this message and also available in this git branch:
http://kernel.ubuntu.com/git?p=ubuntu/linux.git;h=linux-3.8.y-review;a=shortlog
git://kernel.ubuntu.com/ubuntu/linux.git linux-3.8.y-review
The review period for version 3.8.13.11 will be open for the next three days.
To report a problem, please reply to the relevant follow-up patch message.
For more information about the Linux 3.8.y.z extended stable kernel version,
see https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable .
-Kamal
--
arch/arm/crypto/aes-armv4.S | 6 +-
arch/powerpc/kernel/iommu.c | 2 +-
arch/powerpc/kernel/sysfs.c | 18 +++-
arch/powerpc/kernel/vio.c | 12 ++-
arch/powerpc/lib/checksum_64.S | 58 ++++++++---
arch/x86/kernel/reboot.c | 16 +++
arch/x86/platform/efi/efi.c | 11 +-
block/cfq-iosched.c | 2 +-
drivers/base/core.c | 14 +--
drivers/block/cciss.c | 1 +
drivers/block/cpqarray.c | 1 +
drivers/bluetooth/ath3k.c | 2 +
drivers/bluetooth/btusb.c | 2 +
drivers/gpio/gpio-omap.c | 157 +++++++++++++++++++----------
drivers/gpu/drm/ast/ast_drv.h | 2 +-
drivers/gpu/drm/i915/intel_display.c | 15 +--
drivers/gpu/drm/i915/intel_dp.c | 13 ++-
drivers/gpu/drm/radeon/atombios_encoders.c | 8 +-
drivers/gpu/drm/radeon/r100.c | 8 +-
drivers/gpu/drm/radeon/radeon_connectors.c | 34 ++++++-
drivers/gpu/drm/radeon/radeon_device.c | 15 ++-
drivers/gpu/drm/radeon/radeon_kms.c | 3 +
drivers/gpu/drm/radeon/radeon_ring.c | 8 +-
drivers/gpu/drm/radeon/si.c | 106 ++++++++++---------
drivers/gpu/drm/ttm/ttm_tt.c | 2 +-
drivers/hid/hid-core.c | 74 ++++++++++++--
drivers/hid/hid-input.c | 11 +-
drivers/hid/hid-lenovo-tpkbd.c | 25 +++--
drivers/hid/hid-lg2ff.c | 19 +---
drivers/hid/hid-lg3ff.c | 29 ++----
drivers/hid/hid-lg4ff.c | 20 +---
drivers/hid/hid-lgff.c | 17 +---
drivers/hid/hid-logitech-dj.c | 10 +-
drivers/hid/hid-multitouch.c | 26 ++---
drivers/hid/hid-zpff.c | 18 +---
drivers/hwmon/applesmc.c | 11 +-
drivers/infiniband/ulp/srpt/ib_srpt.c | 14 ++-
drivers/md/dm-snap-persistent.c | 2 +-
drivers/md/dm-snap.c | 5 +-
drivers/net/bonding/bond_main.c | 8 +-
drivers/net/ethernet/broadcom/tg3.c | 19 +++-
drivers/net/ethernet/realtek/8139cp.c | 1 +
drivers/net/ethernet/sfc/rx.c | 3 +-
drivers/net/macvlan.c | 4 +
drivers/net/tun.c | 6 +-
drivers/net/usb/cdc_ether.c | 5 +
drivers/net/usb/cdc_mbim.c | 4 +
drivers/net/wireless/mwifiex/11n_aggr.c | 3 +-
drivers/net/wireless/mwifiex/11n_aggr.h | 2 +-
drivers/net/wireless/mwifiex/usb.c | 7 --
drivers/net/wireless/mwifiex/wmm.c | 3 +-
drivers/net/wireless/p54/p54usb.c | 1 +
drivers/net/wireless/rtlwifi/wifi.h | 2 +-
drivers/pci/pci-acpi.c | 6 +-
drivers/staging/vt6656/iwctl.c | 3 +
drivers/staging/vt6656/main_usb.c | 3 +-
drivers/tty/hvc/hvc_xen.c | 1 +
drivers/tty/serial/pch_uart.c | 3 +-
drivers/usb/core/devio.c | 16 +++
drivers/usb/dwc3/dwc3-pci.c | 4 +
drivers/usb/gadget/dummy_hcd.c | 7 +-
drivers/usb/gadget/f_fs.c | 60 +++++------
drivers/usb/host/ehci-fsl.c | 12 +--
drivers/usb/host/ehci-pci.c | 2 +-
drivers/usb/host/ohci-hcd.c | 22 ++--
drivers/usb/host/ohci-q.c | 24 ++++-
drivers/usb/host/uhci-pci.c | 2 +-
drivers/usb/host/uhci-q.c | 12 ++-
drivers/usb/host/xhci-hub.c | 2 +-
drivers/usb/host/xhci-pci.c | 2 +-
drivers/usb/host/xhci-ring.c | 16 +++
drivers/usb/host/xhci.c | 25 +----
drivers/usb/host/xhci.h | 1 +
drivers/usb/serial/option.c | 3 +
drivers/vhost/net.c | 9 +-
fs/binfmt_elf.c | 30 +++---
fs/cifs/dir.c | 1 +
fs/nilfs2/page.c | 2 +
fs/nilfs2/segment.c | 11 +-
include/linux/balloon_compaction.h | 25 +++++
include/linux/hid.h | 4 +
include/linux/ipv6.h | 4 +-
include/net/bluetooth/hci.h | 1 +
include/uapi/drm/radeon_drm.h | 3 +
include/uapi/linux/icmpv6.h | 2 +
include/uapi/linux/ipv6.h | 2 +
kernel/sched/fair.c | 14 ++-
mm/migrate.c | 2 +-
mm/vmscan.c | 4 +-
net/bluetooth/hci_core.c | 15 ++-
net/bluetooth/hci_event.c | 6 +-
net/bridge/br_multicast.c | 5 +-
net/core/neighbour.c | 10 +-
net/core/sysctl_net_core.c | 20 +++-
net/ipv4/fib_trie.c | 5 +-
net/ipv4/raw.c | 3 +-
net/ipv4/sysctl_net_ipv4.c | 11 +-
net/ipv4/tcp.c | 7 ++
net/ipv4/tcp_cubic.c | 12 ++-
net/ipv4/tcp_output.c | 6 +-
net/ipv6/addrconf.c | 10 +-
net/ipv6/exthdrs.c | 3 +-
net/ipv6/icmp.c | 10 +-
net/ipv6/ip6_fib.c | 16 ++-
net/ipv6/ip6_input.c | 5 +-
net/ipv6/reassembly.c | 5 +
net/ipv6/tcp_ipv6.c | 2 +-
net/sched/sch_htb.c | 2 +-
net/sysctl_net.c | 4 +-
net/tipc/socket.c | 4 +-
security/smack/smackfs.c | 2 +-
sound/core/compress_offload.c | 3 +-
sound/soc/codecs/88pm860x-codec.c | 3 +
sound/soc/codecs/ab8500-codec.c | 7 +-
sound/soc/codecs/max98095.c | 4 +-
115 files changed, 895 insertions(+), 490 deletions(-)
Al Viro (1):
USB: Fix breakage in ffs_fs_mount()
Alan Stern (4):
usb: gadget: fix a bug and a WARN_ON in dummy-hcd
USB: UHCI: accept very late isochronous URBs
USB: OHCI: accept very late isochronous URBs
USB: fix PM config symbol in uhci-hcd, ehci-hcd, and xhci-hcd
Alex Deucher (3):
drm/radeon/atom: workaround vbios bug in transmitter table on rs880 (v2)
drm/radeon: fix panel scaling with eDP and LVDS bridges
drm/radeon: disable tests/benchmarks if accel is disabled
Alex Ivanov (1):
drm/radeon: Make r100_cp_ring_info() and radeon_ring_gfx() safe (v2)
Amitkumar Karwar (1):
mwifiex: fix hang issue for USB chipsets
Anatol Pomozov (1):
cfq: explicitly use 64bit divide operation for 64bit arguments
Andre Guedes (2):
Bluetooth: Fix security level for peripheral role
Bluetooth: Fix encryption key size for peripheral role
Andrew Vagin (1):
tcp: initialize rcv_tstamp for restored sockets
Andrey Vagin (1):
tcp: set timestamps for restored skb-s
Ard Biesheuvel (1):
ARM: 7837/3: fix Thumb-2 bug in AES assembler code
Ben Hutchings (1):
sfc: Fix efx_rx_buf_offset() for recycled pages
Ben Skeggs (1):
drm/ttm: fix the tt_populated check in ttm_tt_destroy()
Benjamin Tissoires (3):
HID: validate feature and input report details
HID: multitouch: validate indexes details
HID: lenovo-tpkbd: fix leak if tpkbd_probe_tp fails
Benson Leung (1):
driver core : Fix use after free of dev->parent in device_shutdown
Bing Zhao (1):
mwifiex: fix NULL pointer dereference in usb suspend handler
Chris Clark (1):
ipv4: sendto/hdrincl: don't use destination address found in header
Christian Lamparter (1):
p54usb: add USB ID for Corega WLUSB2GTST USB adapter
Daisuke Nishimura (1):
sched/fair: Fix small race where child->se.parent,cfs_rq might point to invalid ones
Dan Aloni (1):
fs/binfmt_elf.c: prevent a coredump with a large vm_map_count from Oopsing
Dan Carpenter (6):
tun: signedness bug in tun_get_user()
cpqarray: fix info leak in ida_locked_ioctl()
cciss: fix info leak in cciss_ioctl32_passthru()
ASoC: max98095: a couple array underflows
ASoC: ab8500-codec: info leak in anc_status_control_put()
ASoC: 88pm860x: array overflow in snd_soc_put_volsw_2r_st()
Daniel Borkmann (2):
net: bridge: convert MLDv2 Query MRC into msecs_to_jiffies for max_delay
net: ipv6: tcp: fix potential use after free in tcp_v6_do_rcv
Dave Airlie (1):
drm/ast: fix the ast open key function
Dave Jones (1):
8139cp: Fix skb leak in rx_status_loop failure path.
David Cohen (1):
usb: dwc3: add support for Merrifield
David Vrabel (1):
xen/hvc: allow xenboot console to be used again
Eric Dumazet (3):
fib_trie: remove potential out of bound access
tcp: cubic: fix overflow error in bictcp_update()
tcp: cubic: fix bug in bictcp_acked()
Eric W. Biederman (1):
net: Update the sysctl permissions handler to test effective uid/gid
Erik Hugne (1):
tipc: set sk_err correctly when connection fails
Fabio Porcedda (1):
net: usb: cdc_ether: Use wwan interface for Telit modules
Hannes Frederic Sowa (3):
ipv6: don't stop backtracking in fib6_lookup_1 if subtree does not match
ipv6: remove max_addresses check from ipv6_create_tempaddr
ipv6: drop packets with multiple fragmentation headers
Heikki Krogerus (1):
usb: dwc3: pci: add support for BayTrail
Henrik Rydberg (1):
hwmon: (applesmc) Check key count before proceeding
Jack Wang (1):
ib_srpt: always set response for task management
Jani Nikula (2):
drm/i915: do not update cursor in crtc mode set
drm/i915/dp: increase i2c-over-aux retry interval on AUX DEFER
Jason Wang (1):
vhost_net: poll vhost queue after marking DMA is done
Javier Martinez Canillas (2):
gpio/omap: maintain GPIO and IRQ usage separately
gpio/omap: auto-setup a GPIO when used as an IRQ
Jiri Bohac (1):
ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO
Johan Hedberg (1):
Bluetooth: Introduce a new HCI_RFKILLED flag
Johan Hovold (1):
serial: pch_uart: fix tty-kref leak in dma-rx path
Josh Boyer (1):
x86, efi: Don't map Boot Services on i386
Kees Cook (5):
HID: provide a helper for validating hid reports
HID: zeroplus: validate output report details
HID: LG: validate HID output report details
HID: lenovo-tpkbd: validate output report details
HID: logitech-dj: validate output report details
Kurt Garloff (1):
usb/core/devio.c: Don't reject control message to endpoint with wrong direction bit
Larry Finger (1):
rtlwifi: Align private space in rtl_priv struct
Liam Girdwood (1):
ALSA: compress: Fix compress device unregister.
Linus Lüssing (1):
bridge: don't try to update timers in case of broken MLD queries
Madhavan Srinivasan (1):
powerpc/sysfs: Disable writing to PURR in guest mode
Malcolm Priestley (2):
staging: vt6656: [BUG] main_usb.c oops on device_close move flag earlier.
staging: vt6656: [BUG] iwctl_siwencodeext return if device not open
Masoud Sharbiani (1):
x86/reboot: Add quirk to make Dell C6100 use reboot=pci automatically
Mathias Nyman (2):
xhci: Fix oops happening after address device timeout
xhci: Ensure a command structure points to the correct trb on the command ring
Michael S. Tsirkin (1):
macvlan: validate flags
Michal Malý (1):
USB: serial: option: Ignore card reader interface on Huawei E1750
Miklos Szeredi (1):
cifs: fix filp leak in cifs_atomic_open()
Mikulas Patocka (2):
dm snapshot: workaround for a false positive lockdep warning
dm-snapshot: fix performance degradation due to small hash size
Nicholas Bellinger (1):
ib_srpt: Destroy cm_id before destroying QP.
Nishanth Aravamudan (1):
powerpc/iommu: Use GFP_KERNEL instead of GFP_ATOMIC in iommu_init_table()
Nithin Sujir (2):
tg3: Don't turn off led on 5719 serdes port 0
tg3: Expand led off fix to include 5720
Passion,Zhao (1):
Smack: Fix the bug smackcipso can't set CIPSO correctly
Paul E. McKenney (2):
powerpc: Fix parameter clobber in csum_partial_copy_generic()
powerpc: Restore registers on error exit from csum_partial_copy_generic()
Peng Chen (1):
Bluetooth: Add a new PID/VID 0cf3/e005 for AR3012.
Phil Oester (1):
tcp: tcp_make_synack() should use sock_wmalloc
Prarit Bhargava (1):
powerpc/vio: Fix modalias_show return values
Rafael Aquini (1):
mm: avoid reinserting isolated balloon pages into LRU lists
Rafael J. Wysocki (1):
PCI / ACPI / PM: Clear pme_poll for devices in D3cold on wakeup
Ramneek Mehresh (1):
fsl/usb: Resolve PHY_CLK_VLD instability issue for ULPI phy
Raphael Kubo da Costa (1):
Bluetooth: Add support for BCM20702A0 [0b05, 17cb]
Rob Gardner (1):
net: usb: Add HP hs2434 device to ZLP exception table
Roman Gushchin (1):
net: check net.core.somaxconn sysctl values
Tom Stellard (1):
drm/radeon/si: Add support for CP DMA to CS checker for compute v2
Veaceslav Falico (2):
neighbour: populate neigh_parms on alloc before calling ndo_neigh_setup
bonding: modify only neigh_parms owned by us
Ville Syrjälä (1):
drm/i915: Don't enable the cursor on a disable pipe
Vyacheslav Dubeyko (1):
nilfs2: fix issue with race condition of competition between segments for dirty blocks
YOSHIFUJI Hideaki / 吉藤英明 (1):
ipv6: Store Router Alert option in IP6CB directly.
bingtian.ly@taobao.com (1):
net: avoid to hang up on sending due to sysctl configuration overflow.
stephen hemminger (1):
htb: fix sign extension bug
^ permalink raw reply [flat|nested] 109+ messages in thread
* [PATCH 001/104] htb: fix sign extension bug
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:40 ` [PATCH 002/104] net: avoid to hang up on sending due to sysctl configuration overflow Kamal Mostafa
` (103 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Stephen Hemminger, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: stephen hemminger <stephen@networkplumber.org>
[ Upstream commit cbd375567f7e4811b1c721f75ec519828ac6583f ]
When userspace passes a large priority value
the assignment of the unsigned value hopt->prio
to signed int cl->prio causes cl->prio to become negative and the
comparison is with TC_HTB_NUMPRIO is always false.
The result is that HTB crashes by referencing outside
the array when processing packets. With this patch the large value
wraps around like other values outside the normal range.
See: https://bugzilla.kernel.org/show_bug.cgi?id=60669
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/sched/sch_htb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
index 79e8ed4..8ea8a79 100644
--- a/net/sched/sch_htb.c
+++ b/net/sched/sch_htb.c
@@ -92,7 +92,7 @@ struct htb_class {
unsigned int children;
struct htb_class *parent; /* parent class */
- int prio; /* these two are used only by leaves... */
+ u32 prio; /* these two are used only by leaves... */
int quantum; /* but stored for parent-to-leaf return */
union {
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 002/104] net: avoid to hang up on sending due to sysctl configuration overflow.
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
2013-10-10 15:40 ` [PATCH 001/104] htb: fix sign extension bug Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:40 ` [PATCH 003/104] net: check net.core.somaxconn sysctl values Kamal Mostafa
` (102 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Eric Dumazet, Li Yu, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: "bingtian.ly@taobao.com" <bingtian.ly@taobao.com>
commit cdda88912d62f9603d27433338a18be83ef23ac1 upstream.
I found if we write a larger than 4GB value to some sysctl
variables, the sending syscall will hang up forever, because these
variables are 32 bits, such large values make them overflow to 0 or
negative.
This patch try to fix overflow or prevent from zero value setup
of below sysctl variables:
net.core.wmem_default
net.core.rmem_default
net.core.rmem_max
net.core.wmem_max
net.ipv4.udp_rmem_min
net.ipv4.udp_wmem_min
net.ipv4.tcp_wmem
net.ipv4.tcp_rmem
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Li Yu <raise.sail@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/core/sysctl_net_core.c | 14 ++++++++++----
net/ipv4/sysctl_net_ipv4.c | 11 +++++++----
2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
index d1b0804..cfdb46a 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -20,6 +20,8 @@
#include <net/sock.h>
#include <net/net_ratelimit.h>
+static int one = 1;
+
#ifdef CONFIG_RPS
static int rps_sock_flow_sysctl(ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
@@ -92,28 +94,32 @@ static struct ctl_table net_core_table[] = {
.data = &sysctl_wmem_max,
.maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_dointvec
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &one,
},
{
.procname = "rmem_max",
.data = &sysctl_rmem_max,
.maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_dointvec
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &one,
},
{
.procname = "wmem_default",
.data = &sysctl_wmem_default,
.maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_dointvec
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &one,
},
{
.procname = "rmem_default",
.data = &sysctl_rmem_default,
.maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_dointvec
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &one,
},
{
.procname = "dev_weight",
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
index 63632ea..d22765d 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -27,6 +27,7 @@
#include <net/tcp_memcontrol.h>
static int zero;
+static int one = 1;
static int two = 2;
static int tcp_retr1_max = 255;
static int ip_local_port_range_min[] = { 1, 1 };
@@ -560,14 +561,16 @@ static struct ctl_table ipv4_table[] = {
.data = &sysctl_tcp_wmem,
.maxlen = sizeof(sysctl_tcp_wmem),
.mode = 0644,
- .proc_handler = proc_dointvec
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &one,
},
{
.procname = "tcp_rmem",
.data = &sysctl_tcp_rmem,
.maxlen = sizeof(sysctl_tcp_rmem),
.mode = 0644,
- .proc_handler = proc_dointvec
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &one,
},
{
.procname = "tcp_app_win",
@@ -790,7 +793,7 @@ static struct ctl_table ipv4_table[] = {
.maxlen = sizeof(sysctl_udp_rmem_min),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
- .extra1 = &zero
+ .extra1 = &one
},
{
.procname = "udp_wmem_min",
@@ -798,7 +801,7 @@ static struct ctl_table ipv4_table[] = {
.maxlen = sizeof(sysctl_udp_wmem_min),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
- .extra1 = &zero
+ .extra1 = &one
},
{ }
};
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 003/104] net: check net.core.somaxconn sysctl values
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
2013-10-10 15:40 ` [PATCH 001/104] htb: fix sign extension bug Kamal Mostafa
2013-10-10 15:40 ` [PATCH 002/104] net: avoid to hang up on sending due to sysctl configuration overflow Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:40 ` [PATCH 004/104] macvlan: validate flags Kamal Mostafa
` (101 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Roman Gushchin, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Roman Gushchin <klamm@yandex-team.ru>
[ Upstream commit 5f671d6b4ec3e6d66c2a868738af2cdea09e7509 ]
It's possible to assign an invalid value to the net.core.somaxconn
sysctl variable, because there is no checks at all.
The sk_max_ack_backlog field of the sock structure is defined as
unsigned short. Therefore, the backlog argument in inet_listen()
shouldn't exceed USHRT_MAX. The backlog argument in the listen() syscall
is truncated to the somaxconn value. So, the somaxconn value shouldn't
exceed 65535 (USHRT_MAX).
Also, negative values of somaxconn are meaningless.
before:
$ sysctl -w net.core.somaxconn=256
net.core.somaxconn = 256
$ sysctl -w net.core.somaxconn=65536
net.core.somaxconn = 65536
$ sysctl -w net.core.somaxconn=-100
net.core.somaxconn = -100
after:
$ sysctl -w net.core.somaxconn=256
net.core.somaxconn = 256
$ sysctl -w net.core.somaxconn=65536
error: "Invalid argument" setting key "net.core.somaxconn"
$ sysctl -w net.core.somaxconn=-100
error: "Invalid argument" setting key "net.core.somaxconn"
Based on a prior patch from Changli Gao.
Signed-off-by: Roman Gushchin <klamm@yandex-team.ru>
Reported-by: Changli Gao <xiaosuo@gmail.com>
Suggested-by: Eric Dumazet <edumazet@google.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/core/sysctl_net_core.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
index cfdb46a..2ff093b 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -20,7 +20,9 @@
#include <net/sock.h>
#include <net/net_ratelimit.h>
+static int zero = 0;
static int one = 1;
+static int ushort_max = USHRT_MAX;
#ifdef CONFIG_RPS
static int rps_sock_flow_sysctl(ctl_table *table, int write,
@@ -204,7 +206,9 @@ static struct ctl_table netns_core_table[] = {
.data = &init_net.core.sysctl_somaxconn,
.maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_dointvec
+ .extra1 = &zero,
+ .extra2 = &ushort_max,
+ .proc_handler = proc_dointvec_minmax
},
{ }
};
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 004/104] macvlan: validate flags
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (2 preceding siblings ...)
2013-10-10 15:40 ` [PATCH 003/104] net: check net.core.somaxconn sysctl values Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:40 ` [PATCH 005/104] neighbour: populate neigh_parms on alloc before calling ndo_neigh_setup Kamal Mostafa
` (100 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: David S. Miller, John Fastabend, Michael S. Tsirkin,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: "Michael S. Tsirkin" <mst@redhat.com>
[ Upstream commit 1512747820367c8b3b8b72035f0f78c62f2bf1e9 ]
commit df8ef8f3aaa6692970a436204c4429210addb23a
macvlan: add FDB bridge ops and macvlan flags
added a flags field to macvlan, which can be
controlled from userspace.
The idea is to make the interface future-proof
so we can add flags and not new fields.
However, flags value isn't validated, as a result,
userspace can't detect which flags are supported.
Cc: "David S. Miller" <davem@davemloft.net>
Cc: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/macvlan.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index d30fc4d..931a4d7 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -688,6 +688,10 @@ static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[])
return -EADDRNOTAVAIL;
}
+ if (data && data[IFLA_MACVLAN_FLAGS] &&
+ nla_get_u16(data[IFLA_MACVLAN_FLAGS]) & ~MACVLAN_FLAG_NOPROMISC)
+ return -EINVAL;
+
if (data && data[IFLA_MACVLAN_MODE]) {
switch (nla_get_u32(data[IFLA_MACVLAN_MODE])) {
case MACVLAN_MODE_PRIVATE:
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 005/104] neighbour: populate neigh_parms on alloc before calling ndo_neigh_setup
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (3 preceding siblings ...)
2013-10-10 15:40 ` [PATCH 004/104] macvlan: validate flags Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:40 ` [PATCH 006/104] bonding: modify only neigh_parms owned by us Kamal Mostafa
` (99 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Veaceslav Falico, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Veaceslav Falico <vfalico@redhat.com>
[ Upstream commit 63134803a6369dcf7dddf7f0d5e37b9566b308d2 ]
dev->ndo_neigh_setup() might need some of the values of neigh_parms, so
populate them before calling it.
Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/core/neighbour.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 8f9a6c6..e7f5bff 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -1458,16 +1458,18 @@ struct neigh_parms *neigh_parms_alloc(struct net_device *dev,
atomic_set(&p->refcnt, 1);
p->reachable_time =
neigh_rand_reach_time(p->base_reachable_time);
+ dev_hold(dev);
+ p->dev = dev;
+ write_pnet(&p->net, hold_net(net));
+ p->sysctl_table = NULL;
if (ops->ndo_neigh_setup && ops->ndo_neigh_setup(dev, p)) {
+ release_net(net);
+ dev_put(dev);
kfree(p);
return NULL;
}
- dev_hold(dev);
- p->dev = dev;
- write_pnet(&p->net, hold_net(net));
- p->sysctl_table = NULL;
write_lock_bh(&tbl->lock);
p->next = tbl->parms.next;
tbl->parms.next = p;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 006/104] bonding: modify only neigh_parms owned by us
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (4 preceding siblings ...)
2013-10-10 15:40 ` [PATCH 005/104] neighbour: populate neigh_parms on alloc before calling ndo_neigh_setup Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:40 ` [PATCH 007/104] fib_trie: remove potential out of bound access Kamal Mostafa
` (98 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Veaceslav Falico, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Veaceslav Falico <vfalico@redhat.com>
[ Upstream commit 9918d5bf329d0dc5bb2d9d293bcb772bdb626e65 ]
Otherwise, on neighbour creation, bond_neigh_init() will be called with a
foreign netdev.
Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/bonding/bond_main.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 045dc53..fe48472 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -3810,11 +3810,17 @@ static int bond_neigh_init(struct neighbour *n)
* The bonding ndo_neigh_setup is called at init time beofre any
* slave exists. So we must declare proxy setup function which will
* be used at run time to resolve the actual slave neigh param setup.
+ *
+ * It's also called by master devices (such as vlans) to setup their
+ * underlying devices. In that case - do nothing, we're already set up from
+ * our init.
*/
static int bond_neigh_setup(struct net_device *dev,
struct neigh_parms *parms)
{
- parms->neigh_setup = bond_neigh_init;
+ /* modify only our neigh_parms */
+ if (parms->dev == dev)
+ parms->neigh_setup = bond_neigh_init;
return 0;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 007/104] fib_trie: remove potential out of bound access
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (5 preceding siblings ...)
2013-10-10 15:40 ` [PATCH 006/104] bonding: modify only neigh_parms owned by us Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:40 ` [PATCH 008/104] bridge: don't try to update timers in case of broken MLD queries Kamal Mostafa
` (97 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Eric Dumazet, Dmitry Vyukov, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <edumazet@google.com>
[ Upstream commit aab515d7c32a34300312416c50314e755ea6f765 ]
AddressSanitizer [1] dynamic checker pointed a potential
out of bound access in leaf_walk_rcu()
We could allocate one more slot in tnode_new() to leave the prefetch()
in-place but it looks not worth the pain.
Bug added in commit 82cfbb008572b ("[IPV4] fib_trie: iterator recode")
[1] :
https://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/ipv4/fib_trie.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index 31d771c..c005f03 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -71,7 +71,6 @@
#include <linux/init.h>
#include <linux/list.h>
#include <linux/slab.h>
-#include <linux/prefetch.h>
#include <linux/export.h>
#include <net/net_namespace.h>
#include <net/ip.h>
@@ -1773,10 +1772,8 @@ static struct leaf *leaf_walk_rcu(struct tnode *p, struct rt_trie_node *c)
if (!c)
continue;
- if (IS_LEAF(c)) {
- prefetch(rcu_dereference_rtnl(p->child[idx]));
+ if (IS_LEAF(c))
return (struct leaf *) c;
- }
/* Rescan start scanning in new node */
p = (struct tnode *) c;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 008/104] bridge: don't try to update timers in case of broken MLD queries
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (6 preceding siblings ...)
2013-10-10 15:40 ` [PATCH 007/104] fib_trie: remove potential out of bound access Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:40 ` [PATCH 009/104] tcp: cubic: fix overflow error in bictcp_update() Kamal Mostafa
` (96 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Linus Lüssing, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: =?UTF-8?q?Linus=20L=C3=BCssing?= <linus.luessing@web.de>
[ Upstream commit 248ba8ec05a2c3b118c2224e57eb10c128176ab1 ]
Currently we are reading an uninitialized value for the max_delay
variable when snooping an MLD query message of invalid length and would
update our timers with that.
Fixing this by simply ignoring such broken MLD queries (just like we do
for IGMP already).
This is a regression introduced by:
"bridge: disable snooping if there is no querier" (b00589af3b04)
Reported-by: Paul Bolle <pebolle@tiscali.nl>
Signed-off-by: Linus Lüssing <linus.luessing@web.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/bridge/br_multicast.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index 155bc05..e4b8742 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -1167,7 +1167,7 @@ static int br_ip6_multicast_query(struct net_bridge *br,
max_delay = msecs_to_jiffies(ntohs(mld->mld_maxdelay));
if (max_delay)
group = &mld->mld_mca;
- } else if (skb->len >= sizeof(*mld2q)) {
+ } else {
if (!pskb_may_pull(skb, sizeof(*mld2q))) {
err = -EINVAL;
goto out;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 009/104] tcp: cubic: fix overflow error in bictcp_update()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (7 preceding siblings ...)
2013-10-10 15:40 ` [PATCH 008/104] bridge: don't try to update timers in case of broken MLD queries Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:40 ` [PATCH 010/104] tcp: cubic: fix bug in bictcp_acked() Kamal Mostafa
` (95 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Eric Dumazet, Neal Cardwell, Yuchung Cheng, Stephen Hemminger,
David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <edumazet@google.com>
[ Upstream commit 2ed0edf9090bf4afa2c6fc4f38575a85a80d4b20 ]
commit 17a6e9f1aa9 ("tcp_cubic: fix clock dependency") added an
overflow error in bictcp_update() in following code :
/* change the unit from HZ to bictcp_HZ */
t = ((tcp_time_stamp + msecs_to_jiffies(ca->delay_min>>3) -
ca->epoch_start) << BICTCP_HZ) / HZ;
Because msecs_to_jiffies() being unsigned long, compiler does
implicit type promotion.
We really want to constrain (tcp_time_stamp - ca->epoch_start)
to a signed 32bit value, or else 't' has unexpected high values.
This bugs triggers an increase of retransmit rates ~24 days after
boot [1], as the high order bit of tcp_time_stamp flips.
[1] for hosts with HZ=1000
Big thanks to Van Jacobson for spotting this problem.
Diagnosed-by: Van Jacobson <vanj@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/ipv4/tcp_cubic.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c
index a9077f4..b6b591f 100644
--- a/net/ipv4/tcp_cubic.c
+++ b/net/ipv4/tcp_cubic.c
@@ -206,8 +206,8 @@ static u32 cubic_root(u64 a)
*/
static inline void bictcp_update(struct bictcp *ca, u32 cwnd)
{
- u64 offs;
- u32 delta, t, bic_target, max_cnt;
+ u32 delta, bic_target, max_cnt;
+ u64 offs, t;
ca->ack_cnt++; /* count the number of ACKs */
@@ -250,9 +250,11 @@ static inline void bictcp_update(struct bictcp *ca, u32 cwnd)
* if the cwnd < 1 million packets !!!
*/
+ t = (s32)(tcp_time_stamp - ca->epoch_start);
+ t += msecs_to_jiffies(ca->delay_min >> 3);
/* change the unit from HZ to bictcp_HZ */
- t = ((tcp_time_stamp + msecs_to_jiffies(ca->delay_min>>3)
- - ca->epoch_start) << BICTCP_HZ) / HZ;
+ t <<= BICTCP_HZ;
+ do_div(t, HZ);
if (t < ca->bic_K) /* t - K */
offs = ca->bic_K - t;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 010/104] tcp: cubic: fix bug in bictcp_acked()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (8 preceding siblings ...)
2013-10-10 15:40 ` [PATCH 009/104] tcp: cubic: fix overflow error in bictcp_update() Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:40 ` [PATCH 011/104] ipv6: don't stop backtracking in fib6_lookup_1 if subtree does not match Kamal Mostafa
` (94 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Eric Dumazet, Neal Cardwell, Yuchung Cheng, David S. Miller,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <edumazet@google.com>
[ Upstream commit cd6b423afd3c08b27e1fed52db828ade0addbc6b ]
While investigating about strange increase of retransmit rates
on hosts ~24 days after boot, Van found hystart was disabled
if ca->epoch_start was 0, as following condition is true
when tcp_time_stamp high order bit is set.
(s32)(tcp_time_stamp - ca->epoch_start) < HZ
Quoting Van :
At initialization & after every loss ca->epoch_start is set to zero so
I believe that the above line will turn off hystart as soon as the 2^31
bit is set in tcp_time_stamp & hystart will stay off for 24 days.
I think we've observed that cubic's restart is too aggressive without
hystart so this might account for the higher drop rate we observe.
Diagnosed-by: Van Jacobson <vanj@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/ipv4/tcp_cubic.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c
index b6b591f..b6ae92a 100644
--- a/net/ipv4/tcp_cubic.c
+++ b/net/ipv4/tcp_cubic.c
@@ -416,7 +416,7 @@ static void bictcp_acked(struct sock *sk, u32 cnt, s32 rtt_us)
return;
/* Discard delay samples right after fast recovery */
- if ((s32)(tcp_time_stamp - ca->epoch_start) < HZ)
+ if (ca->epoch_start && (s32)(tcp_time_stamp - ca->epoch_start) < HZ)
return;
delay = (rtt_us << 3) / USEC_PER_MSEC;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 011/104] ipv6: don't stop backtracking in fib6_lookup_1 if subtree does not match
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (9 preceding siblings ...)
2013-10-10 15:40 ` [PATCH 010/104] tcp: cubic: fix bug in bictcp_acked() Kamal Mostafa
@ 2013-10-10 15:40 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 012/104] 8139cp: Fix skb leak in rx_status_loop failure path Kamal Mostafa
` (93 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:40 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: YOSHIFUJI Hideaki, David Lamparter, boutier, Hannes Frederic Sowa,
David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Hannes Frederic Sowa <hannes@stressinduktion.org>
[ Upstream commit 3e3be275851bc6fc90bfdcd732cd95563acd982b ]
In case a subtree did not match we currently stop backtracking and return
NULL (root table from fib_lookup). This could yield in invalid routing
table lookups when using subtrees.
Instead continue to backtrack until a valid subtree or node is found
and return this match.
Also remove unneeded NULL check.
Reported-by: Teco Boot <teco@inf-net.nl>
Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Cc: David Lamparter <equinox@diac24.net>
Cc: <boutier@pps.univ-paris-diderot.fr>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/ipv6/ip6_fib.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
index e67039f..7c39aa6 100644
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -995,14 +995,22 @@ static struct fib6_node * fib6_lookup_1(struct fib6_node *root,
if (ipv6_prefix_equal(&key->addr, args->addr, key->plen)) {
#ifdef CONFIG_IPV6_SUBTREES
- if (fn->subtree)
- fn = fib6_lookup_1(fn->subtree, args + 1);
+ if (fn->subtree) {
+ struct fib6_node *sfn;
+ sfn = fib6_lookup_1(fn->subtree,
+ args + 1);
+ if (!sfn)
+ goto backtrack;
+ fn = sfn;
+ }
#endif
- if (!fn || fn->fn_flags & RTN_RTINFO)
+ if (fn->fn_flags & RTN_RTINFO)
return fn;
}
}
-
+#ifdef CONFIG_IPV6_SUBTREES
+backtrack:
+#endif
if (fn->fn_flags & RTN_ROOT)
break;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 012/104] 8139cp: Fix skb leak in rx_status_loop failure path.
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (10 preceding siblings ...)
2013-10-10 15:40 ` [PATCH 011/104] ipv6: don't stop backtracking in fib6_lookup_1 if subtree does not match Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 013/104] tun: signedness bug in tun_get_user() Kamal Mostafa
` (92 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Dave Jones, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Jones <davej@redhat.com>
[ Upstream commit d06f5187469eee1b2932c02fd093d113cfc60d5e ]
Introduced in cf3c4c03060b688cbc389ebc5065ebcce5653e96
("8139cp: Add dma_mapping_error checking")
Signed-off-by: Dave Jones <davej@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/ethernet/realtek/8139cp.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
index 9af14e0..35014cf 100644
--- a/drivers/net/ethernet/realtek/8139cp.c
+++ b/drivers/net/ethernet/realtek/8139cp.c
@@ -524,6 +524,7 @@ rx_status_loop:
PCI_DMA_FROMDEVICE);
if (dma_mapping_error(&cp->pdev->dev, new_mapping)) {
dev->stats.rx_dropped++;
+ kfree_skb(new_skb);
goto rx_next;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 013/104] tun: signedness bug in tun_get_user()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (11 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 012/104] 8139cp: Fix skb leak in rx_status_loop failure path Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 014/104] ipv6: remove max_addresses check from ipv6_create_tempaddr Kamal Mostafa
` (91 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Dan Carpenter, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <dan.carpenter@oracle.com>
[ Upstream commit 15718ea0d844e4816dbd95d57a8a0e3e264ba90e ]
The recent fix d9bf5f1309 "tun: compare with 0 instead of total_len" is
not totally correct. Because "len" and "sizeof()" are size_t type, that
means they are never less than zero.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/tun.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 340cee2..441c987 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1077,8 +1077,9 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
u32 rxhash;
if (!(tun->flags & TUN_NO_PI)) {
- if ((len -= sizeof(pi)) > total_len)
+ if (len < sizeof(pi))
return -EINVAL;
+ len -= sizeof(pi);
if (memcpy_fromiovecend((void *)&pi, iv, 0, sizeof(pi)))
return -EFAULT;
@@ -1086,8 +1087,9 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
}
if (tun->flags & TUN_VNET_HDR) {
- if ((len -= tun->vnet_hdr_sz) > total_len)
+ if (len < tun->vnet_hdr_sz)
return -EINVAL;
+ len -= tun->vnet_hdr_sz;
if (memcpy_fromiovecend((void *)&gso, iv, offset, sizeof(gso)))
return -EFAULT;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 014/104] ipv6: remove max_addresses check from ipv6_create_tempaddr
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (12 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 013/104] tun: signedness bug in tun_get_user() Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 015/104] ipv6: Store Router Alert option in IP6CB directly Kamal Mostafa
` (90 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Ding Tianhong, George Kargiotakis, P J P, YOSHIFUJI Hideaki,
Hannes Frederic Sowa, David S. Miller, Luis Henriques,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Hannes Frederic Sowa <hannes@stressinduktion.org>
commit 4b08a8f1bd8cb4541c93ec170027b4d0782dab52 upstream.
Because of the max_addresses check attackers were able to disable privacy
extensions on an interface by creating enough autoconfigured addresses:
<http://seclists.org/oss-sec/2012/q4/292>
But the check is not actually needed: max_addresses protects the
kernel to install too many ipv6 addresses on an interface and guards
addrconf_prefix_rcv to install further addresses as soon as this limit
is reached. We only generate temporary addresses in direct response of
a new address showing up. As soon as we filled up the maximum number of
addresses of an interface, we stop installing more addresses and thus
also stop generating more temp addresses.
Even if the attacker tries to generate a lot of temporary addresses
by announcing a prefix and removing it again (lifetime == 0) we won't
install more temp addresses, because the temporary addresses do count
to the maximum number of addresses, thus we would stop installing new
autoconfigured addresses when the limit is reached.
This patch fixes CVE-2013-0343 (but other layer-2 attacks are still
possible).
Thanks to Ding Tianhong to bring this topic up again.
Cc: Ding Tianhong <dingtianhong@huawei.com>
Cc: George Kargiotakis <kargig@void.gr>
Cc: P J P <ppandit@redhat.com>
Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Acked-by: Ding Tianhong <dingtianhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[ luis: backported to 3.5: adjusted context ]
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/ipv6/addrconf.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 7b54fff..e169782 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -1046,12 +1046,10 @@ retry:
if (ifp->flags & IFA_F_OPTIMISTIC)
addr_flags |= IFA_F_OPTIMISTIC;
- ift = !max_addresses ||
- ipv6_count_addresses(idev) < max_addresses ?
- ipv6_add_addr(idev, &addr, tmp_plen,
- ipv6_addr_type(&addr)&IPV6_ADDR_SCOPE_MASK,
- addr_flags) : NULL;
- if (!ift || IS_ERR(ift)) {
+ ift = ipv6_add_addr(idev, &addr, tmp_plen,
+ ipv6_addr_type(&addr)&IPV6_ADDR_SCOPE_MASK,
+ addr_flags);
+ if (IS_ERR(ift)) {
in6_ifa_put(ifp);
in6_dev_put(idev);
pr_info("%s: retry temporary address regeneration\n", __func__);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 015/104] ipv6: Store Router Alert option in IP6CB directly.
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (13 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 014/104] ipv6: remove max_addresses check from ipv6_create_tempaddr Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 016/104] ipv6: drop packets with multiple fragmentation headers Kamal Mostafa
` (89 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: YOSHIFUJI Hideaki, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: =?UTF-8?q?YOSHIFUJI=20Hideaki=20/=20=E5=90=89=E8=97=A4=E8=8B=B1=E6?=
commit dd3332bfcb2223458f553f341d3388cb84040e6a upstream.
Router Alert option is very small and we can store the value
itself in the skb.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
[ kamal: 3.8.y-stable prereq for f46078cfcd77fa5165bf849f5e568a7ac5fa569c
"ipv6: drop packets with multiple fragmentation headers" ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
include/linux/ipv6.h | 3 ++-
include/uapi/linux/ipv6.h | 2 ++
net/ipv6/exthdrs.c | 3 ++-
net/ipv6/ip6_input.c | 5 ++---
4 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index faed1e3..8d766c2 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -89,7 +89,7 @@ static inline __u8 ipv6_tclass(const struct ipv6hdr *iph)
struct inet6_skb_parm {
int iif;
- __u16 ra;
+ __be16 ra;
__u16 hop;
__u16 dst0;
__u16 srcrt;
@@ -105,6 +105,7 @@ struct inet6_skb_parm {
#define IP6SKB_XFRM_TRANSFORMED 1
#define IP6SKB_FORWARDED 2
#define IP6SKB_REROUTED 4
+#define IP6SKB_ROUTERALERT 8
};
#define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb))
diff --git a/include/uapi/linux/ipv6.h b/include/uapi/linux/ipv6.h
index 5a2991c..4bda4cf 100644
--- a/include/uapi/linux/ipv6.h
+++ b/include/uapi/linux/ipv6.h
@@ -63,6 +63,8 @@ struct ipv6_opt_hdr {
#define ipv6_destopt_hdr ipv6_opt_hdr
#define ipv6_hopopt_hdr ipv6_opt_hdr
+/* Router Alert option values (RFC2711) */
+#define IPV6_OPT_ROUTERALERT_MLD 0x0000 /* MLD(RFC2710) */
/*
* routing header type 0 (used in cmsghdr struct)
diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c
index 473f628..07a7d65 100644
--- a/net/ipv6/exthdrs.c
+++ b/net/ipv6/exthdrs.c
@@ -553,7 +553,8 @@ static bool ipv6_hop_ra(struct sk_buff *skb, int optoff)
const unsigned char *nh = skb_network_header(skb);
if (nh[optoff + 1] == 2) {
- IP6CB(skb)->ra = optoff;
+ IP6CB(skb)->flags |= IP6SKB_ROUTERALERT;
+ memcpy(&IP6CB(skb)->ra, nh + optoff + 2, sizeof(IP6CB(skb)->ra));
return true;
}
LIMIT_NETDEBUG(KERN_DEBUG "ipv6_hop_ra: wrong RA length %d\n",
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
index dee9964..5345300 100644
--- a/net/ipv6/ip6_input.c
+++ b/net/ipv6/ip6_input.c
@@ -302,9 +302,8 @@ int ip6_mc_input(struct sk_buff *skb)
struct inet6_skb_parm *opt = IP6CB(skb);
/* Check for MLD */
- if (unlikely(opt->ra)) {
+ if (unlikely(opt->flags & IP6SKB_ROUTERALERT)) {
/* Check if this is a mld message */
- u8 *ptr = skb_network_header(skb) + opt->ra;
struct icmp6hdr *icmp6;
u8 nexthdr = hdr->nexthdr;
__be16 frag_off;
@@ -313,7 +312,7 @@ int ip6_mc_input(struct sk_buff *skb)
/* Check if the value of Router Alert
* is for MLD (0x0000).
*/
- if ((ptr[2] | ptr[3]) == 0) {
+ if (opt->ra == htons(IPV6_OPT_ROUTERALERT_MLD)) {
deliver = false;
if (!ipv6_ext_hdr(nexthdr)) {
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 016/104] ipv6: drop packets with multiple fragmentation headers
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (14 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 015/104] ipv6: Store Router Alert option in IP6CB directly Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 017/104] tcp: set timestamps for restored skb-s Kamal Mostafa
` (88 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: YOSHIFUJI Hideaki, Hannes Frederic Sowa, David S. Miller,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Hannes Frederic Sowa <hannes@stressinduktion.org>
[ Upstream commit f46078cfcd77fa5165bf849f5e568a7ac5fa569c ]
It is not allowed for an ipv6 packet to contain multiple fragmentation
headers. So discard packets which were already reassembled by
fragmentation logic and send back a parameter problem icmp.
The updates for RFC 6980 will come in later, I have to do a bit more
research here.
Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
include/linux/ipv6.h | 1 +
net/ipv6/reassembly.c | 5 +++++
2 files changed, 6 insertions(+)
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index 8d766c2..53d18b2 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -106,6 +106,7 @@ struct inet6_skb_parm {
#define IP6SKB_FORWARDED 2
#define IP6SKB_REROUTED 4
#define IP6SKB_ROUTERALERT 8
+#define IP6SKB_FRAGMENTED 16
};
#define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb))
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
index 7a610a6..1aa1434 100644
--- a/net/ipv6/reassembly.c
+++ b/net/ipv6/reassembly.c
@@ -487,6 +487,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
head->tstamp = fq->q.stamp;
ipv6_hdr(head)->payload_len = htons(payload_len);
IP6CB(head)->nhoff = nhoff;
+ IP6CB(head)->flags |= IP6SKB_FRAGMENTED;
/* Yes, and fold redundant checksum back. 8) */
if (head->ip_summed == CHECKSUM_COMPLETE)
@@ -521,6 +522,9 @@ static int ipv6_frag_rcv(struct sk_buff *skb)
struct net *net = dev_net(skb_dst(skb)->dev);
int evicted;
+ if (IP6CB(skb)->flags & IP6SKB_FRAGMENTED)
+ goto fail_hdr;
+
IP6_INC_STATS_BH(net, ip6_dst_idev(skb_dst(skb)), IPSTATS_MIB_REASMREQDS);
/* Jumbo payload inhibits frag. header */
@@ -541,6 +545,7 @@ static int ipv6_frag_rcv(struct sk_buff *skb)
ip6_dst_idev(skb_dst(skb)), IPSTATS_MIB_REASMOKS);
IP6CB(skb)->nhoff = (u8 *)fhdr - skb_network_header(skb);
+ IP6CB(skb)->flags |= IP6SKB_FRAGMENTED;
return 1;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 017/104] tcp: set timestamps for restored skb-s
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (15 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 016/104] ipv6: drop packets with multiple fragmentation headers Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 018/104] net: usb: Add HP hs2434 device to ZLP exception table Kamal Mostafa
` (87 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: David S. Miller, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Andrey Vagin, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrey Vagin <avagin@openvz.org>
[ Upstream commit 7ed5c5ae96d23da22de95e1c7a239537acd378b1 ]
When the repair mode is turned off, the write queue seqs are
updated so that the whole queue is considered to be 'already sent.
The "when" field must be set for such skb. It's used in tcp_rearm_rto
for example. If the "when" field isn't set, the retransmit timeout can
be calculated incorrectly and a tcp connected can stop for two minutes
(TCP_RTO_MAX).
Acked-by: Pavel Emelyanov <xemul@parallels.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Cc: James Morris <jmorris@namei.org>
Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Cc: Patrick McHardy <kaber@trash.net>
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/ipv4/tcp.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 425058e..2c108f7 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1124,6 +1124,13 @@ new_segment:
goto wait_for_memory;
/*
+ * All packets are restored as if they have
+ * already been sent.
+ */
+ if (tp->repair)
+ TCP_SKB_CB(skb)->when = tcp_time_stamp;
+
+ /*
* Check whether we can use HW checksum.
*/
if (sk->sk_route_caps & NETIF_F_ALL_CSUM)
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 018/104] net: usb: Add HP hs2434 device to ZLP exception table
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (16 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 017/104] tcp: set timestamps for restored skb-s Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 019/104] tcp: initialize rcv_tstamp for restored sockets Kamal Mostafa
` (86 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Rob Gardner, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Rob Gardner <robmatic@gmail.com>
[ Upstream commit 03803a59e32453ee5737c6096a295f748f03cc49 ]
This patch adds another entry (HP hs2434 Mobile Broadband) to the list
of exceptional devices that require a zero length packet in order to
function properly. This list was added in commit 844e88f0. The hs2434
is manufactured by Sierra Wireless, who also produces the MC7710,
which the ZLP exception list was created for in the first place. So
hopefully it is just this one producer's devices that will need this
workaround.
Tested on a DM1-4310NR HP notebook, which does not function without this
change.
Signed-off-by: Rob Gardner <robmatic@gmail.com>
Acked-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/usb/cdc_mbim.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/usb/cdc_mbim.c b/drivers/net/usb/cdc_mbim.c
index 6bd9167..353d0b8 100644
--- a/drivers/net/usb/cdc_mbim.c
+++ b/drivers/net/usb/cdc_mbim.c
@@ -395,6 +395,10 @@ static const struct usb_device_id mbim_devs[] = {
{ USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x68a2, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
.driver_info = (unsigned long)&cdc_mbim_info_zlp,
},
+ /* HP hs2434 Mobile Broadband Module needs ZLPs */
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3f0, 0x4b1d, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
+ .driver_info = (unsigned long)&cdc_mbim_info_zlp,
+ },
{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
.driver_info = (unsigned long)&cdc_mbim_info,
},
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 019/104] tcp: initialize rcv_tstamp for restored sockets
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (17 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 018/104] net: usb: Add HP hs2434 device to ZLP exception table Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 020/104] ipv4: sendto/hdrincl: don't use destination address found in header Kamal Mostafa
` (85 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Pavel Emelyanov, Eric Dumazet, David S. Miller, Alexey Kuznetsov,
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Andrey Vagin,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrew Vagin <avagin@openvz.org>
[ Upstream commit c7781a6e3c4a9a17e144ec2db00ebfea327bd627 ]
u32 rcv_tstamp; /* timestamp of last received ACK */
Its value used in tcp_retransmit_timer, which closes socket
if the last ack was received more then TCP_RTO_MAX ago.
Currently rcv_tstamp is initialized to zero and if tcp_retransmit_timer
is called before receiving a first ack, the connection is closed.
This patch initializes rcv_tstamp to a timestamp, when a socket was
restored.
Cc: Pavel Emelyanov <xemul@parallels.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Cc: James Morris <jmorris@namei.org>
Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Cc: Patrick McHardy <kaber@trash.net>
Reported-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/ipv4/tcp_output.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 18b6e16..0bdd879 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2884,6 +2884,8 @@ void tcp_connect_init(struct sock *sk)
if (likely(!tp->repair))
tp->rcv_nxt = 0;
+ else
+ tp->rcv_tstamp = tcp_time_stamp;
tp->rcv_wup = tp->rcv_nxt;
tp->copied_seq = tp->rcv_nxt;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 020/104] ipv4: sendto/hdrincl: don't use destination address found in header
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (18 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 019/104] tcp: initialize rcv_tstamp for restored sockets Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 021/104] tcp: tcp_make_synack() should use sock_wmalloc Kamal Mostafa
` (84 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Chris Clark, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Clark <chris.clark@alcatel-lucent.com>
[ Upstream commit c27c9322d015dc1d9dfdf31724fca71c0476c4d1 ]
ipv4: raw_sendmsg: don't use header's destination address
A sendto() regression was bisected and found to start with commit
f8126f1d5136be1 (ipv4: Adjust semantics of rt->rt_gateway.)
The problem is that it tries to ARP-lookup the constructed packet's
destination address rather than the explicitly provided address.
Fix this using FLOWI_FLAG_KNOWN_NH so that given nexthop is used.
cf. commit 2ad5b9e4bd314fc685086b99e90e5de3bc59e26b
Reported-by: Chris Clark <chris.clark@alcatel-lucent.com>
Bisected-by: Chris Clark <chris.clark@alcatel-lucent.com>
Tested-by: Chris Clark <chris.clark@alcatel-lucent.com>
Suggested-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Chris Clark <chris.clark@alcatel-lucent.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/ipv4/raw.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
index 6f08991..47b4797 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
@@ -573,7 +573,8 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos,
RT_SCOPE_UNIVERSE,
inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol,
- inet_sk_flowi_flags(sk) | FLOWI_FLAG_CAN_SLEEP,
+ inet_sk_flowi_flags(sk) | FLOWI_FLAG_CAN_SLEEP |
+ (inet->hdrincl ? FLOWI_FLAG_KNOWN_NH : 0),
daddr, saddr, 0, 0);
if (!inet->hdrincl) {
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 021/104] tcp: tcp_make_synack() should use sock_wmalloc
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (19 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 020/104] ipv4: sendto/hdrincl: don't use destination address found in header Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 022/104] tipc: set sk_err correctly when connection fails Kamal Mostafa
` (83 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Phil Oester, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Phil Oester <kernel@linuxace.com>
commit eb8895debe1baba41fcb62c78a16f0c63c21662a upstream.
In commit 90ba9b19 (tcp: tcp_make_synack() can use alloc_skb()), Eric changed
the call to sock_wmalloc in tcp_make_synack to alloc_skb. In doing so,
the netfilter owner match lost its ability to block the SYNACK packet on
outbound listening sockets. Revert the change, restoring the owner match
functionality.
This closes netfilter bugzilla #847.
Signed-off-by: Phil Oester <kernel@linuxace.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[ kamal: backport to 3.8 ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/ipv4/tcp_output.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 0bdd879..436d8fb 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2705,8 +2705,8 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst,
if (cvp != NULL && cvp->s_data_constant && cvp->s_data_desired)
s_data_desired = cvp->s_data_desired;
- skb = alloc_skb(MAX_TCP_HEADER + 15 + s_data_desired,
- sk_gfp_atomic(sk, GFP_ATOMIC));
+ skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15 + s_data_desired, 1,
+ GFP_ATOMIC);
if (unlikely(!skb)) {
dst_release(dst);
return NULL;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 022/104] tipc: set sk_err correctly when connection fails
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (20 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 021/104] tcp: tcp_make_synack() should use sock_wmalloc Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 023/104] net: bridge: convert MLDv2 Query MRC into msecs_to_jiffies for max_delay Kamal Mostafa
` (82 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Erik Hugne, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Erik Hugne <erik.hugne@ericsson.com>
[ Upstream commit 2c8d85182348021fc0a1bed193a4be4161dc8364 ]
Should a connect fail, if the publication/server is unavailable or
due to some other error, a positive value will be returned and errno
is never set. If the application code checks for an explicit zero
return from connect (success) or a negative return (failure), it
will not catch the error and subsequent send() calls will fail as
shown from the strace snippet below.
socket(0x1e /* PF_??? */, SOCK_SEQPACKET, 0) = 3
connect(3, {sa_family=0x1e /* AF_??? */, sa_data="\2\1\322\4\0\0\322\4\0\0\0\0\0\0"}, 16) = 111
sendto(3, "test", 4, 0, NULL, 0) = -1 EPIPE (Broken pipe)
The reason for this behaviour is that TIPC wrongly inverts error
codes set in sk_err.
Signed-off-by: Erik Hugne <erik.hugne@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/tipc/socket.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index fc906d9..f6a8b59 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -1223,7 +1223,7 @@ static u32 filter_connect(struct tipc_sock *tsock, struct sk_buff **buf)
/* Accept only ACK or NACK message */
if (unlikely(msg_errcode(msg))) {
sock->state = SS_DISCONNECTING;
- sk->sk_err = -ECONNREFUSED;
+ sk->sk_err = ECONNREFUSED;
retval = TIPC_OK;
break;
}
@@ -1234,7 +1234,7 @@ static u32 filter_connect(struct tipc_sock *tsock, struct sk_buff **buf)
res = auto_connect(sock, msg);
if (res) {
sock->state = SS_DISCONNECTING;
- sk->sk_err = res;
+ sk->sk_err = -res;
retval = TIPC_OK;
break;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 023/104] net: bridge: convert MLDv2 Query MRC into msecs_to_jiffies for max_delay
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (21 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 022/104] tipc: set sk_err correctly when connection fails Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 024/104] ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO Kamal Mostafa
` (81 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Daniel Borkmann, Linus Lüssing, Hannes Frederic Sowa,
David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Borkmann <dborkman@redhat.com>
[ Upstream commit 2d98c29b6fb3de44d9eaa73c09f9cf7209346383 ]
While looking into MLDv1/v2 code, I noticed that bridging code does
not convert it's max delay into jiffies for MLDv2 messages as we do
in core IPv6' multicast code.
RFC3810, 5.1.3. Maximum Response Code says:
The Maximum Response Code field specifies the maximum time allowed
before sending a responding Report. The actual time allowed, called
the Maximum Response Delay, is represented in units of milliseconds,
and is derived from the Maximum Response Code as follows: [...]
As we update timers that work with jiffies, we need to convert it.
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Cc: Linus Lüssing <linus.luessing@web.de>
Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/bridge/br_multicast.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index e4b8742..4a51874 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -1175,7 +1175,8 @@ static int br_ip6_multicast_query(struct net_bridge *br,
mld2q = (struct mld2_query *)icmp6_hdr(skb);
if (!mld2q->mld2q_nsrcs)
group = &mld2q->mld2q_mca;
- max_delay = mld2q->mld2q_mrc ? MLDV2_MRC(ntohs(mld2q->mld2q_mrc)) : 1;
+
+ max_delay = max(msecs_to_jiffies(MLDV2_MRC(ntohs(mld2q->mld2q_mrc))), 1UL);
}
if (!group)
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 024/104] ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (22 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 023/104] net: bridge: convert MLDv2 Query MRC into msecs_to_jiffies for max_delay Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 025/104] tg3: Don't turn off led on 5719 serdes port 0 Kamal Mostafa
` (80 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Jiri Bohac, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiri Bohac <jbohac@suse.cz>
[ Upstream commit 61e76b178dbe7145e8d6afa84bb4ccea71918994 ]
RFC 4443 has defined two additional codes for ICMPv6 type 1 (destination
unreachable) messages:
5 - Source address failed ingress/egress policy
6 - Reject route to destination
Now they are treated as protocol error and icmpv6_err_convert() converts them
to EPROTO.
RFC 4443 says:
"Codes 5 and 6 are more informative subsets of code 1."
Treat codes 5 and 6 as code 1 (EACCES)
Btw, connect() returning -EPROTO confuses firefox, so that fallback to
other/IPv4 addresses does not work:
https://bugzilla.mozilla.org/show_bug.cgi?id=910773
Signed-off-by: Jiri Bohac <jbohac@suse.cz>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
include/uapi/linux/icmpv6.h | 2 ++
net/ipv6/icmp.c | 10 +++++++++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/include/uapi/linux/icmpv6.h b/include/uapi/linux/icmpv6.h
index e0133c7..590beda 100644
--- a/include/uapi/linux/icmpv6.h
+++ b/include/uapi/linux/icmpv6.h
@@ -115,6 +115,8 @@ struct icmp6hdr {
#define ICMPV6_NOT_NEIGHBOUR 2
#define ICMPV6_ADDR_UNREACH 3
#define ICMPV6_PORT_UNREACH 4
+#define ICMPV6_POLICY_FAIL 5
+#define ICMPV6_REJECT_ROUTE 6
/*
* Codes for Time Exceeded
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
index fff5bdd..7463f05 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
@@ -924,6 +924,14 @@ static const struct icmp6_err {
.err = ECONNREFUSED,
.fatal = 1,
},
+ { /* POLICY_FAIL */
+ .err = EACCES,
+ .fatal = 1,
+ },
+ { /* REJECT_ROUTE */
+ .err = EACCES,
+ .fatal = 1,
+ },
};
int icmpv6_err_convert(u8 type, u8 code, int *err)
@@ -935,7 +943,7 @@ int icmpv6_err_convert(u8 type, u8 code, int *err)
switch (type) {
case ICMPV6_DEST_UNREACH:
fatal = 1;
- if (code <= ICMPV6_PORT_UNREACH) {
+ if (code < ARRAY_SIZE(tab_unreach)) {
*err = tab_unreach[code].err;
fatal = tab_unreach[code].fatal;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 025/104] tg3: Don't turn off led on 5719 serdes port 0
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (23 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 024/104] ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 026/104] vhost_net: poll vhost queue after marking DMA is done Kamal Mostafa
` (79 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Nithin Nayak Sujir, Michael Chan, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Nithin Sujir <nsujir@broadcom.com>
[ Upstream commit 989038e217e94161862a959e82f9a1ecf8dda152 ]
Turning off led on port 0 of the 5719 serdes causes all other ports to
lose power and stop functioning. Add tg3_phy_led_bug() function to check
for this condition. We use a switch() in tg3_phy_led_bug() for
consistency with the tg3_phy_power_bug() function.
Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[ kamal: backport to 3.8 (context) ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/ethernet/broadcom/tg3.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 929a092..0ffe6c0 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -2921,6 +2921,19 @@ static bool tg3_phy_power_bug(struct tg3 *tp)
return false;
}
+static bool tg3_phy_led_bug(struct tg3 *tp)
+{
+ switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
+ case ASIC_REV_5719:
+ if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
+ !tp->pci_fn)
+ return true;
+ return false;
+ }
+
+ return false;
+}
+
static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
{
u32 val;
@@ -2965,8 +2978,9 @@ static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
}
return;
} else if (do_low_power) {
- tg3_writephy(tp, MII_TG3_EXT_CTRL,
- MII_TG3_EXT_CTRL_FORCE_LED_OFF);
+ if (!tg3_phy_led_bug(tp))
+ tg3_writephy(tp, MII_TG3_EXT_CTRL,
+ MII_TG3_EXT_CTRL_FORCE_LED_OFF);
val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 026/104] vhost_net: poll vhost queue after marking DMA is done
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (24 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 025/104] tg3: Don't turn off led on 5719 serdes port 0 Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 027/104] net: ipv6: tcp: fix potential use after free in tcp_v6_do_rcv Kamal Mostafa
` (78 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Jason Wang, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Jason Wang <jasowang@redhat.com>
[ Upstream commit 19c73b3e08d16ee923f3962df4abf6205127896a ]
We used to poll vhost queue before making DMA is done, this is racy if vhost
thread were waked up before marking DMA is done which can result the signal to
be missed. Fix this by always polling the vhost thread before DMA is done.
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[ kamal: backport to 3.8 ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/vhost/net.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index dfff647..b8dfb94 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -210,6 +210,11 @@ static void vhost_zerocopy_callback(struct ubuf_info *ubuf, bool success)
struct vhost_virtqueue *vq = ubufs->vq;
int cnt = atomic_read(&ubufs->kref.refcount);
+ /* set len to mark this desc buffers done DMA */
+ vq->heads[ubuf->desc].len = success ?
+ VHOST_DMA_DONE_LEN : VHOST_DMA_FAILED_LEN;
+ vhost_ubuf_put(ubufs);
+
/*
* Trigger polling thread if guest stopped submitting new buffers:
* in this case, the refcount after decrement will eventually reach 1
@@ -220,10 +225,6 @@ static void vhost_zerocopy_callback(struct ubuf_info *ubuf, bool success)
*/
if (cnt <= 2 || !(cnt % 16))
vhost_poll_queue(&vq->poll);
- /* set len to mark this desc buffers done DMA */
- vq->heads[ubuf->desc].len = success ?
- VHOST_DMA_DONE_LEN : VHOST_DMA_FAILED_LEN;
- vhost_ubuf_put(ubufs);
}
/* Expects to be always run from workqueue - which acts as
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 027/104] net: ipv6: tcp: fix potential use after free in tcp_v6_do_rcv
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (25 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 026/104] vhost_net: poll vhost queue after marking DMA is done Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 028/104] drm/radeon/si: Add support for CP DMA to CS checker for compute v2 Kamal Mostafa
` (77 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Daniel Borkmann, Eric Dumazet, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Borkmann <dborkman@redhat.com>
[ Upstream commit 3a1c756590633c0e86df606e5c618c190926a0df ]
In tcp_v6_do_rcv() code, when processing pkt options, we soley work
on our skb clone opt_skb that we've created earlier before entering
tcp_rcv_established() on our way. However, only in condition ...
if (np->rxopt.bits.rxtclass)
np->rcv_tclass = ipv6_get_dsfield(ipv6_hdr(skb));
... we work on skb itself. As we extract every other information out
of opt_skb in ipv6_pktoptions path, this seems wrong, since skb can
already be released by tcp_rcv_established() earlier on. When we try
to access it in ipv6_hdr(), we will dereference freed skb.
[ Bug added by commit 4c507d2897bd9b ("net: implement IP_RECVTOS for
IP_PKTOPTIONS") ]
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Acked-by: Jiri Benc <jbenc@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[ kamal: backport to 3.8 ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/ipv6/tcp_ipv6.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 4cc834a..2eb71b4 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -1468,7 +1468,7 @@ ipv6_pktoptions:
if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim)
np->mcast_hops = ipv6_hdr(opt_skb)->hop_limit;
if (np->rxopt.bits.rxtclass)
- np->rcv_tclass = ipv6_tclass(ipv6_hdr(skb));
+ np->rcv_tclass = ipv6_tclass(ipv6_hdr(opt_skb));
if (ipv6_opt_accepted(sk, opt_skb)) {
skb_set_owner_r(opt_skb, sk);
opt_skb = xchg(&np->pktoptions, opt_skb);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 028/104] drm/radeon/si: Add support for CP DMA to CS checker for compute v2
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (26 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 027/104] net: ipv6: tcp: fix potential use after free in tcp_v6_do_rcv Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 029/104] sfc: Fix efx_rx_buf_offset() for recycled pages Kamal Mostafa
` (76 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Tom Stellard, Alex Deucher, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Tom Stellard <thomas.stellard@amd.com>
commit e5b9e7503eb1f4884efa3b321d3cc47806779202 upstream.
Also add a new RADEON_INFO query to check that CP DMA packets are
supported on the compute ring.
CP DMA has been supported since the 3.8 kernel, but due to an oversight
we forgot to teach the CS checker that the CP DMA packet was legal for
the compute ring on Southern Islands GPUs.
This patch fixes a bug where the radeon driver will incorrectly reject a legal
CP DMA packet from user space. I would like to have the patch
backported to stable so that we don't have to require Mesa users to use a
bleeding edge kernel in order to take advantage of this feature which
is already present in the stable kernels (3.8 and newer).
v2:
- Don't bump kms version, so this patch can be backported to stable
kernels.
Signed-off-by: Tom Stellard <thomas.stellard@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
[ kamal: backport to 3.8 ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpu/drm/radeon/radeon_kms.c | 3 +
drivers/gpu/drm/radeon/si.c | 106 +++++++++++++++++++++---------------
include/uapi/drm/radeon_drm.h | 3 +
3 files changed, 67 insertions(+), 45 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
index bc36922..799ce63 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -381,6 +381,9 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
else
return -EINVAL;
break;
+ case RADEON_INFO_SI_CP_DMA_COMPUTE:
+ value = 1;
+ break;
default:
DRM_DEBUG_KMS("Invalid request %d\n", info->request);
return -EINVAL;
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 7742831..966b5e6 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -2622,13 +2622,64 @@ static int si_vm_packet3_ce_check(struct radeon_device *rdev,
return 0;
}
+static int si_vm_packet3_cp_dma_check(u32 *ib, u32 idx)
+{
+ u32 start_reg, reg, i;
+ u32 command = ib[idx + 4];
+ u32 info = ib[idx + 1];
+ u32 idx_value = ib[idx];
+ if (command & PACKET3_CP_DMA_CMD_SAS) {
+ /* src address space is register */
+ if (((info & 0x60000000) >> 29) == 0) {
+ start_reg = idx_value << 2;
+ if (command & PACKET3_CP_DMA_CMD_SAIC) {
+ reg = start_reg;
+ if (!si_vm_reg_valid(reg)) {
+ DRM_ERROR("CP DMA Bad SRC register\n");
+ return -EINVAL;
+ }
+ } else {
+ for (i = 0; i < (command & 0x1fffff); i++) {
+ reg = start_reg + (4 * i);
+ if (!si_vm_reg_valid(reg)) {
+ DRM_ERROR("CP DMA Bad SRC register\n");
+ return -EINVAL;
+ }
+ }
+ }
+ }
+ }
+ if (command & PACKET3_CP_DMA_CMD_DAS) {
+ /* dst address space is register */
+ if (((info & 0x00300000) >> 20) == 0) {
+ start_reg = ib[idx + 2];
+ if (command & PACKET3_CP_DMA_CMD_DAIC) {
+ reg = start_reg;
+ if (!si_vm_reg_valid(reg)) {
+ DRM_ERROR("CP DMA Bad DST register\n");
+ return -EINVAL;
+ }
+ } else {
+ for (i = 0; i < (command & 0x1fffff); i++) {
+ reg = start_reg + (4 * i);
+ if (!si_vm_reg_valid(reg)) {
+ DRM_ERROR("CP DMA Bad DST register\n");
+ return -EINVAL;
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
+
static int si_vm_packet3_gfx_check(struct radeon_device *rdev,
u32 *ib, struct radeon_cs_packet *pkt)
{
+ int r;
u32 idx = pkt->idx + 1;
u32 idx_value = ib[idx];
u32 start_reg, end_reg, reg, i;
- u32 command, info;
switch (pkt->opcode) {
case PACKET3_NOP:
@@ -2729,50 +2780,9 @@ static int si_vm_packet3_gfx_check(struct radeon_device *rdev,
}
break;
case PACKET3_CP_DMA:
- command = ib[idx + 4];
- info = ib[idx + 1];
- if (command & PACKET3_CP_DMA_CMD_SAS) {
- /* src address space is register */
- if (((info & 0x60000000) >> 29) == 0) {
- start_reg = idx_value << 2;
- if (command & PACKET3_CP_DMA_CMD_SAIC) {
- reg = start_reg;
- if (!si_vm_reg_valid(reg)) {
- DRM_ERROR("CP DMA Bad SRC register\n");
- return -EINVAL;
- }
- } else {
- for (i = 0; i < (command & 0x1fffff); i++) {
- reg = start_reg + (4 * i);
- if (!si_vm_reg_valid(reg)) {
- DRM_ERROR("CP DMA Bad SRC register\n");
- return -EINVAL;
- }
- }
- }
- }
- }
- if (command & PACKET3_CP_DMA_CMD_DAS) {
- /* dst address space is register */
- if (((info & 0x00300000) >> 20) == 0) {
- start_reg = ib[idx + 2];
- if (command & PACKET3_CP_DMA_CMD_DAIC) {
- reg = start_reg;
- if (!si_vm_reg_valid(reg)) {
- DRM_ERROR("CP DMA Bad DST register\n");
- return -EINVAL;
- }
- } else {
- for (i = 0; i < (command & 0x1fffff); i++) {
- reg = start_reg + (4 * i);
- if (!si_vm_reg_valid(reg)) {
- DRM_ERROR("CP DMA Bad DST register\n");
- return -EINVAL;
- }
- }
- }
- }
- }
+ r = si_vm_packet3_cp_dma_check(ib, idx);
+ if (r)
+ return r;
break;
default:
DRM_ERROR("Invalid GFX packet3: 0x%x\n", pkt->opcode);
@@ -2784,6 +2794,7 @@ static int si_vm_packet3_gfx_check(struct radeon_device *rdev,
static int si_vm_packet3_compute_check(struct radeon_device *rdev,
u32 *ib, struct radeon_cs_packet *pkt)
{
+ int r;
u32 idx = pkt->idx + 1;
u32 idx_value = ib[idx];
u32 start_reg, reg, i;
@@ -2856,6 +2867,11 @@ static int si_vm_packet3_compute_check(struct radeon_device *rdev,
return -EINVAL;
}
break;
+ case PACKET3_CP_DMA:
+ r = si_vm_packet3_cp_dma_check(ib, idx);
+ if (r)
+ return r;
+ break;
default:
DRM_ERROR("Invalid Compute packet3: 0x%x\n", pkt->opcode);
return -EINVAL;
diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
index eeda917..59c1b31 100644
--- a/include/uapi/drm/radeon_drm.h
+++ b/include/uapi/drm/radeon_drm.h
@@ -972,6 +972,9 @@ struct drm_radeon_cs {
#define RADEON_INFO_MAX_SE 0x12
/* max SH per SE */
#define RADEON_INFO_MAX_SH_PER_SE 0x13
+/* query if CP DMA is supported on the compute ring */
+#define RADEON_INFO_SI_CP_DMA_COMPUTE 0x17
+
struct drm_radeon_info {
uint32_t request;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 029/104] sfc: Fix efx_rx_buf_offset() for recycled pages
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (27 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 028/104] drm/radeon/si: Add support for CP DMA to CS checker for compute v2 Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 030/104] cfq: explicitly use 64bit divide operation for 64bit arguments Kamal Mostafa
` (75 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Ben Hutchings, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Ben Hutchings <bhutchings@solarflare.com>
This bug fix is only for stable branches older than 3.10. The bug was
fixed upstream by commit 2768935a4660 ('sfc: reuse pages to avoid DMA
mapping/unmapping costs'), but that change is totally unsuitable for
stable.
Commit b590ace09d51 ('sfc: Fix efx_rx_buf_offset() in the presence of
swiotlb') added an explicit page_offset member to struct
efx_rx_buffer, which must be set consistently with the u.page and
dma_addr fields. However, it failed to add the necessary assignment
in efx_resurrect_rx_buffer(). It also did not correct the calculation
of efx_rx_buffer::dma_addr in efx_resurrect_rx_buffer(), which assumes
that DMA-mapping a page will result in a page-aligned DMA address
(exactly what swiotlb violates).
Add the assignment of efx_rx_buffer::page_offset and change the
calculation of dma_addr to make use of it.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/ethernet/sfc/rx.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/sfc/rx.c b/drivers/net/ethernet/sfc/rx.c
index bb579a6..688d42e 100644
--- a/drivers/net/ethernet/sfc/rx.c
+++ b/drivers/net/ethernet/sfc/rx.c
@@ -302,8 +302,9 @@ static void efx_resurrect_rx_buffer(struct efx_rx_queue *rx_queue,
index = rx_queue->added_count & rx_queue->ptr_mask;
new_buf = efx_rx_buffer(rx_queue, index);
- new_buf->dma_addr = rx_buf->dma_addr ^ (PAGE_SIZE >> 1);
new_buf->u.page = rx_buf->u.page;
+ new_buf->page_offset = rx_buf->page_offset ^ (PAGE_SIZE >> 1);
+ new_buf->dma_addr = state->dma_addr + new_buf->page_offset;
new_buf->len = rx_buf->len;
new_buf->flags = EFX_RX_BUF_PAGE;
++rx_queue->added_count;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 030/104] cfq: explicitly use 64bit divide operation for 64bit arguments
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (28 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 029/104] sfc: Fix efx_rx_buf_offset() for recycled pages Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 031/104] cpqarray: fix info leak in ida_locked_ioctl() Kamal Mostafa
` (74 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Anatol Pomozov, Jens Axboe, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Anatol Pomozov <anatol.pomozov@gmail.com>
commit f3cff25f05f2ac29b2ee355e611b0657482f6f1d upstream.
'samples' is 64bit operant, but do_div() second parameter is 32.
do_div silently truncates high 32 bits and calculated result
is invalid.
In case if low 32bit of 'samples' are zeros then do_div() produces
kernel crash.
Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
block/cfq-iosched.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index e62e920..1a872282 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -1484,7 +1484,7 @@ static u64 cfqg_prfill_avg_queue_size(struct seq_file *sf,
if (samples) {
v = blkg_stat_read(&cfqg->stats.avg_queue_size_sum);
- do_div(v, samples);
+ v = div64_u64(v, samples);
}
__blkg_prfill_u64(sf, pd, v);
return 0;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 031/104] cpqarray: fix info leak in ida_locked_ioctl()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (29 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 030/104] cfq: explicitly use 64bit divide operation for 64bit arguments Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 032/104] cciss: fix info leak in cciss_ioctl32_passthru() Kamal Mostafa
` (73 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Dan Carpenter, Andrew Morton, Linus Torvalds, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <dan.carpenter@oracle.com>
commit 627aad1c01da6f881e7f98d71fd928ca0c316b1a upstream.
The pciinfo struct has a two byte hole after ->dev_fn so stack
information could be leaked to the user.
This was assigned CVE-2013-2147.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Mike Miller <mike.miller@hp.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/block/cpqarray.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c
index 3f08713..3997d04 100644
--- a/drivers/block/cpqarray.c
+++ b/drivers/block/cpqarray.c
@@ -1195,6 +1195,7 @@ out_passthru:
ida_pci_info_struct pciinfo;
if (!arg) return -EINVAL;
+ memset(&pciinfo, 0, sizeof(pciinfo));
pciinfo.bus = host->pci_dev->bus->number;
pciinfo.dev_fn = host->pci_dev->devfn;
pciinfo.board_id = host->board_id;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 032/104] cciss: fix info leak in cciss_ioctl32_passthru()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (30 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 031/104] cpqarray: fix info leak in ida_locked_ioctl() Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 033/104] drm/radeon/atom: workaround vbios bug in transmitter table on rs880 (v2) Kamal Mostafa
` (72 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Dan Carpenter, Andrew Morton, Linus Torvalds, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <dan.carpenter@oracle.com>
commit 58f09e00ae095e46ef9edfcf3a5fd9ccdfad065e upstream.
The arg64 struct has a hole after ->buf_size which isn't cleared. Or if
any of the calls to copy_from_user() fail then that would cause an
information leak as well.
This was assigned CVE-2013-2147.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Mike Miller <mike.miller@hp.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/block/cciss.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index d18b801..4b82bb4 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -1184,6 +1184,7 @@ static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode,
int err;
u32 cp;
+ memset(&arg64, 0, sizeof(arg64));
err = 0;
err |=
copy_from_user(&arg64.LUN_info, &arg32->LUN_info,
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 033/104] drm/radeon/atom: workaround vbios bug in transmitter table on rs880 (v2)
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (31 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 032/104] cciss: fix info leak in cciss_ioctl32_passthru() Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 034/104] drm/ast: fix the ast open key function Kamal Mostafa
` (71 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Alex Deucher, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <alexander.deucher@amd.com>
commit 91f3a6aaf280294b07c05dfe606e6c27b7ba3c72 upstream.
The OUTPUT_ENABLE action jumps past the point in the coder where
the data_offset is set on certain rs780 cards. This worked
previously because the OUTPUT_ENABLE action is always called
immediately after the ENABLE action so the data_offset remained
set. In 6f8bbaf568c7f2c497558bfd04654c0b9841ad57
(drm/radeon/atom: initialize more atom interpretor elements to 0),
we explictly reset data_offset to 0 between atom calls which then
caused this to fail. The fix is to just skip calling the
OUTPUT_ENABLE action on the problematic chipsets. The ENABLE
action does the same thing and more. Ultimately, we could
probably drop the OUTPUT_ENABLE action all together on DCE3
asics.
fixes:
https://bugzilla.kernel.org/show_bug.cgi?id=60791
v2: only rs880 seems to be affected
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpu/drm/radeon/atombios_encoders.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
index 8efd7e2..3b681de 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -1636,8 +1636,12 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
atombios_dig_encoder_setup(encoder, ATOM_ENABLE, 0);
atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0);
atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
- /* some early dce3.2 boards have a bug in their transmitter control table */
- if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730))
+ /* some dce3.x boards have a bug in their transmitter control table.
+ * ACTION_ENABLE_OUTPUT can probably be dropped since ACTION_ENABLE
+ * does the same thing and more.
+ */
+ if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730) &&
+ (rdev->family != CHIP_RS880))
atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
}
if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 034/104] drm/ast: fix the ast open key function
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (32 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 033/104] drm/radeon/atom: workaround vbios bug in transmitter table on rs880 (v2) Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 035/104] sched/fair: Fix small race where child->se.parent,cfs_rq might point to invalid ones Kamal Mostafa
` (70 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Dave Airlie, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Airlie <airlied@redhat.com>
commit 2e8378136f28bea960cec643d3fa5d843c9049ec upstream.
When porting from UMS I mistyped this from the wrong place, AST noticed
and pointed it out, so we should fix it to be like the X.org driver.
Reported-by: Y.C. Chen <yc_chen@aspeedtech.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpu/drm/ast/ast_drv.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
index cac9c9a..848f04b 100644
--- a/drivers/gpu/drm/ast/ast_drv.h
+++ b/drivers/gpu/drm/ast/ast_drv.h
@@ -175,7 +175,7 @@ uint8_t ast_get_index_reg_mask(struct ast_private *ast,
static inline void ast_open_key(struct ast_private *ast)
{
- ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xA1, 0xFF, 0x04);
+ ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0x80, 0xA8);
}
#define AST_VIDMEM_SIZE_8M 0x00800000
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 035/104] sched/fair: Fix small race where child->se.parent,cfs_rq might point to invalid ones
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (33 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 034/104] drm/ast: fix the ast open key function Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 036/104] tg3: Expand led off fix to include 5720 Kamal Mostafa
` (69 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Daisuke Nishimura, Peter Zijlstra, Ingo Molnar, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
commit 6c9a27f5da9609fca46cb2b183724531b48f71ad upstream.
There is a small race between copy_process() and cgroup_attach_task()
where child->se.parent,cfs_rq points to invalid (old) ones.
parent doing fork() | someone moving the parent to another cgroup
-------------------------------+---------------------------------------------
copy_process()
+ dup_task_struct()
-> parent->se is copied to child->se.
se.parent,cfs_rq of them point to old ones.
cgroup_attach_task()
+ cgroup_task_migrate()
-> parent->cgroup is updated.
+ cpu_cgroup_attach()
+ sched_move_task()
+ task_move_group_fair()
+- set_task_rq()
-> se.parent,cfs_rq of parent
are updated.
+ cgroup_fork()
-> parent->cgroup is copied to child->cgroup. (*1)
+ sched_fork()
+ task_fork_fair()
-> se.parent,cfs_rq of child are accessed
while they point to old ones. (*2)
In the worst case, this bug can lead to "use-after-free" and cause a panic,
because it's new cgroup's refcount that is incremented at (*1),
so the old cgroup(and related data) can be freed before (*2).
In fact, a panic caused by this bug was originally caught in RHEL6.4.
BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<ffffffff81051e3e>] sched_slice+0x6e/0xa0
[...]
Call Trace:
[<ffffffff81051f25>] place_entity+0x75/0xa0
[<ffffffff81056a3a>] task_fork_fair+0xaa/0x160
[<ffffffff81063c0b>] sched_fork+0x6b/0x140
[<ffffffff8106c3c2>] copy_process+0x5b2/0x1450
[<ffffffff81063b49>] ? wake_up_new_task+0xd9/0x130
[<ffffffff8106d2f4>] do_fork+0x94/0x460
[<ffffffff81072a9e>] ? sys_wait4+0xae/0x100
[<ffffffff81009598>] sys_clone+0x28/0x30
[<ffffffff8100b393>] stub_clone+0x13/0x20
[<ffffffff8100b072>] ? system_call_fastpath+0x16/0x1b
Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/039601ceae06$733d3130$59b79390$@mxp.nes.nec.co.jp
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
kernel/sched/fair.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 7d0374f..e9ab160 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5755,11 +5755,15 @@ static void task_fork_fair(struct task_struct *p)
cfs_rq = task_cfs_rq(current);
curr = cfs_rq->curr;
- if (unlikely(task_cpu(p) != this_cpu)) {
- rcu_read_lock();
- __set_task_cpu(p, this_cpu);
- rcu_read_unlock();
- }
+ /*
+ * Not only the cpu but also the task_group of the parent might have
+ * been changed after parent->se.parent,cfs_rq were copied to
+ * child->se.parent,cfs_rq. So call __set_task_cpu() to make those
+ * of child point to valid ones.
+ */
+ rcu_read_lock();
+ __set_task_cpu(p, this_cpu);
+ rcu_read_unlock();
update_curr(cfs_rq);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 036/104] tg3: Expand led off fix to include 5720
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (34 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 035/104] sched/fair: Fix small race where child->se.parent,cfs_rq might point to invalid ones Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 037/104] HID: provide a helper for validating hid reports Kamal Mostafa
` (68 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Nithin Nayak Sujir, Michael Chan, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Nithin Sujir <nsujir@broadcom.com>
commit 300cf9b93f74c3d969a0ad50bdac65416107c44c upstream.
Commit 989038e217e94161862a959e82f9a1ecf8dda152 ("tg3: Don't turn off
led on 5719 serdes port 0") added code to skip turning led off on port
0 of the 5719 since it powered down other ports. This workaround needs
to be enabled on the 5720 as well.
Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/ethernet/broadcom/tg3.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 0ffe6c0..79096af 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -2925,6 +2925,7 @@ static bool tg3_phy_led_bug(struct tg3 *tp)
{
switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
case ASIC_REV_5719:
+ case ASIC_REV_5720:
if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
!tp->pci_fn)
return true;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 037/104] HID: provide a helper for validating hid reports
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (35 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 036/104] tg3: Expand led off fix to include 5720 Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 038/104] HID: zeroplus: validate output report details Kamal Mostafa
` (67 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Kees Cook, Jiri Kosina, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <keescook@chromium.org>
commit 331415ff16a12147d57d5c953f3a961b7ede348b upstream.
Many drivers need to validate the characteristics of their HID report
during initialization to avoid misusing the reports. This adds a common
helper to perform validation of the report exisitng, the field existing,
and the expected number of values within the field.
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/hid/hid-core.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++
include/linux/hid.h | 4 ++++
2 files changed, 62 insertions(+)
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 869ead1..bf31892 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -760,6 +760,64 @@ int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size)
}
EXPORT_SYMBOL_GPL(hid_parse_report);
+static const char * const hid_report_names[] = {
+ "HID_INPUT_REPORT",
+ "HID_OUTPUT_REPORT",
+ "HID_FEATURE_REPORT",
+};
+/**
+ * hid_validate_values - validate existing device report's value indexes
+ *
+ * @device: hid device
+ * @type: which report type to examine
+ * @id: which report ID to examine (0 for first)
+ * @field_index: which report field to examine
+ * @report_counts: expected number of values
+ *
+ * Validate the number of values in a given field of a given report, after
+ * parsing.
+ */
+struct hid_report *hid_validate_values(struct hid_device *hid,
+ unsigned int type, unsigned int id,
+ unsigned int field_index,
+ unsigned int report_counts)
+{
+ struct hid_report *report;
+
+ if (type > HID_FEATURE_REPORT) {
+ hid_err(hid, "invalid HID report type %u\n", type);
+ return NULL;
+ }
+
+ if (id >= HID_MAX_IDS) {
+ hid_err(hid, "invalid HID report id %u\n", id);
+ return NULL;
+ }
+
+ /*
+ * Explicitly not using hid_get_report() here since it depends on
+ * ->numbered being checked, which may not always be the case when
+ * drivers go to access report values.
+ */
+ report = hid->report_enum[type].report_id_hash[id];
+ if (!report) {
+ hid_err(hid, "missing %s %u\n", hid_report_names[type], id);
+ return NULL;
+ }
+ if (report->maxfield <= field_index) {
+ hid_err(hid, "not enough fields in %s %u\n",
+ hid_report_names[type], id);
+ return NULL;
+ }
+ if (report->field[field_index]->report_count < report_counts) {
+ hid_err(hid, "not enough values in %s %u field %u\n",
+ hid_report_names[type], id, field_index);
+ return NULL;
+ }
+ return report;
+}
+EXPORT_SYMBOL_GPL(hid_validate_values);
+
/**
* hid_open_report - open a driver-specific device report
*
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 13d812b..a79219f 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -717,6 +717,10 @@ void hid_output_report(struct hid_report *report, __u8 *data);
struct hid_device *hid_allocate_device(void);
struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size);
+struct hid_report *hid_validate_values(struct hid_device *hid,
+ unsigned int type, unsigned int id,
+ unsigned int field_index,
+ unsigned int report_counts);
int hid_open_report(struct hid_device *device);
int hid_check_keys_pressed(struct hid_device *hid);
int hid_connect(struct hid_device *hid, unsigned int connect_mask);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 038/104] HID: zeroplus: validate output report details
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (36 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 037/104] HID: provide a helper for validating hid reports Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 039/104] HID: LG: validate HID " Kamal Mostafa
` (66 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Kees Cook, Jiri Kosina, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <keescook@chromium.org>
commit 78214e81a1bf43740ce89bb5efda78eac2f8ef83 upstream.
The zeroplus HID driver was not checking the size of allocated values
in fields it used. A HID device could send a malicious output report
that would cause the driver to write beyond the output report allocation
during initialization, causing a heap overflow:
[ 1442.728680] usb 1-1: New USB device found, idVendor=0c12, idProduct=0005
...
[ 1466.243173] BUG kmalloc-192 (Tainted: G W ): Redzone overwritten
CVE-2013-2889
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/hid/hid-zpff.c | 18 +++++-------------
1 file changed, 5 insertions(+), 13 deletions(-)
diff --git a/drivers/hid/hid-zpff.c b/drivers/hid/hid-zpff.c
index f6ba81d..f348f7f 100644
--- a/drivers/hid/hid-zpff.c
+++ b/drivers/hid/hid-zpff.c
@@ -70,21 +70,13 @@ static int zpff_init(struct hid_device *hid)
struct hid_report *report;
struct hid_input *hidinput = list_entry(hid->inputs.next,
struct hid_input, list);
- struct list_head *report_list =
- &hid->report_enum[HID_OUTPUT_REPORT].report_list;
struct input_dev *dev = hidinput->input;
- int error;
+ int i, error;
- if (list_empty(report_list)) {
- hid_err(hid, "no output report found\n");
- return -ENODEV;
- }
-
- report = list_entry(report_list->next, struct hid_report, list);
-
- if (report->maxfield < 4) {
- hid_err(hid, "not enough fields in report\n");
- return -ENODEV;
+ for (i = 0; i < 4; i++) {
+ report = hid_validate_values(hid, HID_OUTPUT_REPORT, 0, i, 1);
+ if (!report)
+ return -ENODEV;
}
zpff = kzalloc(sizeof(struct zpff_device), GFP_KERNEL);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 039/104] HID: LG: validate HID output report details
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (37 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 038/104] HID: zeroplus: validate output report details Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 040/104] HID: lenovo-tpkbd: validate " Kamal Mostafa
` (65 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Kees Cook, Jiri Kosina, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <keescook@chromium.org>
commit 0fb6bd06e06792469acc15bbe427361b56ada528 upstream.
A HID device could send a malicious output report that would cause the
lg, lg3, and lg4 HID drivers to write beyond the output report allocation
during an event, causing a heap overflow:
[ 325.245240] usb 1-1: New USB device found, idVendor=046d, idProduct=c287
...
[ 414.518960] BUG kmalloc-4096 (Not tainted): Redzone overwritten
Additionally, while lg2 did correctly validate the report details, it was
cleaned up and shortened.
CVE-2013-2893
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/hid/hid-lg2ff.c | 19 +++----------------
drivers/hid/hid-lg3ff.c | 29 ++++++-----------------------
drivers/hid/hid-lg4ff.c | 20 +-------------------
drivers/hid/hid-lgff.c | 17 ++---------------
4 files changed, 12 insertions(+), 73 deletions(-)
diff --git a/drivers/hid/hid-lg2ff.c b/drivers/hid/hid-lg2ff.c
index 3c31bc6..128f011 100644
--- a/drivers/hid/hid-lg2ff.c
+++ b/drivers/hid/hid-lg2ff.c
@@ -66,26 +66,13 @@ int lg2ff_init(struct hid_device *hid)
struct hid_report *report;
struct hid_input *hidinput = list_entry(hid->inputs.next,
struct hid_input, list);
- struct list_head *report_list =
- &hid->report_enum[HID_OUTPUT_REPORT].report_list;
struct input_dev *dev = hidinput->input;
int error;
- if (list_empty(report_list)) {
- hid_err(hid, "no output report found\n");
+ /* Check that the report looks ok */
+ report = hid_validate_values(hid, HID_OUTPUT_REPORT, 0, 0, 7);
+ if (!report)
return -ENODEV;
- }
-
- report = list_entry(report_list->next, struct hid_report, list);
-
- if (report->maxfield < 1) {
- hid_err(hid, "output report is empty\n");
- return -ENODEV;
- }
- if (report->field[0]->report_count < 7) {
- hid_err(hid, "not enough values in the field\n");
- return -ENODEV;
- }
lg2ff = kmalloc(sizeof(struct lg2ff_device), GFP_KERNEL);
if (!lg2ff)
diff --git a/drivers/hid/hid-lg3ff.c b/drivers/hid/hid-lg3ff.c
index f98644c..91f981f 100644
--- a/drivers/hid/hid-lg3ff.c
+++ b/drivers/hid/hid-lg3ff.c
@@ -68,10 +68,11 @@ static int hid_lg3ff_play(struct input_dev *dev, void *data,
int x, y;
/*
- * Maxusage should always be 63 (maximum fields)
- * likely a better way to ensure this data is clean
+ * Available values in the field should always be 63, but we only use up to
+ * 35. Instead, clear the entire area, however big it is.
*/
- memset(report->field[0]->value, 0, sizeof(__s32)*report->field[0]->maxusage);
+ memset(report->field[0]->value, 0,
+ sizeof(__s32) * report->field[0]->report_count);
switch (effect->type) {
case FF_CONSTANT:
@@ -131,32 +132,14 @@ static const signed short ff3_joystick_ac[] = {
int lg3ff_init(struct hid_device *hid)
{
struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list);
- struct list_head *report_list = &hid->report_enum[HID_OUTPUT_REPORT].report_list;
struct input_dev *dev = hidinput->input;
- struct hid_report *report;
- struct hid_field *field;
const signed short *ff_bits = ff3_joystick_ac;
int error;
int i;
- /* Find the report to use */
- if (list_empty(report_list)) {
- hid_err(hid, "No output report found\n");
- return -1;
- }
-
/* Check that the report looks ok */
- report = list_entry(report_list->next, struct hid_report, list);
- if (!report) {
- hid_err(hid, "NULL output report\n");
- return -1;
- }
-
- field = report->field[0];
- if (!field) {
- hid_err(hid, "NULL field\n");
- return -1;
- }
+ if (!hid_validate_values(hid, HID_OUTPUT_REPORT, 0, 0, 35))
+ return -ENODEV;
/* Assume single fixed device G940 */
for (i = 0; ff_bits[i] >= 0; i++)
diff --git a/drivers/hid/hid-lg4ff.c b/drivers/hid/hid-lg4ff.c
index d7947c7..7edeee0 100644
--- a/drivers/hid/hid-lg4ff.c
+++ b/drivers/hid/hid-lg4ff.c
@@ -487,34 +487,16 @@ static enum led_brightness lg4ff_led_get_brightness(struct led_classdev *led_cde
int lg4ff_init(struct hid_device *hid)
{
struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list);
- struct list_head *report_list = &hid->report_enum[HID_OUTPUT_REPORT].report_list;
struct input_dev *dev = hidinput->input;
- struct hid_report *report;
- struct hid_field *field;
struct lg4ff_device_entry *entry;
struct lg_drv_data *drv_data;
struct usb_device_descriptor *udesc;
int error, i, j;
__u16 bcdDevice, rev_maj, rev_min;
- /* Find the report to use */
- if (list_empty(report_list)) {
- hid_err(hid, "No output report found\n");
- return -1;
- }
-
/* Check that the report looks ok */
- report = list_entry(report_list->next, struct hid_report, list);
- if (!report) {
- hid_err(hid, "NULL output report\n");
+ if (!hid_validate_values(hid, HID_OUTPUT_REPORT, 0, 0, 7))
return -1;
- }
-
- field = report->field[0];
- if (!field) {
- hid_err(hid, "NULL field\n");
- return -1;
- }
/* Check what wheel has been connected */
for (i = 0; i < ARRAY_SIZE(lg4ff_devices); i++) {
diff --git a/drivers/hid/hid-lgff.c b/drivers/hid/hid-lgff.c
index 27bc54f..1d978daa 100644
--- a/drivers/hid/hid-lgff.c
+++ b/drivers/hid/hid-lgff.c
@@ -130,27 +130,14 @@ static void hid_lgff_set_autocenter(struct input_dev *dev, u16 magnitude)
int lgff_init(struct hid_device* hid)
{
struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list);
- struct list_head *report_list = &hid->report_enum[HID_OUTPUT_REPORT].report_list;
struct input_dev *dev = hidinput->input;
- struct hid_report *report;
- struct hid_field *field;
const signed short *ff_bits = ff_joystick;
int error;
int i;
- /* Find the report to use */
- if (list_empty(report_list)) {
- hid_err(hid, "No output report found\n");
- return -1;
- }
-
/* Check that the report looks ok */
- report = list_entry(report_list->next, struct hid_report, list);
- field = report->field[0];
- if (!field) {
- hid_err(hid, "NULL field\n");
- return -1;
- }
+ if (!hid_validate_values(hid, HID_OUTPUT_REPORT, 0, 0, 7))
+ return -ENODEV;
for (i = 0; i < ARRAY_SIZE(devices); i++) {
if (dev->id.vendor == devices[i].idVendor &&
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 040/104] HID: lenovo-tpkbd: validate output report details
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (38 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 039/104] HID: LG: validate HID " Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 041/104] HID: validate feature and input " Kamal Mostafa
` (64 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Kees Cook, Benjamin Tissoires, Jiri Kosina, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <keescook@chromium.org>
commit 0a9cd0a80ac559357c6a90d26c55270ed752aa26 upstream.
A HID device could send a malicious output report that would cause the
lenovo-tpkbd HID driver to write just beyond the output report allocation
during initialization, causing a heap overflow:
[ 76.109807] usb 1-1: New USB device found, idVendor=17ef, idProduct=6009
...
[ 80.462540] BUG kmalloc-192 (Tainted: G W ): Redzone overwritten
CVE-2013-2894
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/hid/hid-lenovo-tpkbd.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/hid/hid-lenovo-tpkbd.c b/drivers/hid/hid-lenovo-tpkbd.c
index cea016e..189a3fb 100644
--- a/drivers/hid/hid-lenovo-tpkbd.c
+++ b/drivers/hid/hid-lenovo-tpkbd.c
@@ -341,7 +341,15 @@ static int tpkbd_probe_tp(struct hid_device *hdev)
struct tpkbd_data_pointer *data_pointer;
size_t name_sz = strlen(dev_name(dev)) + 16;
char *name_mute, *name_micmute;
- int ret;
+ int i, ret;
+
+ /* Validate required reports. */
+ for (i = 0; i < 4; i++) {
+ if (!hid_validate_values(hdev, HID_FEATURE_REPORT, 4, i, 1))
+ return -ENODEV;
+ }
+ if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 3, 0, 2))
+ return -ENODEV;
if (sysfs_create_group(&hdev->dev.kobj,
&tpkbd_attr_group_pointer)) {
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 041/104] HID: validate feature and input report details
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (39 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 040/104] HID: lenovo-tpkbd: validate " Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 042/104] HID: logitech-dj: validate output " Kamal Mostafa
` (63 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Benjamin Tissoires, Jiri Kosina, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
commit cc6b54aa54bf40b762cab45a9fc8aa81653146eb upstream.
When dealing with usage_index, be sure to properly use unsigned instead of
int to avoid overflows.
When working on report fields, always validate that their report_counts are
in bounds.
Without this, a HID device could report a malicious feature report that
could trick the driver into a heap overflow:
[ 634.885003] usb 1-1: New USB device found, idVendor=0596, idProduct=0500
...
[ 676.469629] BUG kmalloc-192 (Tainted: G W ): Redzone overwritten
CVE-2013-2897
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/hid/hid-core.c | 16 +++++++---------
drivers/hid/hid-input.c | 11 ++++++++++-
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index bf31892..14744e0 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -94,7 +94,6 @@ EXPORT_SYMBOL_GPL(hid_register_report);
static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages, unsigned values)
{
struct hid_field *field;
- int i;
if (report->maxfield == HID_MAX_FIELDS) {
hid_err(report->device, "too many fields in report\n");
@@ -113,9 +112,6 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned
field->value = (s32 *)(field->usage + usages);
field->report = report;
- for (i = 0; i < usages; i++)
- field->usage[i].usage_index = i;
-
return field;
}
@@ -226,9 +222,9 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
{
struct hid_report *report;
struct hid_field *field;
- int usages;
+ unsigned usages;
unsigned offset;
- int i;
+ unsigned i;
report = hid_register_report(parser->device, report_type, parser->global.report_id);
if (!report) {
@@ -255,7 +251,8 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
if (!parser->local.usage_index) /* Ignore padding fields */
return 0;
- usages = max_t(int, parser->local.usage_index, parser->global.report_count);
+ usages = max_t(unsigned, parser->local.usage_index,
+ parser->global.report_count);
field = hid_register_field(report, usages, parser->global.report_count);
if (!field)
@@ -266,13 +263,14 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
field->application = hid_lookup_collection(parser, HID_COLLECTION_APPLICATION);
for (i = 0; i < usages; i++) {
- int j = i;
+ unsigned j = i;
/* Duplicate the last usage we parsed if we have excess values */
if (i >= parser->local.usage_index)
j = parser->local.usage_index - 1;
field->usage[i].hid = parser->local.usage[j];
field->usage[i].collection_index =
parser->local.collection_index[j];
+ field->usage[i].usage_index = i;
}
field->maxusage = usages;
@@ -1295,7 +1293,7 @@ int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
goto out;
}
- if (hid->claimed != HID_CLAIMED_HIDRAW) {
+ if (hid->claimed != HID_CLAIMED_HIDRAW && report->maxfield) {
for (a = 0; a < report->maxfield; a++)
hid_input_field(hid, report->field[a], cdata, interrupt);
}
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index f495ada..50487c2 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -484,6 +484,10 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
if (field->flags & HID_MAIN_ITEM_CONSTANT)
goto ignore;
+ /* Ignore if report count is out of bounds. */
+ if (field->report_count < 1)
+ goto ignore;
+
/* only LED usages are supported in output fields */
if (field->report_type == HID_OUTPUT_REPORT &&
(usage->hid & HID_USAGE_PAGE) != HID_UP_LED) {
@@ -1162,7 +1166,11 @@ static void report_features(struct hid_device *hid)
rep_enum = &hid->report_enum[HID_FEATURE_REPORT];
list_for_each_entry(rep, &rep_enum->report_list, list)
- for (i = 0; i < rep->maxfield; i++)
+ for (i = 0; i < rep->maxfield; i++) {
+ /* Ignore if report count is out of bounds. */
+ if (rep->field[i]->report_count < 1)
+ continue;
+
for (j = 0; j < rep->field[i]->maxusage; j++) {
/* Verify if Battery Strength feature is available */
hidinput_setup_battery(hid, HID_FEATURE_REPORT, rep->field[i]);
@@ -1171,6 +1179,7 @@ static void report_features(struct hid_device *hid)
drv->feature_mapping(hid, rep->field[i],
rep->field[i]->usage + j);
}
+ }
}
static struct hid_input *hidinput_allocate(struct hid_device *hid)
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 042/104] HID: logitech-dj: validate output report details
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (40 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 041/104] HID: validate feature and input " Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 043/104] HID: multitouch: validate indexes details Kamal Mostafa
` (62 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Kees Cook, Benjamin Tissoires, Jiri Kosina, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <keescook@chromium.org>
commit 297502abb32e225fb23801fcdb0e4f6f8e17099a upstream.
A HID device could send a malicious output report that would cause the
logitech-dj HID driver to leak kernel memory contents to the device, or
trigger a NULL dereference during initialization:
[ 304.424553] usb 1-1: New USB device found, idVendor=046d, idProduct=c52b
...
[ 304.780467] BUG: unable to handle kernel NULL pointer dereference at 0000000000000028
[ 304.781409] IP: [<ffffffff815d50aa>] logi_dj_recv_send_report.isra.11+0x1a/0x90
CVE-2013-2895
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/hid/hid-logitech-dj.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
index 8758f38c..4288123 100644
--- a/drivers/hid/hid-logitech-dj.c
+++ b/drivers/hid/hid-logitech-dj.c
@@ -462,7 +462,7 @@ static int logi_dj_recv_send_report(struct dj_receiver_dev *djrcv_dev,
struct hid_report *report;
struct hid_report_enum *output_report_enum;
u8 *data = (u8 *)(&dj_report->device_index);
- int i;
+ unsigned int i;
output_report_enum = &hdev->report_enum[HID_OUTPUT_REPORT];
report = output_report_enum->report_id_hash[REPORT_ID_DJ_SHORT];
@@ -472,7 +472,7 @@ static int logi_dj_recv_send_report(struct dj_receiver_dev *djrcv_dev,
return -ENODEV;
}
- for (i = 0; i < report->field[0]->report_count; i++)
+ for (i = 0; i < DJREPORT_SHORT_LENGTH - 1; i++)
report->field[0]->value[i] = data[i];
usbhid_submit_report(hdev, report, USB_DIR_OUT);
@@ -784,6 +784,12 @@ static int logi_dj_probe(struct hid_device *hdev,
goto hid_parse_fail;
}
+ if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, REPORT_ID_DJ_SHORT,
+ 0, DJREPORT_SHORT_LENGTH - 1)) {
+ retval = -ENODEV;
+ goto hid_parse_fail;
+ }
+
/* Starts the usb device and connects to upper interfaces hiddev and
* hidraw */
retval = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 043/104] HID: multitouch: validate indexes details
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (41 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 042/104] HID: logitech-dj: validate output " Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 044/104] HID: lenovo-tpkbd: fix leak if tpkbd_probe_tp fails Kamal Mostafa
` (61 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Benjamin Tissoires, Jiri Kosina, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
commit 8821f5dc187bdf16cfb32ef5aa8c3035273fa79a upstream.
When working on report indexes, always validate that they are in bounds.
Without this, a HID device could report a malicious feature report that
could trick the driver into a heap overflow:
[ 634.885003] usb 1-1: New USB device found, idVendor=0596, idProduct=0500
...
[ 676.469629] BUG kmalloc-192 (Tainted: G W ): Redzone overwritten
Note that we need to change the indexes from s8 to s16 as they can
be between -1 and 255.
CVE-2013-2897
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
[ kamal: backport to 3.8 (context) ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/hid/hid-multitouch.c | 26 ++++++++++++++------------
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index 61543c0..071c288 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -85,9 +85,9 @@ struct mt_device {
multitouch fields */
unsigned last_field_index; /* last field index of the report */
unsigned last_slot_field; /* the last field of a slot */
- __s8 inputmode; /* InputMode HID feature, -1 if non-existent */
- __s8 inputmode_index; /* InputMode HID feature index in the report */
- __s8 maxcontact_report_id; /* Maximum Contact Number HID feature,
+ __s16 inputmode; /* InputMode HID feature, -1 if non-existent */
+ __s16 inputmode_index; /* InputMode HID feature index in the report */
+ __s16 maxcontact_report_id; /* Maximum Contact Number HID feature,
-1 if non-existent */
__u8 num_received; /* how many contacts we received */
__u8 num_expected; /* expected last contact index */
@@ -268,20 +268,18 @@ static void mt_feature_mapping(struct hid_device *hdev,
struct hid_field *field, struct hid_usage *usage)
{
struct mt_device *td = hid_get_drvdata(hdev);
- int i;
switch (usage->hid) {
case HID_DG_INPUTMODE:
- td->inputmode = field->report->id;
- td->inputmode_index = 0; /* has to be updated below */
-
- for (i=0; i < field->maxusage; i++) {
- if (field->usage[i].hid == usage->hid) {
- td->inputmode_index = i;
- break;
- }
+ /* Ignore if value index is out of bounds. */
+ if (usage->usage_index >= field->report_count) {
+ dev_err(&hdev->dev, "HID_DG_INPUTMODE out of range\n");
+ break;
}
+ td->inputmode = field->report->id;
+ td->inputmode_index = usage->usage_index;
+
break;
case HID_DG_CONTACTMAX:
td->maxcontact_report_id = field->report->id;
@@ -459,6 +457,10 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
td->last_field_index = field->index;
return 1;
case HID_DG_CONTACTCOUNT:
+ /* Ignore if indexes are out of bounds. */
+ if (field->index >= field->report->maxfield ||
+ usage->usage_index >= field->report_count)
+ return 1;
td->last_field_index = field->index;
return 1;
case HID_DG_CONTACTMAX:
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 044/104] HID: lenovo-tpkbd: fix leak if tpkbd_probe_tp fails
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (42 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 043/104] HID: multitouch: validate indexes details Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 045/104] drm/radeon: fix panel scaling with eDP and LVDS bridges Kamal Mostafa
` (60 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Benjamin Tissoires, Jiri Kosina, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
commit 0ccdd9e7476680c16113131264ad6597bd10299d upstream.
If tpkbd_probe_tp() bails out, the probe() function return an error,
but hid_hw_stop() is never called.
fixes:
https://bugzilla.redhat.com/show_bug.cgi?id=1003998
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/hid/hid-lenovo-tpkbd.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/drivers/hid/hid-lenovo-tpkbd.c b/drivers/hid/hid-lenovo-tpkbd.c
index 189a3fb..2f357a3 100644
--- a/drivers/hid/hid-lenovo-tpkbd.c
+++ b/drivers/hid/hid-lenovo-tpkbd.c
@@ -416,22 +416,27 @@ static int tpkbd_probe(struct hid_device *hdev,
ret = hid_parse(hdev);
if (ret) {
hid_err(hdev, "hid_parse failed\n");
- goto err_free;
+ goto err;
}
ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
if (ret) {
hid_err(hdev, "hid_hw_start failed\n");
- goto err_free;
+ goto err;
}
uhdev = (struct usbhid_device *) hdev->driver_data;
- if (uhdev->ifnum == 1)
- return tpkbd_probe_tp(hdev);
+ if (uhdev->ifnum == 1) {
+ ret = tpkbd_probe_tp(hdev);
+ if (ret)
+ goto err_hid;
+ }
return 0;
-err_free:
+err_hid:
+ hid_hw_stop(hdev);
+err:
return ret;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 045/104] drm/radeon: fix panel scaling with eDP and LVDS bridges
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (43 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 044/104] HID: lenovo-tpkbd: fix leak if tpkbd_probe_tp fails Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 046/104] cifs: fix filp leak in cifs_atomic_open() Kamal Mostafa
` (59 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Alex Deucher, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <alexander.deucher@amd.com>
commit 855f5f1d882a34e4e9dd27b299737cd3508a5624 upstream.
We were using the wrong set_properly callback so we always
ended up with Full scaling even if something else (Center or
Full aspect) was selected.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpu/drm/radeon/radeon_connectors.c | 34 +++++++++++++++++++++++++++---
1 file changed, 31 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index 2399f25..5a87c9f 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -1489,6 +1489,24 @@ static const struct drm_connector_funcs radeon_dp_connector_funcs = {
.force = radeon_dvi_force,
};
+static const struct drm_connector_funcs radeon_edp_connector_funcs = {
+ .dpms = drm_helper_connector_dpms,
+ .detect = radeon_dp_detect,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+ .set_property = radeon_lvds_set_property,
+ .destroy = radeon_dp_connector_destroy,
+ .force = radeon_dvi_force,
+};
+
+static const struct drm_connector_funcs radeon_lvds_bridge_connector_funcs = {
+ .dpms = drm_helper_connector_dpms,
+ .detect = radeon_dp_detect,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+ .set_property = radeon_lvds_set_property,
+ .destroy = radeon_dp_connector_destroy,
+ .force = radeon_dvi_force,
+};
+
void
radeon_add_atom_connector(struct drm_device *dev,
uint32_t connector_id,
@@ -1580,8 +1598,6 @@ radeon_add_atom_connector(struct drm_device *dev,
goto failed;
radeon_dig_connector->igp_lane_info = igp_lane_info;
radeon_connector->con_priv = radeon_dig_connector;
- drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
- drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
if (i2c_bus->valid) {
/* add DP i2c bus */
if (connector_type == DRM_MODE_CONNECTOR_eDP)
@@ -1598,6 +1614,10 @@ radeon_add_atom_connector(struct drm_device *dev,
case DRM_MODE_CONNECTOR_VGA:
case DRM_MODE_CONNECTOR_DVIA:
default:
+ drm_connector_init(dev, &radeon_connector->base,
+ &radeon_dp_connector_funcs, connector_type);
+ drm_connector_helper_add(&radeon_connector->base,
+ &radeon_dp_connector_helper_funcs);
connector->interlace_allowed = true;
connector->doublescan_allowed = true;
radeon_connector->dac_load_detect = true;
@@ -1610,6 +1630,10 @@ radeon_add_atom_connector(struct drm_device *dev,
case DRM_MODE_CONNECTOR_HDMIA:
case DRM_MODE_CONNECTOR_HDMIB:
case DRM_MODE_CONNECTOR_DisplayPort:
+ drm_connector_init(dev, &radeon_connector->base,
+ &radeon_dp_connector_funcs, connector_type);
+ drm_connector_helper_add(&radeon_connector->base,
+ &radeon_dp_connector_helper_funcs);
drm_object_attach_property(&radeon_connector->base.base,
rdev->mode_info.underscan_property,
UNDERSCAN_OFF);
@@ -1634,6 +1658,10 @@ radeon_add_atom_connector(struct drm_device *dev,
break;
case DRM_MODE_CONNECTOR_LVDS:
case DRM_MODE_CONNECTOR_eDP:
+ drm_connector_init(dev, &radeon_connector->base,
+ &radeon_lvds_bridge_connector_funcs, connector_type);
+ drm_connector_helper_add(&radeon_connector->base,
+ &radeon_dp_connector_helper_funcs);
drm_object_attach_property(&radeon_connector->base.base,
dev->mode_config.scaling_mode_property,
DRM_MODE_SCALE_FULLSCREEN);
@@ -1797,7 +1825,7 @@ radeon_add_atom_connector(struct drm_device *dev,
goto failed;
radeon_dig_connector->igp_lane_info = igp_lane_info;
radeon_connector->con_priv = radeon_dig_connector;
- drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
+ drm_connector_init(dev, &radeon_connector->base, &radeon_edp_connector_funcs, connector_type);
drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
if (i2c_bus->valid) {
/* add DP i2c bus */
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 046/104] cifs: fix filp leak in cifs_atomic_open()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (44 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 045/104] drm/radeon: fix panel scaling with eDP and LVDS bridges Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 047/104] net: usb: cdc_ether: Use wwan interface for Telit modules Kamal Mostafa
` (58 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Miklos Szeredi, Steve French, Al Viro, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Miklos Szeredi <mszeredi@suse.cz>
commit dfb1d61b0e9f9e2c542e9adc8d970689f4114ff6 upstream.
If an error occurs after having called finish_open() then fput() needs to
be called on the already opened file.
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Cc: Steve French <sfrench@samba.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
fs/cifs/dir.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
index 8719bbe..adaee05 100644
--- a/fs/cifs/dir.c
+++ b/fs/cifs/dir.c
@@ -488,6 +488,7 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry,
if (server->ops->close)
server->ops->close(xid, tcon, &fid);
cifs_del_pending_open(&open);
+ fput(file);
rc = -ENOMEM;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 047/104] net: usb: cdc_ether: Use wwan interface for Telit modules
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (45 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 046/104] cifs: fix filp leak in cifs_atomic_open() Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 048/104] usb: gadget: fix a bug and a WARN_ON in dummy-hcd Kamal Mostafa
` (57 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Fabio Porcedda, David S. Miller, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Fabio Porcedda <fabio.porcedda@gmail.com>
commit 0092820407901a0b2c4e343e85f96bb7abfcded1 upstream.
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
Acked-by: Oliver Neukum <oliver@neukum.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/usb/cdc_ether.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
index 299c53b..04af91a 100644
--- a/drivers/net/usb/cdc_ether.c
+++ b/drivers/net/usb/cdc_ether.c
@@ -696,6 +696,11 @@ static const struct usb_device_id products [] = {
.bInterfaceProtocol = USB_CDC_PROTO_NONE,
.driver_info = (unsigned long)&wwan_info,
}, {
+ /* Telit modules */
+ USB_VENDOR_AND_INTERFACE_INFO(0x1bc7, USB_CLASS_COMM,
+ USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
+ .driver_info = (kernel_ulong_t) &wwan_info,
+}, {
USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ETHERNET,
USB_CDC_PROTO_NONE),
.driver_info = (unsigned long) &cdc_info,
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 048/104] usb: gadget: fix a bug and a WARN_ON in dummy-hcd
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (46 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 047/104] net: usb: cdc_ether: Use wwan interface for Telit modules Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 049/104] drm/i915: do not update cursor in crtc mode set Kamal Mostafa
` (56 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Alan Stern, Felipe Balbi, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Alan Stern <stern@rowland.harvard.edu>
commit 5f5610f69be3a925b1f79af27150bb7377bc9ad6 upstream.
This patch fixes a NULL pointer dereference and a WARN_ON in
dummy-hcd. These things were the result of moving to the UDC core
framework, and possibly of changes to that framework.
Now unloading a gadget driver causes the UDC to be stopped after the
gadget driver is unbound, not before. Therefore the "driver" argument
to dummy_udc_stop() can be NULL, so we must not try to print the
driver's name without checking first.
Also, the UDC framework automatically unregisters the gadget when the
UDC is deleted. Therefore a sysfs attribute file attached to the
gadget must be removed before the UDC is deleted, not after.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Felipe Balbi <balbi@ti.com>
[ kamal: backport to 3.8 (context) ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/gadget/dummy_hcd.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c
index 8cf0c0f..b693889 100644
--- a/drivers/usb/gadget/dummy_hcd.c
+++ b/drivers/usb/gadget/dummy_hcd.c
@@ -924,8 +924,9 @@ static int dummy_udc_stop(struct usb_gadget *g,
struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(g);
struct dummy *dum = dum_hcd->dum;
- dev_dbg(udc_dev(dum), "unregister gadget driver '%s'\n",
- driver->driver.name);
+ if (driver)
+ dev_dbg(udc_dev(dum), "unregister gadget driver '%s'\n",
+ driver->driver.name);
dum->gadget.dev.driver = NULL;
dum->driver = NULL;
@@ -1016,10 +1017,10 @@ static int dummy_udc_remove(struct platform_device *pdev)
{
struct dummy *dum = platform_get_drvdata(pdev);
- usb_del_gadget_udc(&dum->gadget);
platform_set_drvdata(pdev, NULL);
device_remove_file(&dum->gadget.dev, &dev_attr_function);
device_unregister(&dum->gadget.dev);
+ usb_del_gadget_udc(&dum->gadget);
return 0;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 049/104] drm/i915: do not update cursor in crtc mode set
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (47 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 048/104] usb: gadget: fix a bug and a WARN_ON in dummy-hcd Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 050/104] drm/i915: Don't enable the cursor on a disable pipe Kamal Mostafa
` (55 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Jani Nikula, Daniel Vetter, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Jani Nikula <jani.nikula@intel.com>
commit cc173961a68034c1171a421f0dbed39edfb60880 upstream.
The cursor is disabled before crtc mode set in crtc disable (and we
assert this is the case), and enabled afterwards in crtc enable. Do not
update it in crtc mode set.
On HSW enabling a plane on a disabled pipe may hang the entire system.
And there's no good reason for doing it ever, so just don't.
v2: Add note about HSW hangs - vsyrjala
Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Tested-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
[ kamal: backport to 3.8 ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpu/drm/i915/intel_display.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 33015db..3e4e629 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -4750,9 +4750,6 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
return -EINVAL;
}
- /* Ensure that the cursor is valid for the new mode before changing... */
- intel_crtc_update_cursor(crtc, true);
-
if (is_lvds && dev_priv->lvds_downclock_avail) {
/*
* Ensure we match the reduced clock's P to the target clock.
@@ -5639,9 +5636,6 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
return -EINVAL;
}
- /* Ensure that the cursor is valid for the new mode before changing... */
- intel_crtc_update_cursor(crtc, true);
-
/* determine panel color depth */
dither = intel_choose_pipe_bpp_dither(crtc, fb, &intel_crtc->bpp,
adjusted_mode);
@@ -5842,9 +5836,6 @@ static int haswell_crtc_mode_set(struct drm_crtc *crtc,
}
}
- /* Ensure that the cursor is valid for the new mode before changing... */
- intel_crtc_update_cursor(crtc, true);
-
/* determine panel color depth */
dither = intel_choose_pipe_bpp_dither(crtc, fb, &intel_crtc->bpp,
adjusted_mode);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 050/104] drm/i915: Don't enable the cursor on a disable pipe
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (48 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 049/104] drm/i915: do not update cursor in crtc mode set Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 051/104] drm/ttm: fix the tt_populated check in ttm_tt_destroy() Kamal Mostafa
` (54 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Ville Syrjälä, Daniel Vetter, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com>
commit f2f5f771c5fc0fa252cde3d0d0452dcc785cc17a upstream.
On HSW enabling a plane on a disabled pipe may hang the entire system.
And there's no good reason for doing it ever, so just don't.
v2: Move the crtc active checks to intel_crtc_cursor_{set,move} to
avoid confusing people during modeset
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Tested-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
[ kamal: backport to 3.8 (context) ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpu/drm/i915/intel_display.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3e4e629..a38cbdc 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6519,7 +6519,8 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
intel_crtc->cursor_width = width;
intel_crtc->cursor_height = height;
- intel_crtc_update_cursor(crtc, true);
+ if (intel_crtc->active)
+ intel_crtc_update_cursor(crtc, true);
return 0;
fail_unpin:
@@ -6538,7 +6539,8 @@ static int intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
intel_crtc->cursor_x = x;
intel_crtc->cursor_y = y;
- intel_crtc_update_cursor(crtc, true);
+ if (intel_crtc->active)
+ intel_crtc_update_cursor(crtc, true);
return 0;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 051/104] drm/ttm: fix the tt_populated check in ttm_tt_destroy()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (49 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 050/104] drm/i915: Don't enable the cursor on a disable pipe Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 052/104] PCI / ACPI / PM: Clear pme_poll for devices in D3cold on wakeup Kamal Mostafa
` (53 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Ben Skeggs, Jerome Glisse, Dave Airlie, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Ben Skeggs <bskeggs@redhat.com>
commit 182b17c8dc4e83aab000ce86587b6810e515da87 upstream.
After a vmalloc failure in ttm_dma_tt_alloc_page_directory(),
ttm_dma_tt_init() will call ttm_tt_destroy() to cleanup, and end up
inside the driver's unpopulate() hook when populate() has never yet
been called.
On nouveau, the first issue to be hit because of this is that
dma_address[] may be a NULL pointer. After working around this,
ttm_pool_unpopulate() may potentially hit the same issue with
the pages[] array.
It seems to make more sense to avoid calling unpopulate on already
unpopulated TTMs than to add checks to all the implementations.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpu/drm/ttm/ttm_tt.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
index 7d759a4..cacf2e4 100644
--- a/drivers/gpu/drm/ttm/ttm_tt.c
+++ b/drivers/gpu/drm/ttm/ttm_tt.c
@@ -170,7 +170,7 @@ void ttm_tt_destroy(struct ttm_tt *ttm)
ttm_tt_unbind(ttm);
}
- if (likely(ttm->pages != NULL)) {
+ if (ttm->state == tt_unbound) {
ttm->bdev->driver->ttm_tt_unpopulate(ttm);
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 052/104] PCI / ACPI / PM: Clear pme_poll for devices in D3cold on wakeup
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (50 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 051/104] drm/ttm: fix the tt_populated check in ttm_tt_destroy() Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 053/104] Smack: Fix the bug smackcipso can't set CIPSO correctly Kamal Mostafa
` (52 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Rafael J. Wysocki, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
commit 834145156bedadfb50121f0bc5e9d9f9f942bcca upstream.
Commit 448bd85 (PCI/PM: add PCIe runtime D3cold support) added a
piece of code to pci_acpi_wake_dev() causing that function to behave
in a special way for devices in D3cold (so that their configuration
registers are not accessed before those devices are resumed).
However, it didn't take the clearing of the pme_poll flag into
account. That has to be done for all devices, even if they are in
D3cold, or pci_pme_list_scan() will not know that wakeup has been
signaled for the device and will poll its PME Status bit
unnecessarily.
Fix the problem by moving the clearing of the pme_poll flag in
pci_acpi_wake_dev() before the code introduced by commit 448bd85.
Reported-and-tested-by: David E. Box <david.e.box@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/pci/pci-acpi.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 21354bf..e1e3d1b 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -47,6 +47,9 @@ static void pci_acpi_wake_dev(acpi_handle handle, u32 event, void *context)
if (event != ACPI_NOTIFY_DEVICE_WAKE || !pci_dev)
return;
+ if (pci_dev->pme_poll)
+ pci_dev->pme_poll = false;
+
if (pci_dev->current_state == PCI_D3cold) {
pci_wakeup_event(pci_dev);
pm_runtime_resume(&pci_dev->dev);
@@ -57,9 +60,6 @@ static void pci_acpi_wake_dev(acpi_handle handle, u32 event, void *context)
if (pci_dev->pme_support)
pci_check_pme_status(pci_dev);
- if (pci_dev->pme_poll)
- pci_dev->pme_poll = false;
-
pci_wakeup_event(pci_dev);
pm_runtime_resume(&pci_dev->dev);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 053/104] Smack: Fix the bug smackcipso can't set CIPSO correctly
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (51 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 052/104] PCI / ACPI / PM: Clear pme_poll for devices in D3cold on wakeup Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 054/104] serial: pch_uart: fix tty-kref leak in dma-rx path Kamal Mostafa
` (51 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Passion,Zhao, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: "Passion,Zhao" <passion.zhao@intel.com>
commit 0fcfee61d63b82c1eefb5b1a914240480f17d63f upstream.
Bug report: https://tizendev.org/bugs/browse/TDIS-3891
The reason is userspace libsmack only use "smackfs/cipso2" long-label interface,
but the code's logical is still for orginal fixed length label. Now update
smack_cipso_apply() to support flexible label (<=256 including tailing '\0')
There is also a bug in kernel/security/smack/smackfs.c:
When smk_set_cipso() parsing the CIPSO setting from userspace, the offset of
CIPSO level should be "strlen(label)+1" instead of "strlen(label)"
Signed-off-by: Passion,Zhao <passion.zhao@intel.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
security/smack/smackfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
index 76a5dca..c4fe705 100644
--- a/security/smack/smackfs.c
+++ b/security/smack/smackfs.c
@@ -818,7 +818,7 @@ static ssize_t smk_set_cipso(struct file *file, const char __user *buf,
if (format == SMK_FIXED24_FMT)
rule += SMK_LABELLEN;
else
- rule += strlen(skp->smk_known);
+ rule += strlen(skp->smk_known) + 1;
ret = sscanf(rule, "%d", &maplevel);
if (ret != 1 || maplevel > SMACK_CIPSO_MAXLEVEL)
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 054/104] serial: pch_uart: fix tty-kref leak in dma-rx path
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (52 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 053/104] Smack: Fix the bug smackcipso can't set CIPSO correctly Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 055/104] x86, efi: Don't map Boot Services on i386 Kamal Mostafa
` (50 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Johan Hovold, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <jhovold@gmail.com>
commit 19b85cfb190eb9980eaf416bff96aef4159a430e upstream.
Fix tty_kref leak when tty_buffer_request room fails in dma-rx path.
Note that the tty ref isn't really needed anymore, but as the leak has
always been there, fixing it before removing should makes it easier to
backport the fix.
Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/tty/serial/pch_uart.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
index a9e4be7..6e67829 100644
--- a/drivers/tty/serial/pch_uart.c
+++ b/drivers/tty/serial/pch_uart.c
@@ -648,11 +648,12 @@ static int dma_push_rx(struct eg20t_port *priv, int size)
dev_warn(port->dev, "Rx overrun: dropping %u bytes\n",
size - room);
if (!room)
- return room;
+ goto out;
tty_insert_flip_string(tty, sg_virt(&priv->sg_rx), size);
port->icount.rx += room;
+out:
tty_kref_put(tty);
return room;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 055/104] x86, efi: Don't map Boot Services on i386
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (53 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 054/104] serial: pch_uart: fix tty-kref leak in dma-rx path Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 056/104] ALSA: compress: Fix compress device unregister Kamal Mostafa
` (49 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Josh Triplett, Matthew Garrett, H. Peter Anvin, Ingo Molnar,
Thomas Gleixner, Greg Kroah-Hartman, Josh Boyer, Matt Fleming,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Josh Boyer <jwboyer@redhat.com>
commit 700870119f49084da004ab588ea2b799689efaf7 upstream.
Add patch to fix 32bit EFI service mapping (rhbz 726701)
Multiple people are reporting hitting the following WARNING on i386,
WARNING: at arch/x86/mm/ioremap.c:102 __ioremap_caller+0x3d3/0x440()
Modules linked in:
Pid: 0, comm: swapper Not tainted 3.9.0-rc7+ #95
Call Trace:
[<c102b6af>] warn_slowpath_common+0x5f/0x80
[<c1023fb3>] ? __ioremap_caller+0x3d3/0x440
[<c1023fb3>] ? __ioremap_caller+0x3d3/0x440
[<c102b6ed>] warn_slowpath_null+0x1d/0x20
[<c1023fb3>] __ioremap_caller+0x3d3/0x440
[<c106007b>] ? get_usage_chars+0xfb/0x110
[<c102d937>] ? vprintk_emit+0x147/0x480
[<c1418593>] ? efi_enter_virtual_mode+0x1e4/0x3de
[<c102406a>] ioremap_cache+0x1a/0x20
[<c1418593>] ? efi_enter_virtual_mode+0x1e4/0x3de
[<c1418593>] efi_enter_virtual_mode+0x1e4/0x3de
[<c1407984>] start_kernel+0x286/0x2f4
[<c1407535>] ? repair_env_string+0x51/0x51
[<c1407362>] i386_start_kernel+0x12c/0x12f
Due to the workaround described in commit 916f676f8 ("x86, efi: Retain
boot service code until after switching to virtual mode") EFI Boot
Service regions are mapped for a period during boot. Unfortunately, with
the limited size of the i386 direct kernel map it's possible that some
of the Boot Service regions will not be directly accessible, which
causes them to be ioremap()'d, triggering the above warning as the
regions are marked as E820_RAM in the e820 memmap.
There are currently only two situations where we need to map EFI Boot
Service regions,
1. To workaround the firmware bug described in 916f676f8
2. To access the ACPI BGRT image
but since we haven't seen an i386 implementation that requires either,
this simple fix should suffice for now.
[ Added to changelog - Matt ]
Reported-by: Bryan O'Donoghue <bryan.odonoghue.lkml@nexus-software.ie>
Acked-by: Tom Zanussi <tom.zanussi@intel.com>
Acked-by: Darren Hart <dvhart@linux.intel.com>
Cc: Josh Triplett <josh@joshtriplett.org>
Cc: Matthew Garrett <mjg59@srcf.ucam.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
arch/x86/platform/efi/efi.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index fe2ac4f..cc657c8 100644
--- a/arch/x86/platform/efi/efi.c
+++ b/arch/x86/platform/efi/efi.c
@@ -900,10 +900,13 @@ void __init efi_enter_virtual_mode(void)
for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
md = p;
- if (!(md->attribute & EFI_MEMORY_RUNTIME) &&
- md->type != EFI_BOOT_SERVICES_CODE &&
- md->type != EFI_BOOT_SERVICES_DATA)
- continue;
+ if (!(md->attribute & EFI_MEMORY_RUNTIME)) {
+#ifdef CONFIG_X86_64
+ if (md->type != EFI_BOOT_SERVICES_CODE &&
+ md->type != EFI_BOOT_SERVICES_DATA)
+#endif
+ continue;
+ }
size = md->num_pages << EFI_PAGE_SHIFT;
end = md->phys_addr + size;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 056/104] ALSA: compress: Fix compress device unregister.
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (54 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 055/104] x86, efi: Don't map Boot Services on i386 Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 057/104] dm snapshot: workaround for a false positive lockdep warning Kamal Mostafa
` (48 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Liam Girdwood, Takashi Iwai, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Liam Girdwood <liam.r.girdwood@linux.intel.com>
commit 4028b6c4c03f213260e9290ff3a6b5439aad07ce upstream.
snd_unregister_device() should return the device type and not stream
direction.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Acked-by: Vinod Koul <vinod.koul@intel.com>
Tested-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
sound/core/compress_offload.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
index 2401d06..a388a87 100644
--- a/sound/core/compress_offload.c
+++ b/sound/core/compress_offload.c
@@ -689,7 +689,8 @@ static int snd_compress_dev_disconnect(struct snd_device *device)
struct snd_compr *compr;
compr = device->device_data;
- snd_unregister_device(compr->direction, compr->card, compr->device);
+ snd_unregister_device(SNDRV_DEVICE_TYPE_COMPRESS, compr->card,
+ compr->device);
return 0;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 057/104] dm snapshot: workaround for a false positive lockdep warning
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (55 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 056/104] ALSA: compress: Fix compress device unregister Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 058/104] dm-snapshot: fix performance degradation due to small hash size Kamal Mostafa
` (47 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Mikulas Patocka, Mike Snitzer, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Mikulas Patocka <mpatocka@redhat.com>
commit 5ea330a75bd86b2b2a01d7b85c516983238306fb upstream.
The kernel reports a lockdep warning if a snapshot is invalidated because
it runs out of space.
The lockdep warning was triggered by commit 0976dfc1d0cd80a4e9dfaf87bd87
("workqueue: Catch more locking problems with flush_work()") in v3.5.
The warning is false positive. The real cause for the warning is that
the lockdep engine treats different instances of md->lock as a single
lock.
This patch is a workaround - we use flush_workqueue instead of flush_work.
This code path is not performance sensitive (it is called only on
initialization or invalidation), thus it doesn't matter that we flush the
whole workqueue.
The real fix for the problem would be to teach the lockdep engine to treat
different instances of md->lock as separate locks.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Acked-by: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/md/dm-snap-persistent.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c
index 3ac4156..4caa8e6 100644
--- a/drivers/md/dm-snap-persistent.c
+++ b/drivers/md/dm-snap-persistent.c
@@ -256,7 +256,7 @@ static int chunk_io(struct pstore *ps, void *area, chunk_t chunk, int rw,
*/
INIT_WORK_ONSTACK(&req.work, do_metadata);
queue_work(ps->metadata_wq, &req.work);
- flush_work(&req.work);
+ flush_workqueue(ps->metadata_wq);
return req.result;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 058/104] dm-snapshot: fix performance degradation due to small hash size
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (56 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 057/104] dm snapshot: workaround for a false positive lockdep warning Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 059/104] drm/radeon: Make r100_cp_ring_info() and radeon_ring_gfx() safe (v2) Kamal Mostafa
` (46 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Mikulas Patocka, Mike Snitzer, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Mikulas Patocka <mpatocka@redhat.com>
commit 60e356f381954d79088d0455e357db48cfdd6857 upstream.
LVM2, since version 2.02.96, creates origin with zero size, then loads
the snapshot driver and then loads the origin. Consequently, the
snapshot driver sees the origin size zero and sets the hash size to the
lower bound 64. Such small hash table causes performance degradation.
This patch changes it so that the hash size is determined by the size of
snapshot volume, not minimum of origin and snapshot size. It doesn't
make sense to set the snapshot size significantly larger than the origin
size, so we do not need to take origin size into account when
calculating the hash size.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/md/dm-snap.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
index 900eb23..8b36c52 100644
--- a/drivers/md/dm-snap.c
+++ b/drivers/md/dm-snap.c
@@ -723,17 +723,16 @@ static int calc_max_buckets(void)
*/
static int init_hash_tables(struct dm_snapshot *s)
{
- sector_t hash_size, cow_dev_size, origin_dev_size, max_buckets;
+ sector_t hash_size, cow_dev_size, max_buckets;
/*
* Calculate based on the size of the original volume or
* the COW volume...
*/
cow_dev_size = get_dev_size(s->cow->bdev);
- origin_dev_size = get_dev_size(s->origin->bdev);
max_buckets = calc_max_buckets();
- hash_size = min(origin_dev_size, cow_dev_size) >> s->store->chunk_shift;
+ hash_size = cow_dev_size >> s->store->chunk_shift;
hash_size = min(hash_size, max_buckets);
if (hash_size < 64)
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 059/104] drm/radeon: Make r100_cp_ring_info() and radeon_ring_gfx() safe (v2)
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (57 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 058/104] dm-snapshot: fix performance degradation due to small hash size Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 060/104] ARM: 7837/3: fix Thumb-2 bug in AES assembler code Kamal Mostafa
` (45 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Alex Ivanov, Alex Deucher, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Ivanov <gnidorah@p0n4ik.tk>
commit 0eb3448aa6b31fbf24c31756aba7940cac5ad6b8 upstream.
Prevent NULL pointer dereference in case when radeon_ring_fini() did it's job.
Reading of r100_cp_ring_info and radeon_ring_gfx debugfs entries will lead to a KP if ring buffer was deallocated, e.g. on failed ring test.
Seen on PA-RISC machine having "radeon: ring test failed (scratch(0x8504)=0xCAFEDEAD)" issue.
v2: agd5f: add some parens around ring->ready check
Signed-off-by: Alex Ivanov <gnidorah@p0n4ik.tk>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpu/drm/radeon/r100.c | 8 +++++---
drivers/gpu/drm/radeon/radeon_ring.c | 8 +++++---
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index b833fbe..1ef003a 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -3045,9 +3045,11 @@ static int r100_debugfs_cp_ring_info(struct seq_file *m, void *data)
seq_printf(m, "CP_RB_RPTR 0x%08x\n", rdp);
seq_printf(m, "%u free dwords in ring\n", ring->ring_free_dw);
seq_printf(m, "%u dwords in ring\n", count);
- for (j = 0; j <= count; j++) {
- i = (rdp + j) & ring->ptr_mask;
- seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]);
+ if (ring->ready) {
+ for (j = 0; j <= count; j++) {
+ i = (rdp + j) & ring->ptr_mask;
+ seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]);
+ }
}
return 0;
}
diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
index cac9f20..37d870b 100644
--- a/drivers/gpu/drm/radeon/radeon_ring.c
+++ b/drivers/gpu/drm/radeon/radeon_ring.c
@@ -804,9 +804,11 @@ static int radeon_debugfs_ring_info(struct seq_file *m, void *data)
* packet that is the root issue
*/
i = (ring->rptr + ring->ptr_mask + 1 - 32) & ring->ptr_mask;
- for (j = 0; j <= (count + 32); j++) {
- seq_printf(m, "r[%5d]=0x%08x\n", i, ring->ring[i]);
- i = (i + 1) & ring->ptr_mask;
+ if (ring->ready) {
+ for (j = 0; j <= (count + 32); j++) {
+ seq_printf(m, "r[%5d]=0x%08x\n", i, ring->ring[i]);
+ i = (i + 1) & ring->ptr_mask;
+ }
}
return 0;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 060/104] ARM: 7837/3: fix Thumb-2 bug in AES assembler code
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (58 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 059/104] drm/radeon: Make r100_cp_ring_info() and radeon_ring_gfx() safe (v2) Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 061/104] x86/reboot: Add quirk to make Dell C6100 use reboot=pci automatically Kamal Mostafa
` (44 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Ard Biesheuvel, Russell King, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
commit 40190c85f427dcfdbab5dbef4ffd2510d649da1f upstream.
Patch 638591c enabled building the AES assembler code in Thumb2 mode.
However, this code used arithmetic involving PC rather than adr{l}
instructions to generate PC-relative references to the lookup tables,
and this needs to take into account the different PC offset when
running in Thumb mode.
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
arch/arm/crypto/aes-armv4.S | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/arm/crypto/aes-armv4.S b/arch/arm/crypto/aes-armv4.S
index 19d6cd6..3a14ea8 100644
--- a/arch/arm/crypto/aes-armv4.S
+++ b/arch/arm/crypto/aes-armv4.S
@@ -148,7 +148,7 @@ AES_Te:
@ const AES_KEY *key) {
.align 5
ENTRY(AES_encrypt)
- sub r3,pc,#8 @ AES_encrypt
+ adr r3,AES_encrypt
stmdb sp!,{r1,r4-r12,lr}
mov r12,r0 @ inp
mov r11,r2
@@ -381,7 +381,7 @@ _armv4_AES_encrypt:
.align 5
ENTRY(private_AES_set_encrypt_key)
_armv4_AES_set_encrypt_key:
- sub r3,pc,#8 @ AES_set_encrypt_key
+ adr r3,_armv4_AES_set_encrypt_key
teq r0,#0
moveq r0,#-1
beq .Labrt
@@ -843,7 +843,7 @@ AES_Td:
@ const AES_KEY *key) {
.align 5
ENTRY(AES_decrypt)
- sub r3,pc,#8 @ AES_decrypt
+ adr r3,AES_decrypt
stmdb sp!,{r1,r4-r12,lr}
mov r12,r0 @ inp
mov r11,r2
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 061/104] x86/reboot: Add quirk to make Dell C6100 use reboot=pci automatically
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (59 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 060/104] ARM: 7837/3: fix Thumb-2 bug in AES assembler code Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 062/104] drm/radeon: disable tests/benchmarks if accel is disabled Kamal Mostafa
` (43 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Masoud Sharbiani, Vinson Lee, Robin Holt, Russell King,
Guan Xuetao, Ingo Molnar, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Masoud Sharbiani <msharbiani@twitter.com>
commit 4f0acd31c31f03ba42494c8baf6c0465150e2621 upstream.
Dell PowerEdge C6100 machines fail to completely reboot about 20% of the time.
Signed-off-by: Masoud Sharbiani <msharbiani@twitter.com>
Signed-off-by: Vinson Lee <vlee@twitter.com>
Cc: Robin Holt <holt@sgi.com>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
Link: http://lkml.kernel.org/r/1379717947-18042-1-git-send-email-vlee@freedesktop.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
arch/x86/kernel/reboot.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
index 76fa1e9..90fd119 100644
--- a/arch/x86/kernel/reboot.c
+++ b/arch/x86/kernel/reboot.c
@@ -447,6 +447,22 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"),
},
},
+ { /* Handle problems with rebooting on the Dell PowerEdge C6100. */
+ .callback = set_pci_reboot,
+ .ident = "Dell PowerEdge C6100",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "C6100"),
+ },
+ },
+ { /* Some C6100 machines were shipped with vendor being 'Dell'. */
+ .callback = set_pci_reboot,
+ .ident = "Dell PowerEdge C6100",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "C6100"),
+ },
+ },
{ }
};
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 062/104] drm/radeon: disable tests/benchmarks if accel is disabled
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (60 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 061/104] x86/reboot: Add quirk to make Dell C6100 use reboot=pci automatically Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 063/104] xhci: Fix oops happening after address device timeout Kamal Mostafa
` (42 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Alex Deucher, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <alexander.deucher@amd.com>
commit 4a1132a023eb48cf10522d84c5908d43b612c041 upstream.
The tests are only usable if the acceleration engines have
been successfully initialized.
Based on an initial patch from: Alex Ivanov <gnidorah@p0n4ik.tk>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpu/drm/radeon/radeon_device.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 57a7ac0..79169e3 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1134,13 +1134,22 @@ int radeon_device_init(struct radeon_device *rdev,
return r;
}
if ((radeon_testing & 1)) {
- radeon_test_moves(rdev);
+ if (rdev->accel_working)
+ radeon_test_moves(rdev);
+ else
+ DRM_INFO("radeon: acceleration disabled, skipping move tests\n");
}
if ((radeon_testing & 2)) {
- radeon_test_syncing(rdev);
+ if (rdev->accel_working)
+ radeon_test_syncing(rdev);
+ else
+ DRM_INFO("radeon: acceleration disabled, skipping sync tests\n");
}
if (radeon_benchmarking) {
- radeon_benchmark(rdev, radeon_benchmarking);
+ if (rdev->accel_working)
+ radeon_benchmark(rdev, radeon_benchmarking);
+ else
+ DRM_INFO("radeon: acceleration disabled, skipping benchmarks\n");
}
return 0;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 063/104] xhci: Fix oops happening after address device timeout
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (61 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 062/104] drm/radeon: disable tests/benchmarks if accel is disabled Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 064/104] xhci: Ensure a command structure points to the correct trb on the command ring Kamal Mostafa
` (41 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Mathias Nyman, Sarah Sharp, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Mathias Nyman <mathias.nyman@linux.intel.com>
commit 284d20552461466b04d6bfeafeb1c47a8891b591 upstream.
When a command times out, the command ring is first aborted,
and then stopped. If the command ring is empty when it is stopped
the stop event will point to next command which is not yet set.
xHCI tries to handle this next event often causing an oops.
Don't handle command completion events on stopped cmd ring if ring is
empty.
This patch should be backported to kernels as old as 3.7, that contain
the commit b92cc66c047ff7cf587b318fe377061a353c120f "xHCI: add aborting
command ring function"
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Reported-by: Giovanni <giovanni.nervi@yahoo.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/host/xhci-ring.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 3020c71..04b212d 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -1390,6 +1390,12 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
inc_deq(xhci, xhci->cmd_ring);
return;
}
+ /* There is no command to handle if we get a stop event when the
+ * command ring is empty, event->cmd_trb points to the next
+ * unset command
+ */
+ if (xhci->cmd_ring->dequeue == xhci->cmd_ring->enqueue)
+ return;
}
switch (le32_to_cpu(xhci->cmd_ring->dequeue->generic.field[3])
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 064/104] xhci: Ensure a command structure points to the correct trb on the command ring
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (62 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 063/104] xhci: Fix oops happening after address device timeout Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 065/104] drm/i915/dp: increase i2c-over-aux retry interval on AUX DEFER Kamal Mostafa
` (40 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Mathias Nyman, Sarah Sharp, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Mathias Nyman <mathias.nyman@linux.intel.com>
commit ec7e43e2d98173483866fe2e4e690143626b659c upstream.
If a command on the command ring needs to be cancelled before it is handled
it can be turned to a no-op operation when the ring is stopped.
We want to store the command ring enqueue pointer in the command structure
when the command in enqueued for the cancellation case.
Some commands used to store the command ring dequeue pointers instead of enqueue
(these often worked because enqueue happends to equal dequeue quite often)
Other commands correctly used the enqueue pointer but did not check if it pointed
to a valid trb or a link trb, this caused for example stop endpoint command to timeout in
xhci_stop_device() in about 2% of suspend/resume cases.
This should also solve some weird behavior happening in command cancellation cases.
This patch is based on a patch submitted by Sarah Sharp to linux-usb, but
then forgotten:
http://marc.info/?l=linux-usb&m=136269803207465&w=2
This patch should be backported to kernels as old as 3.7, that contain
the commit b92cc66c047ff7cf587b318fe377061a353c120f "xHCI: add aborting
command ring function"
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/host/xhci-hub.c | 2 +-
drivers/usb/host/xhci-ring.c | 10 ++++++++++
drivers/usb/host/xhci.c | 25 +++++--------------------
drivers/usb/host/xhci.h | 1 +
4 files changed, 17 insertions(+), 21 deletions(-)
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
index 6891442..b698953 100644
--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -286,7 +286,7 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend)
if (virt_dev->eps[i].ring && virt_dev->eps[i].ring->dequeue)
xhci_queue_stop_endpoint(xhci, slot_id, i, suspend);
}
- cmd->command_trb = xhci->cmd_ring->enqueue;
+ cmd->command_trb = xhci_find_next_enqueue(xhci->cmd_ring);
list_add_tail(&cmd->cmd_list, &virt_dev->cmd_list);
xhci_queue_stop_endpoint(xhci, slot_id, 0, suspend);
xhci_ring_cmd_db(xhci);
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 04b212d..3607da9 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -122,6 +122,16 @@ static int enqueue_is_link_trb(struct xhci_ring *ring)
return TRB_TYPE_LINK_LE32(link->control);
}
+union xhci_trb *xhci_find_next_enqueue(struct xhci_ring *ring)
+{
+ /* Enqueue pointer can be left pointing to the link TRB,
+ * we must handle that
+ */
+ if (TRB_TYPE_LINK_LE32(ring->enqueue->link.control))
+ return ring->enq_seg->next->trbs;
+ return ring->enqueue;
+}
+
/* Updates trb to point to the next TRB in the ring, and updates seg if the next
* TRB is in a new segment. This does not skip over link TRBs, and it does not
* effect the ring dequeue or enqueue pointers.
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 8889d67..d3d4923 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -2588,15 +2588,7 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci,
if (command) {
cmd_completion = command->completion;
cmd_status = &command->status;
- command->command_trb = xhci->cmd_ring->enqueue;
-
- /* Enqueue pointer can be left pointing to the link TRB,
- * we must handle that
- */
- if (TRB_TYPE_LINK_LE32(command->command_trb->link.control))
- command->command_trb =
- xhci->cmd_ring->enq_seg->next->trbs;
-
+ command->command_trb = xhci_find_next_enqueue(xhci->cmd_ring);
list_add_tail(&command->cmd_list, &virt_dev->cmd_list);
} else {
cmd_completion = &virt_dev->cmd_completion;
@@ -2604,7 +2596,7 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci,
}
init_completion(cmd_completion);
- cmd_trb = xhci->cmd_ring->dequeue;
+ cmd_trb = xhci_find_next_enqueue(xhci->cmd_ring);
if (!ctx_change)
ret = xhci_queue_configure_endpoint(xhci, in_ctx->dma,
udev->slot_id, must_succeed);
@@ -3389,14 +3381,7 @@ int xhci_discover_or_reset_device(struct usb_hcd *hcd, struct usb_device *udev)
/* Attempt to submit the Reset Device command to the command ring */
spin_lock_irqsave(&xhci->lock, flags);
- reset_device_cmd->command_trb = xhci->cmd_ring->enqueue;
-
- /* Enqueue pointer can be left pointing to the link TRB,
- * we must handle that
- */
- if (TRB_TYPE_LINK_LE32(reset_device_cmd->command_trb->link.control))
- reset_device_cmd->command_trb =
- xhci->cmd_ring->enq_seg->next->trbs;
+ reset_device_cmd->command_trb = xhci_find_next_enqueue(xhci->cmd_ring);
list_add_tail(&reset_device_cmd->cmd_list, &virt_dev->cmd_list);
ret = xhci_queue_reset_device(xhci, slot_id);
@@ -3600,7 +3585,7 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)
union xhci_trb *cmd_trb;
spin_lock_irqsave(&xhci->lock, flags);
- cmd_trb = xhci->cmd_ring->dequeue;
+ cmd_trb = xhci_find_next_enqueue(xhci->cmd_ring);
ret = xhci_queue_slot_control(xhci, TRB_ENABLE_SLOT, 0);
if (ret) {
spin_unlock_irqrestore(&xhci->lock, flags);
@@ -3727,7 +3712,7 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
xhci_dbg_ctx(xhci, virt_dev->in_ctx, 2);
spin_lock_irqsave(&xhci->lock, flags);
- cmd_trb = xhci->cmd_ring->dequeue;
+ cmd_trb = xhci_find_next_enqueue(xhci->cmd_ring);
ret = xhci_queue_address_device(xhci, virt_dev->in_ctx->dma,
udev->slot_id);
if (ret) {
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index d0dd206..e77f6c9 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1821,6 +1821,7 @@ int xhci_cancel_cmd(struct xhci_hcd *xhci, struct xhci_command *command,
union xhci_trb *cmd_trb);
void xhci_ring_ep_doorbell(struct xhci_hcd *xhci, unsigned int slot_id,
unsigned int ep_index, unsigned int stream_id);
+union xhci_trb *xhci_find_next_enqueue(struct xhci_ring *ring);
/* xHCI roothub code */
void xhci_set_link_state(struct xhci_hcd *xhci, __le32 __iomem **port_array,
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 065/104] drm/i915/dp: increase i2c-over-aux retry interval on AUX DEFER
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (63 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 064/104] xhci: Ensure a command structure points to the correct trb on the command ring Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 066/104] staging: vt6656: [BUG] main_usb.c oops on device_close move flag earlier Kamal Mostafa
` (39 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Jani Nikula, Daniel Vetter, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Jani Nikula <jani.nikula@intel.com>
commit 8d16f258217f2f583af1fd57c5144aa4bbe73e48 upstream.
There is no clear cut rules or specs for the retry interval, as there
are many factors that affect overall response time. Increase the
interval, and even more so on branch devices which may have limited i2c
bit rates.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reference: https://bugs.freedesktop.org/show_bug.cgi?id=60263
Tested-by: Nicolas Suzor <nic@suzor.com>
Reviewed-by: Todd Previte <tprevite@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpu/drm/i915/intel_dp.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 616aaea..37c6d3f 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -629,7 +629,18 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
DRM_DEBUG_KMS("aux_ch native nack\n");
return -EREMOTEIO;
case AUX_NATIVE_REPLY_DEFER:
- udelay(100);
+ /*
+ * For now, just give more slack to branch devices. We
+ * could check the DPCD for I2C bit rate capabilities,
+ * and if available, adjust the interval. We could also
+ * be more careful with DP-to-Legacy adapters where a
+ * long legacy cable may force very low I2C bit rates.
+ */
+ if (intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] &
+ DP_DWN_STRM_PORT_PRESENT)
+ usleep_range(500, 600);
+ else
+ usleep_range(300, 400);
continue;
default:
DRM_ERROR("aux_ch invalid native reply 0x%02x\n",
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 066/104] staging: vt6656: [BUG] main_usb.c oops on device_close move flag earlier.
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (64 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 065/104] drm/i915/dp: increase i2c-over-aux retry interval on AUX DEFER Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 067/104] staging: vt6656: [BUG] iwctl_siwencodeext return if device not open Kamal Mostafa
` (38 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Malcolm Priestley, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Malcolm Priestley <tvboxspy@gmail.com>
commit e3eb270fab7734427dd8171a93e4946fe28674bc upstream.
The vt6656 is prone to resetting on the usb bus.
It seems there is a race condition and wpa supplicant is
trying to open the device via iw_handlers before its actually
closed at a stage that the buffers are being removed.
The device is longer considered open when the
buffers are being removed. So move ~DEVICE_FLAGS_OPENED
flag to before freeing the device buffers.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/staging/vt6656/main_usb.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c
index f726970..2c3d388 100644
--- a/drivers/staging/vt6656/main_usb.c
+++ b/drivers/staging/vt6656/main_usb.c
@@ -1112,6 +1112,8 @@ static int device_close(struct net_device *dev) {
memset(pMgmt->abyCurrBSSID, 0, 6);
pMgmt->eCurrState = WMAC_STATE_IDLE;
+ pDevice->flags &= ~DEVICE_FLAGS_OPENED;
+
device_free_tx_bufs(pDevice);
device_free_rx_bufs(pDevice);
device_free_int_bufs(pDevice);
@@ -1123,7 +1125,6 @@ static int device_close(struct net_device *dev) {
usb_free_urb(pDevice->pInterruptURB);
BSSvClearNodeDBTable(pDevice, 0);
- pDevice->flags &=(~DEVICE_FLAGS_OPENED);
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_close2 \n");
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 067/104] staging: vt6656: [BUG] iwctl_siwencodeext return if device not open
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (65 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 066/104] staging: vt6656: [BUG] main_usb.c oops on device_close move flag earlier Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 068/104] USB: UHCI: accept very late isochronous URBs Kamal Mostafa
` (37 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Malcolm Priestley, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Malcolm Priestley <tvboxspy@gmail.com>
commit 5e8c3d3e41b0bf241e830a1ee0752405adecc050 upstream.
Don't allow entry to iwctl_siwencodeext if device not open.
This fixes a race condition where wpa supplicant/network manager
enters the function when the device is already closed.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/staging/vt6656/iwctl.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/staging/vt6656/iwctl.c b/drivers/staging/vt6656/iwctl.c
index 9f2f1be..e37dcb5 100644
--- a/drivers/staging/vt6656/iwctl.c
+++ b/drivers/staging/vt6656/iwctl.c
@@ -1637,6 +1637,9 @@ int iwctl_siwencodeext(struct net_device *dev, struct iw_request_info *info,
if (pMgmt == NULL)
return -EFAULT;
+ if (!(pDevice->flags & DEVICE_FLAGS_OPENED))
+ return -ENODEV;
+
buf = kzalloc(sizeof(struct viawget_wpa_param), GFP_KERNEL);
if (buf == NULL)
return -ENOMEM;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 068/104] USB: UHCI: accept very late isochronous URBs
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (66 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 067/104] staging: vt6656: [BUG] iwctl_siwencodeext return if device not open Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 069/104] USB: OHCI: " Kamal Mostafa
` (36 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Alan Stern, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Alan Stern <stern@rowland.harvard.edu>
commit bef073b067a7b1874a6b381e0035bb0516d71a77 upstream.
Commit 24f531371de1 (USB: EHCI: accept very late isochronous URBs)
changed the isochronous API provided by ehci-hcd. URBs submitted too
late, so that the time slots for all their packets have already
expired, are no longer rejected outright. Instead the submission is
accepted, and the URB completes normally with a -EXDEV error for each
packet. This is what client drivers expect.
This patch implements the same policy in uhci-hcd. It should be
applied to all kernels containing commit c44b225077bb (UHCI: implement
new semantics for URB_ISO_ASAP).
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/host/uhci-q.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/usb/host/uhci-q.c b/drivers/usb/host/uhci-q.c
index 3b08519..3232578 100644
--- a/drivers/usb/host/uhci-q.c
+++ b/drivers/usb/host/uhci-q.c
@@ -1303,7 +1303,7 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,
}
/* Fell behind? */
- if (uhci_frame_before_eq(frame, next)) {
+ if (!uhci_frame_before_eq(next, frame)) {
/* USB_ISO_ASAP: Round up to the first available slot */
if (urb->transfer_flags & URB_ISO_ASAP)
@@ -1311,13 +1311,17 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,
-qh->period;
/*
- * Not ASAP: Use the next slot in the stream. If
- * the entire URB falls before the threshold, fail.
+ * Not ASAP: Use the next slot in the stream,
+ * no matter what.
*/
else if (!uhci_frame_before_eq(next,
frame + (urb->number_of_packets - 1) *
qh->period))
- return -EXDEV;
+ dev_dbg(uhci_dev(uhci), "iso underrun %p (%u+%u < %u)\n",
+ urb, frame,
+ (urb->number_of_packets - 1) *
+ qh->period,
+ next);
}
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 069/104] USB: OHCI: accept very late isochronous URBs
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (67 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 068/104] USB: UHCI: accept very late isochronous URBs Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 070/104] USB: fix PM config symbol in uhci-hcd, ehci-hcd, and xhci-hcd Kamal Mostafa
` (35 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Alan Stern, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Alan Stern <stern@rowland.harvard.edu>
commit a8693424c751b8247ee19bd8b857f1d4f432b972 upstream.
Commit 24f531371de1 (USB: EHCI: accept very late isochronous URBs)
changed the isochronous API provided by ehci-hcd. URBs submitted too
late, so that the time slots for all their packets have already
expired, are no longer rejected outright. Instead the submission is
accepted, and the URB completes normally with a -EXDEV error for each
packet. This is what client drivers expect.
This patch implements the same policy in ohci-hcd. The change is more
complicated than it was in ehci-hcd, because ohci-hcd doesn't scan for
isochronous completions in the same way as ehci-hcd does. Rather, it
depends on the hardware adding completed TDs to a "done queue". Some
OHCI controller don't handle this properly when a TD's time slot has
already expired, so we have to avoid adding such TDs to the schedule
in the first place. As a result, if the URB was submitted too late
then none of its TDs will get put on the schedule, so none of them
will end up on the done queue, so the driver will never realize that
the URB should be completed.
To solve this problem, the patch adds one to urb_priv->td_cnt for such
URBs, making it larger than urb_priv->length (td_cnt already gets set
to the number of TD's that had to be skipped because their slots have
expired). Each time an URB is given back, the finish_urb() routine
looks to see if urb_priv->td_cnt for the next URB on the same endpoint
is marked in this way. If so, it gives back the next URB right away.
This should be applied to all kernels containing commit 815fa7b91761
(USB: OHCI: fix logic for scheduling isochronous URBs).
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[ kamal: backport to 3.8 (context) ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/host/ohci-hcd.c | 22 ++++++++++++----------
drivers/usb/host/ohci-q.c | 24 +++++++++++++++++++++---
2 files changed, 33 insertions(+), 13 deletions(-)
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
index 007137f..0757a54 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -231,31 +231,26 @@ static int ohci_urb_enqueue (
frame &= ~(ed->interval - 1);
frame |= ed->branch;
urb->start_frame = frame;
+ ed->last_iso = frame + ed->interval * (size - 1);
}
} else if (ed->type == PIPE_ISOCHRONOUS) {
u16 next = ohci_frame_no(ohci) + 1;
u16 frame = ed->last_iso + ed->interval;
+ u16 length = ed->interval * (size - 1);
/* Behind the scheduling threshold? */
if (unlikely(tick_before(frame, next))) {
- /* USB_ISO_ASAP: Round up to the first available slot */
+ /* URB_ISO_ASAP: Round up to the first available slot */
if (urb->transfer_flags & URB_ISO_ASAP) {
frame += (next - frame + ed->interval - 1) &
-ed->interval;
/*
- * Not ASAP: Use the next slot in the stream. If
- * the entire URB falls before the threshold, fail.
+ * Not ASAP: Use the next slot in the stream,
+ * no matter what.
*/
} else {
- if (tick_before(frame + ed->interval *
- (urb->number_of_packets - 1), next)) {
- retval = -EXDEV;
- usb_hcd_unlink_urb_from_ep(hcd, urb);
- goto fail;
- }
-
/*
* Some OHCI hardware doesn't handle late TDs
* correctly. After retiring them it proceeds
@@ -266,9 +261,16 @@ static int ohci_urb_enqueue (
urb_priv->td_cnt = DIV_ROUND_UP(
(u16) (next - frame),
ed->interval);
+ if (urb_priv->td_cnt >= urb_priv->length) {
+ ++urb_priv->td_cnt; /* Mark it */
+ ohci_dbg(ohci, "iso underrun %p (%u+%u < %u)\n",
+ urb, frame, length,
+ next);
+ }
}
}
urb->start_frame = frame;
+ ed->last_iso = frame + length;
}
/* fill the TDs and link them to the ed; and
diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
index 7482cfb..89883c8 100644
--- a/drivers/usb/host/ohci-q.c
+++ b/drivers/usb/host/ohci-q.c
@@ -41,8 +41,12 @@ finish_urb(struct ohci_hcd *ohci, struct urb *urb, int status)
__releases(ohci->lock)
__acquires(ohci->lock)
{
+ struct usb_host_endpoint *ep = urb->ep;
+ struct urb_priv *urb_priv;
+
// ASSERT (urb->hcpriv != 0);
+ restart:
urb_free_priv (ohci, urb->hcpriv);
if (likely(status == -EINPROGRESS))
status = 0;
@@ -78,6 +82,21 @@ __acquires(ohci->lock)
ohci->hc_control &= ~(OHCI_CTRL_PLE|OHCI_CTRL_IE);
ohci_writel (ohci, ohci->hc_control, &ohci->regs->control);
}
+
+ /*
+ * An isochronous URB that is sumitted too late won't have any TDs
+ * (marked by the fact that the td_cnt value is larger than the
+ * actual number of TDs). If the next URB on this endpoint is like
+ * that, give it back now.
+ */
+ if (!list_empty(&ep->urb_list)) {
+ urb = list_first_entry(&ep->urb_list, struct urb, urb_list);
+ urb_priv = urb->hcpriv;
+ if (urb_priv->td_cnt > urb_priv->length) {
+ status = 0;
+ goto restart;
+ }
+ }
}
@@ -544,7 +563,6 @@ td_fill (struct ohci_hcd *ohci, u32 info,
td->hwCBP = cpu_to_hc32 (ohci, data & 0xFFFFF000);
*ohci_hwPSWp(ohci, td, 0) = cpu_to_hc16 (ohci,
(data & 0x0FFF) | 0xE000);
- td->ed->last_iso = info & 0xffff;
} else {
td->hwCBP = cpu_to_hc32 (ohci, data);
}
@@ -993,7 +1011,7 @@ rescan_this:
urb_priv->td_cnt++;
/* if URB is done, clean up */
- if (urb_priv->td_cnt == urb_priv->length) {
+ if (urb_priv->td_cnt >= urb_priv->length) {
modified = completed = 1;
finish_urb(ohci, urb, 0);
}
@@ -1083,7 +1101,7 @@ static void takeback_td(struct ohci_hcd *ohci, struct td *td)
urb_priv->td_cnt++;
/* If all this urb's TDs are done, call complete() */
- if (urb_priv->td_cnt == urb_priv->length)
+ if (urb_priv->td_cnt >= urb_priv->length)
finish_urb(ohci, urb, status);
/* clean schedule: unlink EDs that are no longer busy */
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 070/104] USB: fix PM config symbol in uhci-hcd, ehci-hcd, and xhci-hcd
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (68 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 069/104] USB: OHCI: " Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:41 ` [PATCH 071/104] usb/core/devio.c: Don't reject control message to endpoint with wrong direction bit Kamal Mostafa
` (34 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Alan Stern, Sarah Sharp, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Alan Stern <stern@rowland.harvard.edu>
commit f875fdbf344b9fde207f66b392c40845dd7e5aa6 upstream.
Since uhci-hcd, ehci-hcd, and xhci-hcd support runtime PM, the .pm
field in their pci_driver structures should be protected by CONFIG_PM
rather than CONFIG_PM_SLEEP. The corresponding change has already
been made for ohci-hcd.
Without this change, controllers won't do runtime suspend if system
suspend or hibernation isn't enabled.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
CC: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/host/ehci-pci.c | 2 +-
drivers/usb/host/uhci-pci.c | 2 +-
drivers/usb/host/xhci-pci.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
index 170b939..4620cfc 100644
--- a/drivers/usb/host/ehci-pci.c
+++ b/drivers/usb/host/ehci-pci.c
@@ -413,7 +413,7 @@ static struct pci_driver ehci_pci_driver = {
.remove = usb_hcd_pci_remove,
.shutdown = usb_hcd_pci_shutdown,
-#ifdef CONFIG_PM_SLEEP
+#ifdef CONFIG_PM
.driver = {
.pm = &usb_hcd_pci_pm_ops
},
diff --git a/drivers/usb/host/uhci-pci.c b/drivers/usb/host/uhci-pci.c
index c300bd2f7..0f228c4 100644
--- a/drivers/usb/host/uhci-pci.c
+++ b/drivers/usb/host/uhci-pci.c
@@ -293,7 +293,7 @@ static struct pci_driver uhci_pci_driver = {
.remove = usb_hcd_pci_remove,
.shutdown = uhci_shutdown,
-#ifdef CONFIG_PM_SLEEP
+#ifdef CONFIG_PM
.driver = {
.pm = &usb_hcd_pci_pm_ops
},
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index 76fb7d9..8233c91 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -344,7 +344,7 @@ static struct pci_driver xhci_pci_driver = {
/* suspend and resume implemented later */
.shutdown = usb_hcd_pci_shutdown,
-#ifdef CONFIG_PM_SLEEP
+#ifdef CONFIG_PM
.driver = {
.pm = &usb_hcd_pci_pm_ops
},
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 071/104] usb/core/devio.c: Don't reject control message to endpoint with wrong direction bit
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (69 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 070/104] USB: fix PM config symbol in uhci-hcd, ehci-hcd, and xhci-hcd Kamal Mostafa
@ 2013-10-10 15:41 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 072/104] hwmon: (applesmc) Check key count before proceeding Kamal Mostafa
` (33 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:41 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Kurt Garloff, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Kurt Garloff <kurt@garloff.de>
commit 831abf76643555a99b80a3b54adfa7e4fa0a3259 upstream.
Trying to read data from the Pegasus Technologies NoteTaker (0e20:0101)
[1] with the Windows App (EasyNote) works natively but fails when
Windows is running under KVM (and the USB device handed to KVM).
The reason is a USB control message
usb 4-2.2: control urb: bRequestType=22 bRequest=09 wValue=0200 wIndex=0001 wLength=0008
This goes to endpoint address 0x01 (wIndex); however, endpoint address
0x01 does not exist. There is an endpoint 0x81 though (same number,
but other direction); the app may have meant that endpoint instead.
The kernel thus rejects the IO and thus we see the failure.
Apparently, Linux is more strict here than Windows ... we can't change
the Win app easily, so that's a problem.
It seems that the Win app/driver is buggy here and the driver does not
behave fully according to the USB HID class spec that it claims to
belong to. The device seems to happily deal with that though (and
seems to not really care about this value much).
So the question is whether the Linux kernel should filter here.
Rejecting has the risk that somewhat non-compliant userspace apps/
drivers (most likely in a virtual machine) are prevented from working.
Not rejecting has the risk of confusing an overly sensitive device with
such a transfer. Given the fact that Windows does not filter it makes
this risk rather small though.
The patch makes the kernel more tolerant: If the endpoint address in
wIndex does not exist, but an endpoint with toggled direction bit does,
it will let the transfer through. (It does NOT change the message.)
With attached patch, the app in Windows in KVM works.
usb 4-2.2: check_ctrlrecip: process 13073 (qemu-kvm) requesting ep 01 but needs 81
I suspect this will mostly affect apps in virtual environments; as on
Linux the apps would have been adapted to the stricter handling of the
kernel. I have done that for mine[2].
[1] http://www.pegatech.com/
[2] https://sourceforge.net/projects/notetakerpen/
Signed-off-by: Kurt Garloff <kurt@garloff.de>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/core/devio.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index ea0a9a1..ab64713 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -741,6 +741,22 @@ static int check_ctrlrecip(struct dev_state *ps, unsigned int requesttype,
if ((index & ~USB_DIR_IN) == 0)
return 0;
ret = findintfep(ps->dev, index);
+ if (ret < 0) {
+ /*
+ * Some not fully compliant Win apps seem to get
+ * index wrong and have the endpoint number here
+ * rather than the endpoint address (with the
+ * correct direction). Win does let this through,
+ * so we'll not reject it here but leave it to
+ * the device to not break KVM. But we warn.
+ */
+ ret = findintfep(ps->dev, index ^ 0x80);
+ if (ret >= 0)
+ dev_info(&ps->dev->dev,
+ "%s: process %i (%s) requesting ep %02x but needs %02x\n",
+ __func__, task_pid_nr(current),
+ current->comm, index, index ^ 0x80);
+ }
if (ret >= 0)
ret = checkintf(ps, ret);
break;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 072/104] hwmon: (applesmc) Check key count before proceeding
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (70 preceding siblings ...)
2013-10-10 15:41 ` [PATCH 071/104] usb/core/devio.c: Don't reject control message to endpoint with wrong direction bit Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 073/104] fsl/usb: Resolve PHY_CLK_VLD instability issue for ULPI phy Kamal Mostafa
` (32 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Henrik Rydberg, Guenter Roeck, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Henrik Rydberg <rydberg@euromail.se>
commit 5f4513864304672e6ea9eac60583eeac32e679f2 upstream.
After reports from Chris and Josh Boyer of a rare crash in applesmc,
Guenter pointed at the initialization problem fixed below. The patch
has not been verified to fix the crash, but should be applied
regardless.
Reported-by: <jwboyer@fedoraproject.org>
Suggested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/hwmon/applesmc.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
index b41baff..f75abcc 100644
--- a/drivers/hwmon/applesmc.c
+++ b/drivers/hwmon/applesmc.c
@@ -525,16 +525,25 @@ static int applesmc_init_smcreg_try(void)
{
struct applesmc_registers *s = &smcreg;
bool left_light_sensor, right_light_sensor;
+ unsigned int count;
u8 tmp[1];
int ret;
if (s->init_complete)
return 0;
- ret = read_register_count(&s->key_count);
+ ret = read_register_count(&count);
if (ret)
return ret;
+ if (s->cache && s->key_count != count) {
+ pr_warn("key count changed from %d to %d\n",
+ s->key_count, count);
+ kfree(s->cache);
+ s->cache = NULL;
+ }
+ s->key_count = count;
+
if (!s->cache)
s->cache = kcalloc(s->key_count, sizeof(*s->cache), GFP_KERNEL);
if (!s->cache)
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 073/104] fsl/usb: Resolve PHY_CLK_VLD instability issue for ULPI phy
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (71 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 072/104] hwmon: (applesmc) Check key count before proceeding Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 074/104] driver core : Fix use after free of dev->parent in device_shutdown Kamal Mostafa
` (31 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Ramneek Mehresh, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Ramneek Mehresh <ramneek.mehresh@freescale.com>
commit ad1260e9fbf768d6bed227d9604ebee76a84aae3 upstream.
For controller versions greater than 1.6, setting ULPI_PHY_CLK_SEL
bit when USB_EN bit is already set causes instability issues with
PHY_CLK_VLD bit. So USB_EN is set only for IP controller version
below 1.6 before setting ULPI_PHY_CLK_SEL bit
Signed-off-by: Ramneek Mehresh <ramneek.mehresh@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/host/ehci-fsl.c | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
index d81d2fc..512f117 100644
--- a/drivers/usb/host/ehci-fsl.c
+++ b/drivers/usb/host/ehci-fsl.c
@@ -130,7 +130,7 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver,
}
/* Enable USB controller, 83xx or 8536 */
- if (pdata->have_sysif_regs)
+ if (pdata->have_sysif_regs && pdata->controller_ver < FSL_USB_VER_1_6)
setbits32(hcd->regs + FSL_SOC_USB_CTRL, 0x4);
/* Don't need to set host mode here. It will be done by tdi_reset() */
@@ -232,15 +232,9 @@ static int ehci_fsl_setup_phy(struct usb_hcd *hcd,
case FSL_USB2_PHY_ULPI:
if (pdata->have_sysif_regs && pdata->controller_ver) {
/* controller version 1.6 or above */
+ clrbits32(non_ehci + FSL_SOC_USB_CTRL, UTMI_PHY_EN);
setbits32(non_ehci + FSL_SOC_USB_CTRL,
- ULPI_PHY_CLK_SEL);
- /*
- * Due to controller issue of PHY_CLK_VALID in ULPI
- * mode, we set USB_CTRL_USB_EN before checking
- * PHY_CLK_VALID, otherwise PHY_CLK_VALID doesn't work.
- */
- clrsetbits_be32(non_ehci + FSL_SOC_USB_CTRL,
- UTMI_PHY_EN, USB_CTRL_USB_EN);
+ ULPI_PHY_CLK_SEL | USB_CTRL_USB_EN);
}
portsc |= PORT_PTS_ULPI;
break;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 074/104] driver core : Fix use after free of dev->parent in device_shutdown
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (72 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 073/104] fsl/usb: Resolve PHY_CLK_VLD instability issue for ULPI phy Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 075/104] USB: Fix breakage in ffs_fs_mount() Kamal Mostafa
` (30 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Benson Leung, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Benson Leung <bleung@chromium.org>
commit f123db8e9d6c84c863cb3c44d17e61995dc984fb upstream.
The put_device(dev) at the bottom of the loop of device_shutdown
may result in the dev being cleaned up. In device_create_release,
the dev is kfreed.
However, device_shutdown attempts to use the dev pointer again after
put_device by referring to dev->parent.
Copy the parent pointer instead to avoid this condition.
This bug was found on Chromium OS's chromeos-3.8, which is based on v3.8.11.
See bug report : https://code.google.com/p/chromium/issues/detail?id=297842
This can easily be reproduced when shutting down with
hidraw devices that report battery condition.
Two examples are the HP Bluetooth Mouse X4000b and the Apple Magic Mouse.
For example, with the magic mouse :
The dev in question is "hidraw0"
dev->parent is "magicmouse"
In the course of the shutdown for this device, the input event cleanup calls
a put on hidraw0, decrementing its reference count.
When we finally get to put_device(dev) in device_shutdown, kobject_cleanup
is called and device_create_release does kfree(dev).
dev->parent is no longer valid, and we may crash in
put_device(dev->parent).
This change should be applied on any kernel with this change :
d1c6c030fcec6f860d9bb6c632a3ebe62e28440b
Signed-off-by: Benson Leung <bleung@chromium.org>
Reviewed-by: Ming Lei <ming.lei@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/base/core.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/base/core.c b/drivers/base/core.c
index a235085..0ff9496 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -1825,7 +1825,7 @@ EXPORT_SYMBOL_GPL(device_move);
*/
void device_shutdown(void)
{
- struct device *dev;
+ struct device *dev, *parent;
spin_lock(&devices_kset->list_lock);
/*
@@ -1842,7 +1842,7 @@ void device_shutdown(void)
* prevent it from being freed because parent's
* lock is to be held
*/
- get_device(dev->parent);
+ parent = get_device(dev->parent);
get_device(dev);
/*
* Make sure the device is off the kset list, in the
@@ -1852,8 +1852,8 @@ void device_shutdown(void)
spin_unlock(&devices_kset->list_lock);
/* hold lock to avoid race with probe/release */
- if (dev->parent)
- device_lock(dev->parent);
+ if (parent)
+ device_lock(parent);
device_lock(dev);
/* Don't allow any more runtime suspends */
@@ -1871,11 +1871,11 @@ void device_shutdown(void)
}
device_unlock(dev);
- if (dev->parent)
- device_unlock(dev->parent);
+ if (parent)
+ device_unlock(parent);
put_device(dev);
- put_device(dev->parent);
+ put_device(parent);
spin_lock(&devices_kset->list_lock);
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 075/104] USB: Fix breakage in ffs_fs_mount()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (73 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 074/104] driver core : Fix use after free of dev->parent in device_shutdown Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 076/104] usb: dwc3: pci: add support for BayTrail Kamal Mostafa
` (29 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Al Viro, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Viro <viro@ZenIV.linux.org.uk>
commit 2606b28aabd7dea1766c23a105e1124c95409c96 upstream.
There's a bunch of failure exits in ffs_fs_mount() with
seriously broken recovery logics. Most of that appears to stem
from misunderstanding of the ->kill_sb() semantics; unlike
->put_super() it is called for *all* superblocks of given type,
no matter how (in)complete the setup had been. ->put_super()
is called only if ->s_root is not NULL; any failure prior to
setting ->s_root will have the call of ->put_super() skipped.
->kill_sb(), OTOH, awaits every superblock that has come from
sget().
Current behaviour of ffs_fs_mount():
We have struct ffs_sb_fill_data data on stack there. We do
ffs_dev = functionfs_acquire_dev_callback(dev_name);
and store that in data.private_data. Then we call mount_nodev(),
passing it ffs_sb_fill() as a callback. That will either fail
outright, or manage to call ffs_sb_fill(). There we allocate an
instance of struct ffs_data, slap the value of ffs_dev (picked
from data.private_data) into ffs->private_data and overwrite
data.private_data by storing ffs into an overlapping member
(data.ffs_data). Then we store ffs into sb->s_fs_info and attempt
to set the rest of the things up (root inode, root dentry, then
create /ep0 there). Any of those might fail. Should that
happen, we get ffs_fs_kill_sb() called before mount_nodev()
returns. If mount_nodev() fails for any reason whatsoever,
we proceed to
functionfs_release_dev_callback(data.ffs_data);
That's broken in a lot of ways. Suppose the thing has failed in
allocation of e.g. root inode or dentry. We have
functionfs_release_dev_callback(ffs);
ffs_data_put(ffs);
done by ffs_fs_kill_sb() (ffs accessed via sb->s_fs_info), followed by
functionfs_release_dev_callback(ffs);
from ffs_fs_mount() (via data.ffs_data). Note that the second
functionfs_release_dev_callback() has every chance to be done to freed memory.
Suppose we fail *before* root inode allocation. What happens then?
ffs_fs_kill_sb() doesn't do anything to ffs (it's either not called at all,
or it doesn't have a pointer to ffs stored in sb->s_fs_info). And
functionfs_release_dev_callback(data.ffs_data);
is called by ffs_fs_mount(), but here we are in nasal daemon country - we
are reading from a member of union we'd never stored into. In practice,
we'll get what we used to store into the overlapping field, i.e. ffs_dev.
And then we get screwed, since we treat it (struct gfs_ffs_obj * in
disguise, returned by functionfs_acquire_dev_callback()) as struct
ffs_data *, pick what would've been ffs_data ->private_data from it
(*well* past the actual end of the struct gfs_ffs_obj - struct ffs_data
is much bigger) and poke in whatever it points to.
FWIW, there's a minor leak on top of all that in case if ffs_sb_fill()
fails on kstrdup() - ffs is obviously forgotten.
The thing is, there is no point in playing all those games with union.
Just allocate and initialize ffs_data *before* calling mount_nodev() and
pass a pointer to it via data.ffs_data. And once it's stored in
sb->s_fs_info, clear data.ffs_data, so that ffs_fs_mount() knows that
it doesn't need to kill the sucker manually - from that point on
we'll have it done by ->kill_sb().
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: Michal Nazarewicz <mina86@mina86.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/gadget/f_fs.c | 60 ++++++++++++++++++++---------------------------
1 file changed, 26 insertions(+), 34 deletions(-)
diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c
index 8c2f251..de3e266 100644
--- a/drivers/usb/gadget/f_fs.c
+++ b/drivers/usb/gadget/f_fs.c
@@ -1036,37 +1036,19 @@ struct ffs_sb_fill_data {
struct ffs_file_perms perms;
umode_t root_mode;
const char *dev_name;
- union {
- /* set by ffs_fs_mount(), read by ffs_sb_fill() */
- void *private_data;
- /* set by ffs_sb_fill(), read by ffs_fs_mount */
- struct ffs_data *ffs_data;
- };
+ struct ffs_data *ffs_data;
};
static int ffs_sb_fill(struct super_block *sb, void *_data, int silent)
{
struct ffs_sb_fill_data *data = _data;
struct inode *inode;
- struct ffs_data *ffs;
+ struct ffs_data *ffs = data->ffs_data;
ENTER();
- /* Initialise data */
- ffs = ffs_data_new();
- if (unlikely(!ffs))
- goto Enomem;
-
ffs->sb = sb;
- ffs->dev_name = kstrdup(data->dev_name, GFP_KERNEL);
- if (unlikely(!ffs->dev_name))
- goto Enomem;
- ffs->file_perms = data->perms;
- ffs->private_data = data->private_data;
-
- /* used by the caller of this function */
- data->ffs_data = ffs;
-
+ data->ffs_data = NULL;
sb->s_fs_info = ffs;
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
@@ -1082,17 +1064,14 @@ static int ffs_sb_fill(struct super_block *sb, void *_data, int silent)
&data->perms);
sb->s_root = d_make_root(inode);
if (unlikely(!sb->s_root))
- goto Enomem;
+ return -ENOMEM;
/* EP0 file */
if (unlikely(!ffs_sb_create_file(sb, "ep0", ffs,
&ffs_ep0_operations, NULL)))
- goto Enomem;
+ return -ENOMEM;
return 0;
-
-Enomem:
- return -ENOMEM;
}
static int ffs_fs_parse_opts(struct ffs_sb_fill_data *data, char *opts)
@@ -1196,6 +1175,7 @@ ffs_fs_mount(struct file_system_type *t, int flags,
struct dentry *rv;
int ret;
void *ffs_dev;
+ struct ffs_data *ffs;
ENTER();
@@ -1203,18 +1183,30 @@ ffs_fs_mount(struct file_system_type *t, int flags,
if (unlikely(ret < 0))
return ERR_PTR(ret);
+ ffs = ffs_data_new();
+ if (unlikely(!ffs))
+ return ERR_PTR(-ENOMEM);
+ ffs->file_perms = data.perms;
+
+ ffs->dev_name = kstrdup(dev_name, GFP_KERNEL);
+ if (unlikely(!ffs->dev_name)) {
+ ffs_data_put(ffs);
+ return ERR_PTR(-ENOMEM);
+ }
+
ffs_dev = functionfs_acquire_dev_callback(dev_name);
- if (IS_ERR(ffs_dev))
- return ffs_dev;
+ if (IS_ERR(ffs_dev)) {
+ ffs_data_put(ffs);
+ return ERR_CAST(ffs_dev);
+ }
+ ffs->private_data = ffs_dev;
+ data.ffs_data = ffs;
- data.dev_name = dev_name;
- data.private_data = ffs_dev;
rv = mount_nodev(t, flags, &data, ffs_sb_fill);
-
- /* data.ffs_data is set by ffs_sb_fill */
- if (IS_ERR(rv))
+ if (IS_ERR(rv) && data.ffs_data) {
functionfs_release_dev_callback(data.ffs_data);
-
+ ffs_data_put(data.ffs_data);
+ }
return rv;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 076/104] usb: dwc3: pci: add support for BayTrail
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (74 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 075/104] USB: Fix breakage in ffs_fs_mount() Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 077/104] usb: dwc3: add support for Merrifield Kamal Mostafa
` (28 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Heikki Krogerus, Felipe Balbi, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
commit b62cd96de3161dfb125a769030eec35a4cab3d3a upstream.
Add PCI id for Intel BayTrail.
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/dwc3/dwc3-pci.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index 9c0306b..fb144a2b 100644
--- a/drivers/usb/dwc3/dwc3-pci.c
+++ b/drivers/usb/dwc3/dwc3-pci.c
@@ -50,6 +50,7 @@
/* FIXME define these in <linux/pci_ids.h> */
#define PCI_VENDOR_ID_SYNOPSYS 0x16c3
#define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3 0xabcd
+#define PCI_DEVICE_ID_INTEL_BYT 0x0f37
struct dwc3_pci {
struct device *dev;
@@ -210,6 +211,7 @@ static DEFINE_PCI_DEVICE_TABLE(dwc3_pci_id_table) = {
PCI_DEVICE(PCI_VENDOR_ID_SYNOPSYS,
PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3),
},
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT), },
{ } /* Terminating Entry */
};
MODULE_DEVICE_TABLE(pci, dwc3_pci_id_table);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 077/104] usb: dwc3: add support for Merrifield
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (75 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 076/104] usb: dwc3: pci: add support for BayTrail Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 078/104] ASoC: max98095: a couple array underflows Kamal Mostafa
` (27 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: David Cohen, Greg Kroah-Hartman, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: David Cohen <david.a.cohen@linux.intel.com>
commit 85601f8cf67c56a561a6dd5e130e65fdc179047d upstream.
Add PCI id for Intel Merrifield
Signed-off-by: David Cohen <david.a.cohen@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/dwc3/dwc3-pci.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index fb144a2b..f334a06 100644
--- a/drivers/usb/dwc3/dwc3-pci.c
+++ b/drivers/usb/dwc3/dwc3-pci.c
@@ -51,6 +51,7 @@
#define PCI_VENDOR_ID_SYNOPSYS 0x16c3
#define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3 0xabcd
#define PCI_DEVICE_ID_INTEL_BYT 0x0f37
+#define PCI_DEVICE_ID_INTEL_MRFLD 0x119e
struct dwc3_pci {
struct device *dev;
@@ -212,6 +213,7 @@ static DEFINE_PCI_DEVICE_TABLE(dwc3_pci_id_table) = {
PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3),
},
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT), },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MRFLD), },
{ } /* Terminating Entry */
};
MODULE_DEVICE_TABLE(pci, dwc3_pci_id_table);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 078/104] ASoC: max98095: a couple array underflows
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (76 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 077/104] usb: dwc3: add support for Merrifield Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 079/104] ASoC: ab8500-codec: info leak in anc_status_control_put() Kamal Mostafa
` (26 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Dan Carpenter, Mark Brown, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <dan.carpenter@oracle.com>
commit f8d7b13e14357ed19d2ca2799539600418dc3939 upstream.
The ->put() function are called from snd_ctl_elem_write() with user
supplied data. The limit checks here could underflow leading to a
crash.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
sound/soc/codecs/max98095.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/max98095.c b/sound/soc/codecs/max98095.c
index 41cdd16..8dbcacd 100644
--- a/sound/soc/codecs/max98095.c
+++ b/sound/soc/codecs/max98095.c
@@ -1863,7 +1863,7 @@ static int max98095_put_eq_enum(struct snd_kcontrol *kcontrol,
struct max98095_pdata *pdata = max98095->pdata;
int channel = max98095_get_eq_channel(kcontrol->id.name);
struct max98095_cdata *cdata;
- int sel = ucontrol->value.integer.value[0];
+ unsigned int sel = ucontrol->value.integer.value[0];
struct max98095_eq_cfg *coef_set;
int fs, best, best_val, i;
int regmask, regsave;
@@ -2016,7 +2016,7 @@ static int max98095_put_bq_enum(struct snd_kcontrol *kcontrol,
struct max98095_pdata *pdata = max98095->pdata;
int channel = max98095_get_bq_channel(codec, kcontrol->id.name);
struct max98095_cdata *cdata;
- int sel = ucontrol->value.integer.value[0];
+ unsigned int sel = ucontrol->value.integer.value[0];
struct max98095_biquad_cfg *coef_set;
int fs, best, best_val, i;
int regmask, regsave;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 079/104] ASoC: ab8500-codec: info leak in anc_status_control_put()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (77 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 078/104] ASoC: max98095: a couple array underflows Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 080/104] ASoC: 88pm860x: array overflow in snd_soc_put_volsw_2r_st() Kamal Mostafa
` (25 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Dan Carpenter, Mark Brown, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <dan.carpenter@oracle.com>
commit d63733aed90b432e5cc489ddfa28e342f91b4652 upstream.
If the user passes an invalid value it leads to an info leak when we
print the error message or it could oops. This is called with user
supplied data from snd_ctl_elem_write().
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
sound/soc/codecs/ab8500-codec.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/ab8500-codec.c b/sound/soc/codecs/ab8500-codec.c
index 6c12ac2..52509dd 100644
--- a/sound/soc/codecs/ab8500-codec.c
+++ b/sound/soc/codecs/ab8500-codec.c
@@ -1225,13 +1225,18 @@ static int anc_status_control_put(struct snd_kcontrol *kcontrol,
struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
struct device *dev = codec->dev;
bool apply_fir, apply_iir;
- int req, status;
+ unsigned int req;
+ int status;
dev_dbg(dev, "%s: Enter.\n", __func__);
mutex_lock(&drvdata->anc_lock);
req = ucontrol->value.integer.value[0];
+ if (req >= ARRAY_SIZE(enum_anc_state)) {
+ status = -EINVAL;
+ goto cleanup;
+ }
if (req != ANC_APPLY_FIR_IIR && req != ANC_APPLY_FIR &&
req != ANC_APPLY_IIR) {
dev_err(dev, "%s: ERROR: Unsupported status to set '%s'!\n",
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 080/104] ASoC: 88pm860x: array overflow in snd_soc_put_volsw_2r_st()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (78 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 079/104] ASoC: ab8500-codec: info leak in anc_status_control_put() Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 081/104] Bluetooth: Add a new PID/VID 0cf3/e005 for AR3012 Kamal Mostafa
` (24 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Dan Carpenter, Mark Brown, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <dan.carpenter@oracle.com>
commit d967967e8d1116fb38bad25e58714b5dddd03cca upstream.
This is called from snd_ctl_elem_write() with user supplied data so we
need to add some bounds checking.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
sound/soc/codecs/88pm860x-codec.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/sound/soc/codecs/88pm860x-codec.c b/sound/soc/codecs/88pm860x-codec.c
index 60159c0..6fd174b 100644
--- a/sound/soc/codecs/88pm860x-codec.c
+++ b/sound/soc/codecs/88pm860x-codec.c
@@ -351,6 +351,9 @@ static int snd_soc_put_volsw_2r_st(struct snd_kcontrol *kcontrol,
val = ucontrol->value.integer.value[0];
val2 = ucontrol->value.integer.value[1];
+ if (val >= ARRAY_SIZE(st_table) || val2 >= ARRAY_SIZE(st_table))
+ return -EINVAL;
+
err = snd_soc_update_bits(codec, reg, 0x3f, st_table[val].m);
if (err < 0)
return err;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 081/104] Bluetooth: Add a new PID/VID 0cf3/e005 for AR3012.
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (79 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 080/104] ASoC: 88pm860x: array overflow in snd_soc_put_volsw_2r_st() Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 082/104] Bluetooth: Fix security level for peripheral role Kamal Mostafa
` (23 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Peng Chen, Gustavo Padovan, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Peng Chen <pengchen@qti.qualcomm.com>
commit 0a3658cccdf5326ea508efeb1879b0e2508bb0c3 upstream.
usb device info:
T: Bus=06 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 15 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0cf3 ProdID=e005 Rev= 0.02
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
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
Signed-off-by: Peng Chen <pengchen@qca.qualcomm.com>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/bluetooth/ath3k.c | 2 ++
drivers/bluetooth/btusb.c | 1 +
2 files changed, 3 insertions(+)
diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
index 5a757be..8c5508b 100644
--- a/drivers/bluetooth/ath3k.c
+++ b/drivers/bluetooth/ath3k.c
@@ -85,6 +85,7 @@ static struct usb_device_id ath3k_table[] = {
{ USB_DEVICE(0x04CA, 0x3008) },
{ USB_DEVICE(0x13d3, 0x3362) },
{ USB_DEVICE(0x0CF3, 0xE004) },
+ { USB_DEVICE(0x0CF3, 0xE005) },
{ USB_DEVICE(0x0930, 0x0219) },
{ USB_DEVICE(0x0489, 0xe057) },
{ USB_DEVICE(0x13d3, 0x3393) },
@@ -126,6 +127,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
+ { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index b70c146..ccf2d28 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -143,6 +143,7 @@ static struct usb_device_id blacklist_table[] = {
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
+ { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 082/104] Bluetooth: Fix security level for peripheral role
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (80 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 081/104] Bluetooth: Add a new PID/VID 0cf3/e005 for AR3012 Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 083/104] Bluetooth: Fix encryption key size " Kamal Mostafa
` (22 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Andre Guedes, Gustavo Padovan, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Andre Guedes <andre.guedes@openbossa.org>
commit f8776218e8546397be64ad2bc0ebf4748522d6e3 upstream.
While playing the peripheral role, the host gets a LE Long Term Key
Request Event from the controller when a connection is established
with a bonded device. The host then informs the LTK which should be
used for the connection. Once the link is encrypted, the host gets
an Encryption Change Event.
Therefore we should set conn->pending_sec_level instead of conn->
sec_level in hci_le_ltk_request_evt. This way, conn->sec_level is
properly updated in hci_encrypt_change_evt.
Moreover, since we have a LTK associated to the device, we have at
least BT_SECURITY_MEDIUM security level.
Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/bluetooth/hci_event.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 81b4448..259776a 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -3967,7 +3967,9 @@ static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
cp.handle = cpu_to_le16(conn->handle);
if (ltk->authenticated)
- conn->sec_level = BT_SECURITY_HIGH;
+ conn->pending_sec_level = BT_SECURITY_HIGH;
+ else
+ conn->pending_sec_level = BT_SECURITY_MEDIUM;
hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 083/104] Bluetooth: Fix encryption key size for peripheral role
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (81 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 082/104] Bluetooth: Fix security level for peripheral role Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 084/104] Bluetooth: Add support for BCM20702A0 [0b05, 17cb] Kamal Mostafa
` (21 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Andre Guedes, Gustavo Padovan, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Andre Guedes <andre.guedes@openbossa.org>
commit 89cbb4da0abee2f39d75f67f9fd57f7410c8b65c upstream.
This patch fixes the connection encryption key size information when
the host is playing the peripheral role. We should set conn->enc_key_
size in hci_le_ltk_request_evt, otherwise it is left uninitialized.
Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/bluetooth/hci_event.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 259776a..ea5c902 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -3971,6 +3971,8 @@ static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
else
conn->pending_sec_level = BT_SECURITY_MEDIUM;
+ conn->enc_key_size = ltk->enc_size;
+
hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
if (ltk->type & HCI_SMP_STK) {
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 084/104] Bluetooth: Add support for BCM20702A0 [0b05, 17cb]
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (82 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 083/104] Bluetooth: Fix encryption key size " Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 085/104] Bluetooth: Introduce a new HCI_RFKILLED flag Kamal Mostafa
` (20 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Raphael Kubo da Costa, Gustavo Padovan, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Raphael Kubo da Costa <rakuco@FreeBSD.org>
commit 38a172bef8c93ecbfd69715fd88396988e4073fd upstream.
Yet another vendor specific ID for this chipset; this one for the ASUS
USB-BT400 Bluetooth 4.0 adapter.
T: Bus=03 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#= 6 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0b05 ProdID=17cb Rev=01.12
S: Manufacturer=Broadcom Corp
S: Product=BCM20702A0
S: SerialNumber=000272C64400
C: #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
Signed-off-by: Raphael Kubo da Costa <rakuco@FreeBSD.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/bluetooth/btusb.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index ccf2d28..a9c58f7 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -97,6 +97,7 @@ static struct usb_device_id btusb_table[] = {
/* Broadcom BCM20702A0 */
{ USB_DEVICE(0x0b05, 0x17b5) },
+ { USB_DEVICE(0x0b05, 0x17cb) },
{ USB_DEVICE(0x04ca, 0x2003) },
{ USB_DEVICE(0x0489, 0xe042) },
{ USB_DEVICE(0x413c, 0x8197) },
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 085/104] Bluetooth: Introduce a new HCI_RFKILLED flag
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (83 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 084/104] Bluetooth: Add support for BCM20702A0 [0b05, 17cb] Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 086/104] rtlwifi: Align private space in rtl_priv struct Kamal Mostafa
` (19 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Johan Hedberg, Gustavo Padovan, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hedberg <johan.hedberg@intel.com>
commit 5e130367d43ff22836bbae380d197d600fe8ddbb upstream.
This makes it more convenient to check for rfkill (no need to check for
dev->rfkill before calling rfkill_blocked()) and also avoids potential
races if the RFKILL state needs to be checked from within the rfkill
callback.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
include/net/bluetooth/hci.h | 1 +
net/bluetooth/hci_core.c | 15 ++++++++++-----
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 45eee08..5fb3600 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -104,6 +104,7 @@ enum {
enum {
HCI_SETUP,
HCI_AUTO_OFF,
+ HCI_RFKILLED,
HCI_MGMT,
HCI_PAIRABLE,
HCI_SERVICE_CACHE,
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 7a1dd72..916fc10 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -709,7 +709,7 @@ int hci_dev_open(__u16 dev)
goto done;
}
- if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) {
+ if (test_bit(HCI_RFKILLED, &hdev->dev_flags)) {
ret = -ERFKILL;
goto done;
}
@@ -1124,10 +1124,12 @@ static int hci_rfkill_set_block(void *data, bool blocked)
BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked);
- if (!blocked)
- return 0;
-
- hci_dev_do_close(hdev);
+ if (blocked) {
+ set_bit(HCI_RFKILLED, &hdev->dev_flags);
+ hci_dev_do_close(hdev);
+ } else {
+ clear_bit(HCI_RFKILLED, &hdev->dev_flags);
+}
return 0;
}
@@ -1817,6 +1819,9 @@ int hci_register_dev(struct hci_dev *hdev)
}
}
+ if (hdev->rfkill && rfkill_blocked(hdev->rfkill))
+ set_bit(HCI_RFKILLED, &hdev->dev_flags);
+
set_bit(HCI_SETUP, &hdev->dev_flags);
if (hdev->dev_type != HCI_AMP)
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 086/104] rtlwifi: Align private space in rtl_priv struct
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (84 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 085/104] Bluetooth: Introduce a new HCI_RFKILLED flag Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 087/104] p54usb: add USB ID for Corega WLUSB2GTST USB adapter Kamal Mostafa
` (18 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Larry Finger, John W. Linville, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Larry Finger <Larry.Finger@lwfinger.net>
commit 60ce314d1750fef843e9db70050e09e49f838b69 upstream.
The private array at the end of the rtl_priv struct is not aligned.
On ARM architecture, this causes an alignment trap and is fixed by aligning
that array with __align(sizeof(void *)). That should properly align that
space according to the requirements of all architectures.
Reported-by: Jason Andrews <jasona@cadence.com>
Tested-by: Jason Andrews <jasona@cadence.com>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/wireless/rtlwifi/wifi.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h
index 21a5f4f..a382f95 100644
--- a/drivers/net/wireless/rtlwifi/wifi.h
+++ b/drivers/net/wireless/rtlwifi/wifi.h
@@ -1871,7 +1871,7 @@ struct rtl_priv {
that it points to the data allocated
beyond this structure like:
rtl_pci_priv or rtl_usb_priv */
- u8 priv[0];
+ u8 priv[0] __aligned(sizeof(void *));
};
#define rtl_priv(hw) (((struct rtl_priv *)(hw)->priv))
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 087/104] p54usb: add USB ID for Corega WLUSB2GTST USB adapter
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (85 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 086/104] rtlwifi: Align private space in rtl_priv struct Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 088/104] mwifiex: fix hang issue for USB chipsets Kamal Mostafa
` (17 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Christian Lamparter, John W. Linville, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Lamparter <chunkeey@googlemail.com>
commit 1e43692cdb7cc445d6347d8a5207d9cef0c71434 upstream.
Added USB ID for Corega WLUSB2GTST USB adapter.
Reported-by: Joerg Kalisch <the_force@gmx.de>
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/wireless/p54/p54usb.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
index 1f78585..c9c62ac 100644
--- a/drivers/net/wireless/p54/p54usb.c
+++ b/drivers/net/wireless/p54/p54usb.c
@@ -83,6 +83,7 @@ static struct usb_device_id p54u_table[] = {
{USB_DEVICE(0x06a9, 0x000e)}, /* Westell 802.11g USB (A90-211WG-01) */
{USB_DEVICE(0x06b9, 0x0121)}, /* Thomson SpeedTouch 121g */
{USB_DEVICE(0x0707, 0xee13)}, /* SMC 2862W-G version 2 */
+ {USB_DEVICE(0x07aa, 0x0020)}, /* Corega WLUSB2GTST USB */
{USB_DEVICE(0x0803, 0x4310)}, /* Zoom 4410a */
{USB_DEVICE(0x083a, 0x4521)}, /* Siemens Gigaset USB Adapter 54 version 2 */
{USB_DEVICE(0x083a, 0x4531)}, /* T-Com Sinus 154 data II */
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 088/104] mwifiex: fix hang issue for USB chipsets
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (86 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 087/104] p54usb: add USB ID for Corega WLUSB2GTST USB adapter Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 089/104] mwifiex: fix NULL pointer dereference in usb suspend handler Kamal Mostafa
` (16 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Amitkumar Karwar, Bing Zhao, John W. Linville, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Amitkumar Karwar <akarwar@marvell.com>
commit bd1c6142edce787b8ac1be15635f845aa9905333 upstream.
Bug 60815 - Interface hangs in mwifiex_usb
https://bugzilla.kernel.org/show_bug.cgi?id=60815
We have 4 bytes of interface header for packets delivered to SDIO
and PCIe, but not for USB interface.
In Tx AMSDU case, currently 4 bytes of garbage data is unnecessarily
appended for USB packets. This sometimes leads to a firmware hang,
because it may not interpret the data packet correctly.
Problem is fixed by removing this redundant headroom for USB.
Tested-by: Dmitry Khromov <icechrome@gmail.com>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/wireless/mwifiex/11n_aggr.c | 3 ++-
drivers/net/wireless/mwifiex/11n_aggr.h | 2 +-
drivers/net/wireless/mwifiex/wmm.c | 3 +--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/mwifiex/11n_aggr.c b/drivers/net/wireless/mwifiex/11n_aggr.c
index 68d52cf..167681a 100644
--- a/drivers/net/wireless/mwifiex/11n_aggr.c
+++ b/drivers/net/wireless/mwifiex/11n_aggr.c
@@ -149,7 +149,7 @@ mwifiex_11n_form_amsdu_txpd(struct mwifiex_private *priv,
*/
int
mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
- struct mwifiex_ra_list_tbl *pra_list, int headroom,
+ struct mwifiex_ra_list_tbl *pra_list,
int ptrindex, unsigned long ra_list_flags)
__releases(&priv->wmm.ra_list_spinlock)
{
@@ -159,6 +159,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
int pad = 0, ret;
struct mwifiex_tx_param tx_param;
struct txpd *ptx_pd = NULL;
+ int headroom = adapter->iface_type == MWIFIEX_USB ? 0 : INTF_HEADER_LEN;
skb_src = skb_peek(&pra_list->skb_head);
if (!skb_src) {
diff --git a/drivers/net/wireless/mwifiex/11n_aggr.h b/drivers/net/wireless/mwifiex/11n_aggr.h
index 900e1c6..892098d 100644
--- a/drivers/net/wireless/mwifiex/11n_aggr.h
+++ b/drivers/net/wireless/mwifiex/11n_aggr.h
@@ -26,7 +26,7 @@
int mwifiex_11n_deaggregate_pkt(struct mwifiex_private *priv,
struct sk_buff *skb);
int mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
- struct mwifiex_ra_list_tbl *ptr, int headroom,
+ struct mwifiex_ra_list_tbl *ptr,
int ptr_index, unsigned long flags)
__releases(&priv->wmm.ra_list_spinlock);
diff --git a/drivers/net/wireless/mwifiex/wmm.c b/drivers/net/wireless/mwifiex/wmm.c
index 818f871..e59e575 100644
--- a/drivers/net/wireless/mwifiex/wmm.c
+++ b/drivers/net/wireless/mwifiex/wmm.c
@@ -1295,8 +1295,7 @@ mwifiex_dequeue_tx_packet(struct mwifiex_adapter *adapter)
if (mwifiex_is_amsdu_allowed(priv, tid) &&
mwifiex_is_11n_aggragation_possible(priv, ptr,
adapter->tx_buf_size))
- mwifiex_11n_aggregate_pkt(priv, ptr, INTF_HEADER_LEN,
- ptr_index, flags);
+ mwifiex_11n_aggregate_pkt(priv, ptr, ptr_index, flags);
/* ra_list_spinlock has been freed in
mwifiex_11n_aggregate_pkt() */
else
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 089/104] mwifiex: fix NULL pointer dereference in usb suspend handler
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (87 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 088/104] mwifiex: fix hang issue for USB chipsets Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 090/104] fs/binfmt_elf.c: prevent a coredump with a large vm_map_count from Oopsing Kamal Mostafa
` (15 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Bing Zhao, John W. Linville, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Bing Zhao <bzhao@marvell.com>
commit 346ece0b7ba2730b4d633b9e371fe55488803102 upstream.
Bug 60815 - Interface hangs in mwifiex_usb
https://bugzilla.kernel.org/show_bug.cgi?id=60815
[ 2.883807] BUG: unable to handle kernel NULL pointer dereference
at 0000000000000048
[ 2.883813] IP: [<ffffffff815a65e0>] pfifo_fast_enqueue+0x90/0x90
[ 2.883834] CPU: 1 PID: 3220 Comm: kworker/u8:90 Not tainted
3.11.1-monotone-l0 #6
[ 2.883834] Hardware name: Microsoft Corporation Surface with
Windows 8 Pro/Surface with Windows 8 Pro,
BIOS 1.03.0450 03/29/2013
On Surface Pro, suspend to ram gives a NULL pointer dereference in
pfifo_fast_enqueue(). The stack trace reveals that the offending
call is clearing carrier in mwifiex_usb suspend handler.
Since commit 1499d9f "mwifiex: don't drop carrier flag over suspend"
has removed the carrier flag handling over suspend/resume in SDIO
and PCIe drivers, I'm removing it in USB driver too. This also fixes
the bug for Surface Pro.
Tested-by: Dmitry Khromov <icechrome@gmail.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/net/wireless/mwifiex/usb.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/net/wireless/mwifiex/usb.c b/drivers/net/wireless/mwifiex/usb.c
index 63ac9f2..b96472c 100644
--- a/drivers/net/wireless/mwifiex/usb.c
+++ b/drivers/net/wireless/mwifiex/usb.c
@@ -446,9 +446,6 @@ static int mwifiex_usb_suspend(struct usb_interface *intf, pm_message_t message)
*/
adapter->is_suspended = true;
- for (i = 0; i < adapter->priv_num; i++)
- netif_carrier_off(adapter->priv[i]->netdev);
-
if (atomic_read(&card->rx_cmd_urb_pending) && card->rx_cmd.urb)
usb_kill_urb(card->rx_cmd.urb);
@@ -508,10 +505,6 @@ static int mwifiex_usb_resume(struct usb_interface *intf)
MWIFIEX_RX_CMD_BUF_SIZE);
}
- for (i = 0; i < adapter->priv_num; i++)
- if (adapter->priv[i]->media_connected)
- netif_carrier_on(adapter->priv[i]->netdev);
-
/* Disable Host Sleep */
if (adapter->hs_activated)
mwifiex_cancel_hs(mwifiex_get_priv(adapter,
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 090/104] fs/binfmt_elf.c: prevent a coredump with a large vm_map_count from Oopsing
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (88 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 089/104] mwifiex: fix NULL pointer dereference in usb suspend handler Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 091/104] nilfs2: fix issue with race condition of competition between segments for dirty blocks Kamal Mostafa
` (14 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Dan Aloni, Al Viro, Denys Vlasenko, Andrew Morton, Linus Torvalds,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Aloni <alonid@stratoscale.com>
commit 72023656961b8c81a168a7a6762d589339d0d7ec upstream.
A high setting of max_map_count, and a process core-dumping with a large
enough vm_map_count could result in an NT_FILE note not being written,
and the kernel crashing immediately later because it has assumed
otherwise.
Reproduction of the oops-causing bug described here:
https://lkml.org/lkml/2013/8/30/50
Rge ussue originated in commit 2aa362c49c31 ("coredump: extend core dump
note section to contain file names of mapped file") from Oct 4, 2012.
This patch make that section optional in that case. fill_files_note()
should signify the error, and also let the info struct in
elf_core_dump() be zero-initialized so that we can check for the
optionally written note.
[akpm@linux-foundation.org: avoid abusing E2BIG, remove a couple of not-really-needed local variables]
[akpm@linux-foundation.org: fix sparse warning]
Signed-off-by: Dan Aloni <alonid@stratoscale.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Denys Vlasenko <vda.linux@googlemail.com>
Reported-by: Martin MOKREJS <mmokrejs@gmail.com>
Tested-by: Martin MOKREJS <mmokrejs@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
fs/binfmt_elf.c | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index 5843a47..0950e59 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -1403,7 +1403,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
* long file_ofs
* followed by COUNT filenames in ASCII: "FILE1" NUL "FILE2" NUL...
*/
-static void fill_files_note(struct memelfnote *note)
+static int fill_files_note(struct memelfnote *note)
{
struct vm_area_struct *vma;
unsigned count, size, names_ofs, remaining, n;
@@ -1418,11 +1418,11 @@ static void fill_files_note(struct memelfnote *note)
names_ofs = (2 + 3 * count) * sizeof(data[0]);
alloc:
if (size >= MAX_FILE_NOTE_SIZE) /* paranoia check */
- goto err;
+ return -EINVAL;
size = round_up(size, PAGE_SIZE);
data = vmalloc(size);
if (!data)
- goto err;
+ return -ENOMEM;
start_end_ofs = data + 2;
name_base = name_curpos = ((char *)data) + names_ofs;
@@ -1475,7 +1475,7 @@ static void fill_files_note(struct memelfnote *note)
size = name_curpos - (char *)data;
fill_note(note, "CORE", NT_FILE, size, data);
- err: ;
+ return 0;
}
#ifdef CORE_DUMP_USE_REGSET
@@ -1676,8 +1676,8 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
fill_auxv_note(&info->auxv, current->mm);
info->size += notesize(&info->auxv);
- fill_files_note(&info->files);
- info->size += notesize(&info->files);
+ if (fill_files_note(&info->files) == 0)
+ info->size += notesize(&info->files);
return 1;
}
@@ -1709,7 +1709,8 @@ static int write_note_info(struct elf_note_info *info,
return 0;
if (first && !writenote(&info->auxv, file, foffset))
return 0;
- if (first && !writenote(&info->files, file, foffset))
+ if (first && info->files.data &&
+ !writenote(&info->files, file, foffset))
return 0;
for (i = 1; i < info->thread_notes; ++i)
@@ -1796,6 +1797,7 @@ static int elf_dump_thread_status(long signr, struct elf_thread_status *t)
struct elf_note_info {
struct memelfnote *notes;
+ struct memelfnote *notes_files;
struct elf_prstatus *prstatus; /* NT_PRSTATUS */
struct elf_prpsinfo *psinfo; /* NT_PRPSINFO */
struct list_head thread_list;
@@ -1886,9 +1888,12 @@ static int fill_note_info(struct elfhdr *elf, int phdrs,
fill_siginfo_note(info->notes + 2, &info->csigdata, siginfo);
fill_auxv_note(info->notes + 3, current->mm);
- fill_files_note(info->notes + 4);
+ info->numnote = 4;
- info->numnote = 5;
+ if (fill_files_note(info->notes + info->numnote) == 0) {
+ info->notes_files = info->notes + info->numnote;
+ info->numnote++;
+ }
/* Try to dump the FPU. */
info->prstatus->pr_fpvalid = elf_core_copy_task_fpregs(current, regs,
@@ -1950,8 +1955,9 @@ static void free_note_info(struct elf_note_info *info)
kfree(list_entry(tmp, struct elf_thread_status, list));
}
- /* Free data allocated by fill_files_note(): */
- vfree(info->notes[4].data);
+ /* Free data possibly allocated by fill_files_note(): */
+ if (info->notes_files)
+ vfree(info->notes_files->data);
kfree(info->prstatus);
kfree(info->psinfo);
@@ -2034,7 +2040,7 @@ static int elf_core_dump(struct coredump_params *cprm)
struct vm_area_struct *vma, *gate_vma;
struct elfhdr *elf = NULL;
loff_t offset = 0, dataoff, foffset;
- struct elf_note_info info;
+ struct elf_note_info info = { };
struct elf_phdr *phdr4note = NULL;
struct elf_shdr *shdr4extnum = NULL;
Elf_Half e_phnum;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 091/104] nilfs2: fix issue with race condition of competition between segments for dirty blocks
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (89 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 090/104] fs/binfmt_elf.c: prevent a coredump with a large vm_map_count from Oopsing Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 092/104] mm: avoid reinserting isolated balloon pages into LRU lists Kamal Mostafa
` (13 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Paul Fertser, ARAI Shun-ichi, Piotr Szymaniak,
Juan Barry Manuel Canham, Zahid Chowdhury, Elmer Zhang,
Kenneth Langga, Vyacheslav Dubeyko, Andrew Morton, Linus Torvalds,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Vyacheslav Dubeyko <slava@dubeyko.com>
commit 7f42ec3941560f0902fe3671e36f2c20ffd3af0a upstream.
Many NILFS2 users were reported about strange file system corruption
(for example):
NILFS: bad btree node (blocknr=185027): level = 0, flags = 0x0, nchildren = 768
NILFS error (device sda4): nilfs_bmap_last_key: broken bmap (inode number=11540)
But such error messages are consequence of file system's issue that takes
place more earlier. Fortunately, Jerome Poulin <jeromepoulin@gmail.com>
and Anton Eliasson <devel@antoneliasson.se> were reported about another
issue not so recently. These reports describe the issue with segctor
thread's crash:
BUG: unable to handle kernel paging request at 0000000000004c83
IP: nilfs_end_page_io+0x12/0xd0 [nilfs2]
Call Trace:
nilfs_segctor_do_construct+0xf25/0x1b20 [nilfs2]
nilfs_segctor_construct+0x17b/0x290 [nilfs2]
nilfs_segctor_thread+0x122/0x3b0 [nilfs2]
kthread+0xc0/0xd0
ret_from_fork+0x7c/0xb0
These two issues have one reason. This reason can raise third issue
too. Third issue results in hanging of segctor thread with eating of
100% CPU.
REPRODUCING PATH:
One of the possible way or the issue reproducing was described by
Jermoe me Poulin <jeromepoulin@gmail.com>:
1. init S to get to single user mode.
2. sysrq+E to make sure only my shell is running
3. start network-manager to get my wifi connection up
4. login as root and launch "screen"
5. cd /boot/log/nilfs which is a ext3 mount point and can log when NILFS dies.
6. lscp | xz -9e > lscp.txt.xz
7. mount my snapshot using mount -o cp=3360839,ro /dev/vgUbuntu/root /mnt/nilfs
8. start a screen to dump /proc/kmsg to text file since rsyslog is killed
9. start a screen and launch strace -f -o find-cat.log -t find
/mnt/nilfs -type f -exec cat {} > /dev/null \;
10. start a screen and launch strace -f -o apt-get.log -t apt-get update
11. launch the last command again as it did not crash the first time
12. apt-get crashes
13. ps aux > ps-aux-crashed.log
13. sysrq+W
14. sysrq+E wait for everything to terminate
15. sysrq+SUSB
Simplified way of the issue reproducing is starting kernel compilation
task and "apt-get update" in parallel.
REPRODUCIBILITY:
The issue is reproduced not stable [60% - 80%]. It is very important to
have proper environment for the issue reproducing. The critical
conditions for successful reproducing:
(1) It should have big modified file by mmap() way.
(2) This file should have the count of dirty blocks are greater that
several segments in size (for example, two or three) from time to time
during processing.
(3) It should be intensive background activity of files modification
in another thread.
INVESTIGATION:
First of all, it is possible to see that the reason of crash is not valid
page address:
NILFS [nilfs_segctor_complete_write]:2100 bh->b_count 0, bh->b_blocknr 13895680, bh->b_size 13897727, bh->b_page 0000000000001a82
NILFS [nilfs_segctor_complete_write]:2101 segbuf->sb_segnum 6783
Moreover, value of b_page (0x1a82) is 6786. This value looks like segment
number. And b_blocknr with b_size values look like block numbers. So,
buffer_head's pointer points on not proper address value.
Detailed investigation of the issue is discovered such picture:
[-----------------------------SEGMENT 6783-------------------------------]
NILFS [nilfs_segctor_do_construct]:2310 nilfs_segctor_begin_construction
NILFS [nilfs_segctor_do_construct]:2321 nilfs_segctor_collect
NILFS [nilfs_segctor_do_construct]:2336 nilfs_segctor_assign
NILFS [nilfs_segctor_do_construct]:2367 nilfs_segctor_update_segusage
NILFS [nilfs_segctor_do_construct]:2371 nilfs_segctor_prepare_write
NILFS [nilfs_segctor_do_construct]:2376 nilfs_add_checksums_on_logs
NILFS [nilfs_segctor_do_construct]:2381 nilfs_segctor_write
NILFS [nilfs_segbuf_submit_bio]:464 bio->bi_sector 111149024, segbuf->sb_segnum 6783
[-----------------------------SEGMENT 6784-------------------------------]
NILFS [nilfs_segctor_do_construct]:2310 nilfs_segctor_begin_construction
NILFS [nilfs_segctor_do_construct]:2321 nilfs_segctor_collect
NILFS [nilfs_lookup_dirty_data_buffers]:782 bh->b_count 1, bh->b_page ffffea000709b000, page->index 0, i_ino 1033103, i_size 25165824
NILFS [nilfs_lookup_dirty_data_buffers]:783 bh->b_assoc_buffers.next ffff8802174a6798, bh->b_assoc_buffers.prev ffff880221cffee8
NILFS [nilfs_segctor_do_construct]:2336 nilfs_segctor_assign
NILFS [nilfs_segctor_do_construct]:2367 nilfs_segctor_update_segusage
NILFS [nilfs_segctor_do_construct]:2371 nilfs_segctor_prepare_write
NILFS [nilfs_segctor_do_construct]:2376 nilfs_add_checksums_on_logs
NILFS [nilfs_segctor_do_construct]:2381 nilfs_segctor_write
NILFS [nilfs_segbuf_submit_bh]:575 bh->b_count 1, bh->b_page ffffea000709b000, page->index 0, i_ino 1033103, i_size 25165824
NILFS [nilfs_segbuf_submit_bh]:576 segbuf->sb_segnum 6784
NILFS [nilfs_segbuf_submit_bh]:577 bh->b_assoc_buffers.next ffff880218a0d5f8, bh->b_assoc_buffers.prev ffff880218bcdf50
NILFS [nilfs_segbuf_submit_bio]:464 bio->bi_sector 111150080, segbuf->sb_segnum 6784, segbuf->sb_nbio 0
[----------] ditto
NILFS [nilfs_segbuf_submit_bio]:464 bio->bi_sector 111164416, segbuf->sb_segnum 6784, segbuf->sb_nbio 15
[-----------------------------SEGMENT 6785-------------------------------]
NILFS [nilfs_segctor_do_construct]:2310 nilfs_segctor_begin_construction
NILFS [nilfs_segctor_do_construct]:2321 nilfs_segctor_collect
NILFS [nilfs_lookup_dirty_data_buffers]:782 bh->b_count 2, bh->b_page ffffea000709b000, page->index 0, i_ino 1033103, i_size 25165824
NILFS [nilfs_lookup_dirty_data_buffers]:783 bh->b_assoc_buffers.next ffff880219277e80, bh->b_assoc_buffers.prev ffff880221cffc88
NILFS [nilfs_segctor_do_construct]:2367 nilfs_segctor_update_segusage
NILFS [nilfs_segctor_do_construct]:2371 nilfs_segctor_prepare_write
NILFS [nilfs_segctor_do_construct]:2376 nilfs_add_checksums_on_logs
NILFS [nilfs_segctor_do_construct]:2381 nilfs_segctor_write
NILFS [nilfs_segbuf_submit_bh]:575 bh->b_count 2, bh->b_page ffffea000709b000, page->index 0, i_ino 1033103, i_size 25165824
NILFS [nilfs_segbuf_submit_bh]:576 segbuf->sb_segnum 6785
NILFS [nilfs_segbuf_submit_bh]:577 bh->b_assoc_buffers.next ffff880218a0d5f8, bh->b_assoc_buffers.prev ffff880222cc7ee8
NILFS [nilfs_segbuf_submit_bio]:464 bio->bi_sector 111165440, segbuf->sb_segnum 6785, segbuf->sb_nbio 0
[----------] ditto
NILFS [nilfs_segbuf_submit_bio]:464 bio->bi_sector 111177728, segbuf->sb_segnum 6785, segbuf->sb_nbio 12
NILFS [nilfs_segctor_do_construct]:2399 nilfs_segctor_wait
NILFS [nilfs_segbuf_wait]:676 segbuf->sb_segnum 6783
NILFS [nilfs_segbuf_wait]:676 segbuf->sb_segnum 6784
NILFS [nilfs_segbuf_wait]:676 segbuf->sb_segnum 6785
NILFS [nilfs_segctor_complete_write]:2100 bh->b_count 0, bh->b_blocknr 13895680, bh->b_size 13897727, bh->b_page 0000000000001a82
BUG: unable to handle kernel paging request at 0000000000001a82
IP: [<ffffffffa024d0f2>] nilfs_end_page_io+0x12/0xd0 [nilfs2]
Usually, for every segment we collect dirty files in list. Then, dirty
blocks are gathered for every dirty file, prepared for write and
submitted by means of nilfs_segbuf_submit_bh() call. Finally, it takes
place complete write phase after calling nilfs_end_bio_write() on the
block layer. Buffers/pages are marked as not dirty on final phase and
processed files removed from the list of dirty files.
It is possible to see that we had three prepare_write and submit_bio
phases before segbuf_wait and complete_write phase. Moreover, segments
compete between each other for dirty blocks because on every iteration
of segments processing dirty buffer_heads are added in several lists of
payload_buffers:
[SEGMENT 6784]: bh->b_assoc_buffers.next ffff880218a0d5f8, bh->b_assoc_buffers.prev ffff880218bcdf50
[SEGMENT 6785]: bh->b_assoc_buffers.next ffff880218a0d5f8, bh->b_assoc_buffers.prev ffff880222cc7ee8
The next pointer is the same but prev pointer has changed. It means
that buffer_head has next pointer from one list but prev pointer from
another. Such modification can be made several times. And, finally, it
can be resulted in various issues: (1) segctor hanging, (2) segctor
crashing, (3) file system metadata corruption.
FIX:
This patch adds:
(1) setting of BH_Async_Write flag in nilfs_segctor_prepare_write()
for every proccessed dirty block;
(2) checking of BH_Async_Write flag in
nilfs_lookup_dirty_data_buffers() and
nilfs_lookup_dirty_node_buffers();
(3) clearing of BH_Async_Write flag in nilfs_segctor_complete_write(),
nilfs_abort_logs(), nilfs_forget_buffer(), nilfs_clear_dirty_page().
Reported-by: Jerome Poulin <jeromepoulin@gmail.com>
Reported-by: Anton Eliasson <devel@antoneliasson.se>
Cc: Paul Fertser <fercerpav@gmail.com>
Cc: ARAI Shun-ichi <hermes@ceres.dti.ne.jp>
Cc: Piotr Szymaniak <szarpaj@grubelek.pl>
Cc: Juan Barry Manuel Canham <Linux@riotingpacifist.net>
Cc: Zahid Chowdhury <zahid.chowdhury@starsolutions.com>
Cc: Elmer Zhang <freeboy6716@gmail.com>
Cc: Kenneth Langga <klangga@gmail.com>
Signed-off-by: Vyacheslav Dubeyko <slava@dubeyko.com>
Acked-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
[ kamal: backport to 3.8 ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
fs/nilfs2/page.c | 2 ++
fs/nilfs2/segment.c | 11 +++++++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/fs/nilfs2/page.c b/fs/nilfs2/page.c
index 07f76db..f34deaf 100644
--- a/fs/nilfs2/page.c
+++ b/fs/nilfs2/page.c
@@ -94,6 +94,7 @@ void nilfs_forget_buffer(struct buffer_head *bh)
clear_buffer_nilfs_volatile(bh);
clear_buffer_nilfs_checked(bh);
clear_buffer_nilfs_redirected(bh);
+ clear_buffer_async_write(bh);
clear_buffer_dirty(bh);
if (nilfs_page_buffers_clean(page))
__nilfs_clear_page_dirty(page);
@@ -390,6 +391,7 @@ void nilfs_clear_dirty_pages(struct address_space *mapping)
bh = head = page_buffers(page);
do {
lock_buffer(bh);
+ clear_buffer_async_write(bh);
clear_buffer_dirty(bh);
clear_buffer_nilfs_volatile(bh);
clear_buffer_nilfs_checked(bh);
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index a5752a58..cbd6618 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -665,7 +665,7 @@ static size_t nilfs_lookup_dirty_data_buffers(struct inode *inode,
bh = head = page_buffers(page);
do {
- if (!buffer_dirty(bh))
+ if (!buffer_dirty(bh) || buffer_async_write(bh))
continue;
get_bh(bh);
list_add_tail(&bh->b_assoc_buffers, listp);
@@ -699,7 +699,8 @@ static void nilfs_lookup_dirty_node_buffers(struct inode *inode,
for (i = 0; i < pagevec_count(&pvec); i++) {
bh = head = page_buffers(pvec.pages[i]);
do {
- if (buffer_dirty(bh)) {
+ if (buffer_dirty(bh) &&
+ !buffer_async_write(bh)) {
get_bh(bh);
list_add_tail(&bh->b_assoc_buffers,
listp);
@@ -1579,6 +1580,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci)
list_for_each_entry(bh, &segbuf->sb_segsum_buffers,
b_assoc_buffers) {
+ set_buffer_async_write(bh);
if (bh->b_page != bd_page) {
if (bd_page) {
lock_page(bd_page);
@@ -1592,6 +1594,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci)
list_for_each_entry(bh, &segbuf->sb_payload_buffers,
b_assoc_buffers) {
+ set_buffer_async_write(bh);
if (bh == segbuf->sb_super_root) {
if (bh->b_page != bd_page) {
lock_page(bd_page);
@@ -1677,6 +1680,7 @@ static void nilfs_abort_logs(struct list_head *logs, int err)
list_for_each_entry(segbuf, logs, sb_list) {
list_for_each_entry(bh, &segbuf->sb_segsum_buffers,
b_assoc_buffers) {
+ clear_buffer_async_write(bh);
if (bh->b_page != bd_page) {
if (bd_page)
end_page_writeback(bd_page);
@@ -1686,6 +1690,7 @@ static void nilfs_abort_logs(struct list_head *logs, int err)
list_for_each_entry(bh, &segbuf->sb_payload_buffers,
b_assoc_buffers) {
+ clear_buffer_async_write(bh);
if (bh == segbuf->sb_super_root) {
if (bh->b_page != bd_page) {
end_page_writeback(bd_page);
@@ -1755,6 +1760,7 @@ static void nilfs_segctor_complete_write(struct nilfs_sc_info *sci)
b_assoc_buffers) {
set_buffer_uptodate(bh);
clear_buffer_dirty(bh);
+ clear_buffer_async_write(bh);
if (bh->b_page != bd_page) {
if (bd_page)
end_page_writeback(bd_page);
@@ -1776,6 +1782,7 @@ static void nilfs_segctor_complete_write(struct nilfs_sc_info *sci)
b_assoc_buffers) {
set_buffer_uptodate(bh);
clear_buffer_dirty(bh);
+ clear_buffer_async_write(bh);
clear_buffer_delay(bh);
clear_buffer_nilfs_volatile(bh);
clear_buffer_nilfs_redirected(bh);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 092/104] mm: avoid reinserting isolated balloon pages into LRU lists
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (90 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 091/104] nilfs2: fix issue with race condition of competition between segments for dirty blocks Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 093/104] USB: serial: option: Ignore card reader interface on Huawei E1750 Kamal Mostafa
` (12 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Rafael Aquini, Mel Gorman, Rik van Riel, Hugh Dickins,
Johannes Weiner, Andrew Morton, Linus Torvalds, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael Aquini <aquini@redhat.com>
commit 117aad1e9e4d97448d1df3f84b08bd65811e6d6a upstream.
Isolated balloon pages can wrongly end up in LRU lists when
migrate_pages() finishes its round without draining all the isolated
page list.
The same issue can happen when reclaim_clean_pages_from_list() tries to
reclaim pages from an isolated page list, before migration, in the CMA
path. Such balloon page leak opens a race window against LRU lists
shrinkers that leads us to the following kernel panic:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000028
IP: [<ffffffff810c2625>] shrink_page_list+0x24e/0x897
PGD 3cda2067 PUD 3d713067 PMD 0
Oops: 0000 [#1] SMP
CPU: 0 PID: 340 Comm: kswapd0 Not tainted 3.12.0-rc1-22626-g4367597 #87
Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
RIP: shrink_page_list+0x24e/0x897
RSP: 0000:ffff88003da499b8 EFLAGS: 00010286
RAX: 0000000000000000 RBX: ffff88003e82bd60 RCX: 00000000000657d5
RDX: 0000000000000000 RSI: 000000000000031f RDI: ffff88003e82bd40
RBP: ffff88003da49ab0 R08: 0000000000000001 R09: 0000000081121a45
R10: ffffffff81121a45 R11: ffff88003c4a9a28 R12: ffff88003e82bd40
R13: ffff88003da0e800 R14: 0000000000000001 R15: ffff88003da49d58
FS: 0000000000000000(0000) GS:ffff88003fc00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00000000067d9000 CR3: 000000003ace5000 CR4: 00000000000407b0
Call Trace:
shrink_inactive_list+0x240/0x3de
shrink_lruvec+0x3e0/0x566
__shrink_zone+0x94/0x178
shrink_zone+0x3a/0x82
balance_pgdat+0x32a/0x4c2
kswapd+0x2f0/0x372
kthread+0xa2/0xaa
ret_from_fork+0x7c/0xb0
Code: 80 7d 8f 01 48 83 95 68 ff ff ff 00 4c 89 e7 e8 5a 7b 00 00 48 85 c0 49 89 c5 75 08 80 7d 8f 00 74 3e eb 31 48 8b 80 18 01 00 00 <48> 8b 74 0d 48 8b 78 30 be 02 00 00 00 ff d2 eb
RIP [<ffffffff810c2625>] shrink_page_list+0x24e/0x897
RSP <ffff88003da499b8>
CR2: 0000000000000028
---[ end trace 703d2451af6ffbfd ]---
Kernel panic - not syncing: Fatal exception
This patch fixes the issue, by assuring the proper tests are made at
putback_movable_pages() & reclaim_clean_pages_from_list() to avoid
isolated balloon pages being wrongly reinserted in LRU lists.
[akpm@linux-foundation.org: clarify awkward comment text]
Signed-off-by: Rafael Aquini <aquini@redhat.com>
Reported-by: Luiz Capitulino <lcapitulino@redhat.com>
Tested-by: Luiz Capitulino <lcapitulino@redhat.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Rik van Riel <riel@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
include/linux/balloon_compaction.h | 25 +++++++++++++++++++++++++
mm/migrate.c | 2 +-
mm/vmscan.c | 4 +++-
3 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/include/linux/balloon_compaction.h b/include/linux/balloon_compaction.h
index f7f1d71..089743a 100644
--- a/include/linux/balloon_compaction.h
+++ b/include/linux/balloon_compaction.h
@@ -159,6 +159,26 @@ static inline bool balloon_page_movable(struct page *page)
}
/*
+ * isolated_balloon_page - identify an isolated balloon page on private
+ * compaction/migration page lists.
+ *
+ * After a compaction thread isolates a balloon page for migration, it raises
+ * the page refcount to prevent concurrent compaction threads from re-isolating
+ * the same page. For that reason putback_movable_pages(), or other routines
+ * that need to identify isolated balloon pages on private pagelists, cannot
+ * rely on balloon_page_movable() to accomplish the task.
+ */
+static inline bool isolated_balloon_page(struct page *page)
+{
+ /* Already isolated balloon pages, by default, have a raised refcount */
+ if (page_flags_cleared(page) && !page_mapped(page) &&
+ page_count(page) >= 2)
+ return __is_movable_balloon_page(page);
+
+ return false;
+}
+
+/*
* balloon_page_insert - insert a page into the balloon's page list and make
* the page->mapping assignment accordingly.
* @page : page to be assigned as a 'balloon page'
@@ -243,6 +263,11 @@ static inline bool balloon_page_movable(struct page *page)
return false;
}
+static inline bool isolated_balloon_page(struct page *page)
+{
+ return false;
+}
+
static inline bool balloon_page_isolate(struct page *page)
{
return false;
diff --git a/mm/migrate.c b/mm/migrate.c
index 8f1bd12..ba30b16 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -103,7 +103,7 @@ void putback_movable_pages(struct list_head *l)
list_del(&page->lru);
dec_zone_page_state(page, NR_ISOLATED_ANON +
page_is_file_cache(page));
- if (unlikely(balloon_page_movable(page)))
+ if (unlikely(isolated_balloon_page(page)))
balloon_page_putback(page);
else
putback_lru_page(page);
diff --git a/mm/vmscan.c b/mm/vmscan.c
index c6f50bc..8142623 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -47,6 +47,7 @@
#include <asm/div64.h>
#include <linux/swapops.h>
+#include <linux/balloon_compaction.h>
#include "internal.h"
@@ -977,7 +978,8 @@ unsigned long reclaim_clean_pages_from_list(struct zone *zone,
LIST_HEAD(clean_pages);
list_for_each_entry_safe(page, next, page_list, lru) {
- if (page_is_file_cache(page) && !PageDirty(page)) {
+ if (page_is_file_cache(page) && !PageDirty(page) &&
+ !isolated_balloon_page(page)) {
ClearPageActive(page);
list_move(&page->lru, &clean_pages);
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 093/104] USB: serial: option: Ignore card reader interface on Huawei E1750
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (91 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 092/104] mm: avoid reinserting isolated balloon pages into LRU lists Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 094/104] gpio/omap: maintain GPIO and IRQ usage separately Kamal Mostafa
` (11 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Michal Malý, Bjørn Mork, Greg Kroah-Hartman,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: =?UTF-8?q?Michal=20Mal=C3=BD?= <madcatxster@prifuk.cz>
commit eb2addd4044b4b2ce77693bde5bc810536dd96ee upstream.
Hi,
my Huawei 3G modem has an embedded Smart Card reader which causes
trouble when the modem is being detected (a bunch of "<warn> (ttyUSBx):
open blocked by driver for more than 7 seconds!" in messages.log). This
trivial patch corrects the problem for me. The modem identifies itself
as "12d1:1406 Huawei Technologies Co., Ltd. E1750" in lsusb although the
description on the body says "Model E173u-1"
Signed-off-by: Michal Malý <madcatxster@prifuk.cz>
Cc: Bjørn Mork <bjorn@mork.no>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/usb/serial/option.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 09e0581..0e33f7d 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -81,6 +81,7 @@ static void option_instat_callback(struct urb *urb);
#define HUAWEI_VENDOR_ID 0x12D1
#define HUAWEI_PRODUCT_E173 0x140C
+#define HUAWEI_PRODUCT_E1750 0x1406
#define HUAWEI_PRODUCT_K4505 0x1464
#define HUAWEI_PRODUCT_K3765 0x1465
#define HUAWEI_PRODUCT_K4605 0x14C6
@@ -567,6 +568,8 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff),
.driver_info = (kernel_ulong_t) &net_intf1_blacklist },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1750, 0xff, 0xff, 0xff),
+ .driver_info = (kernel_ulong_t) &net_intf2_blacklist },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1441, USB_CLASS_COMM, 0x02, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1442, USB_CLASS_COMM, 0x02, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff),
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 094/104] gpio/omap: maintain GPIO and IRQ usage separately
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (92 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 093/104] USB: serial: option: Ignore card reader interface on Huawei E1750 Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 095/104] gpio/omap: auto-setup a GPIO when used as an IRQ Kamal Mostafa
` (10 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Javier Martinez Canillas, Linus Walleij, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
commit fa365e4d729065b5e85165df3dc9699ed47489cc upstream.
The GPIO OMAP controller pins can be used as IRQ and GPIO
independently so is necessary to keep track GPIO pins and
IRQ lines usage separately to make sure that the bank will
always be enabled while being used.
Also move gpio_is_input() definition in preparation for the
next patch that setups the controller's irq_chip driver when
a caller requests an interrupt line.
Acked-by: Stephen Warren <swarren@nvidia.com>
Tested-by: George Cherian <george.cherian@ti.com>
Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Tested-by: Lars Poeschel <poeschel@lemonage.de>
Reviewed-by: Kevin Hilman <khilman@linaro.org>
Tested-by: Kevin Hilman <khilman@linaro.org>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
[ kamal: backport to 3.8 (context) ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Conflicts:
drivers/gpio/gpio-omap.c
---
drivers/gpio/gpio-omap.c | 36 +++++++++++++++++++++++-------------
1 file changed, 23 insertions(+), 13 deletions(-)
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index f1fbedb2..343fc2f 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -65,6 +65,7 @@ struct gpio_bank {
struct gpio_chip chip;
struct clk *dbck;
u32 mod_usage;
+ u32 irq_usage;
u32 dbck_enable_mask;
bool dbck_enabled;
struct device *dev;
@@ -87,6 +88,9 @@ struct gpio_bank {
#define GPIO_BIT(bank, gpio) (1 << GPIO_INDEX(bank, gpio))
#define GPIO_MOD_CTRL_BIT BIT(0)
+#define BANK_USED(bank) (bank->mod_usage || bank->irq_usage)
+#define LINE_USED(line, offset) (line & (1 << offset))
+
static int irq_to_gpio(struct gpio_bank *bank, unsigned int gpio_irq)
{
return gpio_irq - bank->irq_base + bank->chip.base;
@@ -414,6 +418,13 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio,
return 0;
}
+static int gpio_is_input(struct gpio_bank *bank, int mask)
+{
+ void __iomem *reg = bank->base + bank->regs->direction;
+
+ return __raw_readl(reg) & mask;
+}
+
static int gpio_irq_type(struct irq_data *d, unsigned type)
{
struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
@@ -421,6 +432,9 @@ static int gpio_irq_type(struct irq_data *d, unsigned type)
int retval;
unsigned long flags;
+ if (WARN_ON(!BANK_USED(bank)))
+ return -EINVAL;
+
#ifdef CONFIG_ARCH_OMAP1
if (d->irq > IH_MPUIO_BASE)
gpio = OMAP_MPUIO(d->irq - IH_MPUIO_BASE);
@@ -438,6 +452,7 @@ static int gpio_irq_type(struct irq_data *d, unsigned type)
spin_lock_irqsave(&bank->lock, flags);
retval = _set_gpio_triggering(bank, GPIO_INDEX(bank, gpio), type);
+ bank->irq_usage |= 1 << GPIO_INDEX(bank, gpio);
spin_unlock_irqrestore(&bank->lock, flags);
if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
@@ -594,7 +609,7 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset)
* If this is the first gpio_request for the bank,
* enable the bank module.
*/
- if (!bank->mod_usage)
+ if (!BANK_USED(bank))
pm_runtime_get_sync(bank->dev);
spin_lock_irqsave(&bank->lock, flags);
@@ -610,7 +625,7 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset)
__raw_writel(__raw_readl(reg) | (1 << offset), reg);
}
- if (bank->regs->ctrl && !bank->mod_usage) {
+ if (bank->regs->ctrl && !BANK_USED(bank)) {
void __iomem *reg = bank->base + bank->regs->ctrl;
u32 ctrl;
@@ -645,7 +660,7 @@ static void omap_gpio_free(struct gpio_chip *chip, unsigned offset)
bank->mod_usage &= ~(1 << offset);
- if (bank->regs->ctrl && !bank->mod_usage) {
+ if (bank->regs->ctrl && !BANK_USED(bank)) {
void __iomem *reg = bank->base + bank->regs->ctrl;
u32 ctrl;
@@ -663,7 +678,7 @@ static void omap_gpio_free(struct gpio_chip *chip, unsigned offset)
* If this is the last gpio to be freed in the bank,
* disable the bank module.
*/
- if (!bank->mod_usage)
+ if (!BANK_USED(bank))
pm_runtime_put(bank->dev);
}
@@ -758,8 +773,10 @@ static void gpio_irq_shutdown(struct irq_data *d)
struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
unsigned int gpio = irq_to_gpio(bank, d->irq);
unsigned long flags;
+ unsigned offset = GPIO_INDEX(bank, gpio);
spin_lock_irqsave(&bank->lock, flags);
+ bank->irq_usage &= ~(1 << offset);
_reset_gpio(bank, gpio);
spin_unlock_irqrestore(&bank->lock, flags);
}
@@ -893,13 +910,6 @@ static int gpio_input(struct gpio_chip *chip, unsigned offset)
return 0;
}
-static int gpio_is_input(struct gpio_bank *bank, int mask)
-{
- void __iomem *reg = bank->base + bank->regs->direction;
-
- return __raw_readl(reg) & mask;
-}
-
static int gpio_get(struct gpio_chip *chip, unsigned offset)
{
struct gpio_bank *bank;
@@ -1363,7 +1373,7 @@ void omap2_gpio_prepare_for_idle(int pwr_mode)
struct gpio_bank *bank;
list_for_each_entry(bank, &omap_gpio_list, node) {
- if (!bank->mod_usage || !bank->loses_context)
+ if (!BANK_USED(bank) || !bank->loses_context)
continue;
bank->power_mode = pwr_mode;
@@ -1377,7 +1387,7 @@ void omap2_gpio_resume_after_idle(void)
struct gpio_bank *bank;
list_for_each_entry(bank, &omap_gpio_list, node) {
- if (!bank->mod_usage || !bank->loses_context)
+ if (!BANK_USED(bank) || !bank->loses_context)
continue;
pm_runtime_get_sync(bank->dev);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 095/104] gpio/omap: auto-setup a GPIO when used as an IRQ
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (93 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 094/104] gpio/omap: maintain GPIO and IRQ usage separately Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 096/104] ib_srpt: Destroy cm_id before destroying QP Kamal Mostafa
` (9 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Javier Martinez Canillas, Linus Walleij, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
commit fac7fa162a19100298d5d91359960037dc5bfca9 upstream.
The OMAP GPIO controller HW requires a pin to be configured in GPIO
input mode in order to operate as an interrupt input. Since drivers
should not be aware of whether an interrupt pin is also a GPIO or not,
the HW should be fully configured/enabled as an IRQ if a driver solely
uses IRQ APIs such as request_irq(), and never calls any GPIO-related
APIs. As such, add the missing HW setup to the OMAP GPIO controller's
irq_chip driver.
Since this bypasses the GPIO subsystem we have to ensure that another
driver won't be able to request the same GPIO pin that is used as an
IRQ and set its direction as output. Requesting the GPIO and setting
its direction as input is allowed though.
This fixes smsc911x ethernet support for tobi and igep OMAP3 boards
and OMAP4 SDP SPI based ethernet that use a GPIO as an interrupt line.
Acked-by: Stephen Warren <swarren@nvidia.com>
Tested-by: George Cherian <george.cherian@ti.com>
Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Tested-by: Lars Poeschel <poeschel@lemonage.de>
Reviewed-by: Kevin Hilman <khilman@linaro.org>
Tested-by: Kevin Hilman <khilman@linaro.org>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/gpio/gpio-omap.c | 129 ++++++++++++++++++++++++++++++-----------------
1 file changed, 83 insertions(+), 46 deletions(-)
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index 343fc2f..fea4c50 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -418,6 +418,52 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio,
return 0;
}
+static void _enable_gpio_module(struct gpio_bank *bank, unsigned offset)
+{
+ if (bank->regs->pinctrl) {
+ void __iomem *reg = bank->base + bank->regs->pinctrl;
+
+ /* Claim the pin for MPU */
+ __raw_writel(__raw_readl(reg) | (1 << offset), reg);
+ }
+
+ if (bank->regs->ctrl && !BANK_USED(bank)) {
+ void __iomem *reg = bank->base + bank->regs->ctrl;
+ u32 ctrl;
+
+ ctrl = __raw_readl(reg);
+ /* Module is enabled, clocks are not gated */
+ ctrl &= ~GPIO_MOD_CTRL_BIT;
+ __raw_writel(ctrl, reg);
+ bank->context.ctrl = ctrl;
+ }
+}
+
+static void _disable_gpio_module(struct gpio_bank *bank, unsigned offset)
+{
+ void __iomem *base = bank->base;
+
+ if (bank->regs->wkup_en &&
+ !LINE_USED(bank->mod_usage, offset) &&
+ !LINE_USED(bank->irq_usage, offset)) {
+ /* Disable wake-up during idle for dynamic tick */
+ _gpio_rmw(base, bank->regs->wkup_en, 1 << offset, 0);
+ bank->context.wake_en =
+ __raw_readl(bank->base + bank->regs->wkup_en);
+ }
+
+ if (bank->regs->ctrl && !BANK_USED(bank)) {
+ void __iomem *reg = bank->base + bank->regs->ctrl;
+ u32 ctrl;
+
+ ctrl = __raw_readl(reg);
+ /* Module is disabled, clocks are gated */
+ ctrl |= GPIO_MOD_CTRL_BIT;
+ __raw_writel(ctrl, reg);
+ bank->context.ctrl = ctrl;
+ }
+}
+
static int gpio_is_input(struct gpio_bank *bank, int mask)
{
void __iomem *reg = bank->base + bank->regs->direction;
@@ -431,9 +477,10 @@ static int gpio_irq_type(struct irq_data *d, unsigned type)
unsigned gpio = 0;
int retval;
unsigned long flags;
+ unsigned offset;
- if (WARN_ON(!BANK_USED(bank)))
- return -EINVAL;
+ if (!BANK_USED(bank))
+ pm_runtime_get_sync(bank->dev);
#ifdef CONFIG_ARCH_OMAP1
if (d->irq > IH_MPUIO_BASE)
@@ -451,7 +498,16 @@ static int gpio_irq_type(struct irq_data *d, unsigned type)
return -EINVAL;
spin_lock_irqsave(&bank->lock, flags);
- retval = _set_gpio_triggering(bank, GPIO_INDEX(bank, gpio), type);
+ offset = GPIO_INDEX(bank, gpio);
+ retval = _set_gpio_triggering(bank, offset, type);
+ if (!LINE_USED(bank->mod_usage, offset)) {
+ _enable_gpio_module(bank, offset);
+ _set_gpio_direction(bank, offset, 1);
+ } else if (!gpio_is_input(bank, 1 << offset)) {
+ spin_unlock_irqrestore(&bank->lock, flags);
+ return -EINVAL;
+ }
+
bank->irq_usage |= 1 << GPIO_INDEX(bank, gpio);
spin_unlock_irqrestore(&bank->lock, flags);
@@ -614,30 +670,14 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset)
spin_lock_irqsave(&bank->lock, flags);
/* Set trigger to none. You need to enable the desired trigger with
- * request_irq() or set_irq_type().
+ * request_irq() or set_irq_type(). Only do this if the IRQ line has
+ * not already been requested.
*/
- _set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
-
- if (bank->regs->pinctrl) {
- void __iomem *reg = bank->base + bank->regs->pinctrl;
-
- /* Claim the pin for MPU */
- __raw_writel(__raw_readl(reg) | (1 << offset), reg);
+ if (!LINE_USED(bank->irq_usage, offset)) {
+ _set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
+ _enable_gpio_module(bank, offset);
}
-
- if (bank->regs->ctrl && !BANK_USED(bank)) {
- void __iomem *reg = bank->base + bank->regs->ctrl;
- u32 ctrl;
-
- ctrl = __raw_readl(reg);
- /* Module is enabled, clocks are not gated */
- ctrl &= ~GPIO_MOD_CTRL_BIT;
- __raw_writel(ctrl, reg);
- bank->context.ctrl = ctrl;
- }
-
bank->mod_usage |= 1 << offset;
-
spin_unlock_irqrestore(&bank->lock, flags);
return 0;
@@ -646,31 +686,11 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset)
static void omap_gpio_free(struct gpio_chip *chip, unsigned offset)
{
struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip);
- void __iomem *base = bank->base;
unsigned long flags;
spin_lock_irqsave(&bank->lock, flags);
-
- if (bank->regs->wkup_en) {
- /* Disable wake-up during idle for dynamic tick */
- _gpio_rmw(base, bank->regs->wkup_en, 1 << offset, 0);
- bank->context.wake_en =
- __raw_readl(bank->base + bank->regs->wkup_en);
- }
-
bank->mod_usage &= ~(1 << offset);
-
- if (bank->regs->ctrl && !BANK_USED(bank)) {
- void __iomem *reg = bank->base + bank->regs->ctrl;
- u32 ctrl;
-
- ctrl = __raw_readl(reg);
- /* Module is disabled, clocks are gated */
- ctrl |= GPIO_MOD_CTRL_BIT;
- __raw_writel(ctrl, reg);
- bank->context.ctrl = ctrl;
- }
-
+ _disable_gpio_module(bank, offset);
_reset_gpio(bank, bank->chip.base + offset);
spin_unlock_irqrestore(&bank->lock, flags);
@@ -777,8 +797,16 @@ static void gpio_irq_shutdown(struct irq_data *d)
spin_lock_irqsave(&bank->lock, flags);
bank->irq_usage &= ~(1 << offset);
+ _disable_gpio_module(bank, offset);
_reset_gpio(bank, gpio);
spin_unlock_irqrestore(&bank->lock, flags);
+
+ /*
+ * If this is the last IRQ to be freed in the bank,
+ * disable the bank module.
+ */
+ if (!BANK_USED(bank))
+ pm_runtime_put(bank->dev);
}
static void gpio_ack_irq(struct irq_data *d)
@@ -928,13 +956,22 @@ static int gpio_output(struct gpio_chip *chip, unsigned offset, int value)
{
struct gpio_bank *bank;
unsigned long flags;
+ int retval = 0;
bank = container_of(chip, struct gpio_bank, chip);
spin_lock_irqsave(&bank->lock, flags);
+
+ if (LINE_USED(bank->irq_usage, offset)) {
+ retval = -EINVAL;
+ goto exit;
+ }
+
bank->set_dataout(bank, offset, value);
_set_gpio_direction(bank, offset, 0);
+
+exit:
spin_unlock_irqrestore(&bank->lock, flags);
- return 0;
+ return retval;
}
static int gpio_debounce(struct gpio_chip *chip, unsigned offset,
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 096/104] ib_srpt: Destroy cm_id before destroying QP.
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (94 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 095/104] gpio/omap: auto-setup a GPIO when used as an IRQ Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 097/104] powerpc: Fix parameter clobber in csum_partial_copy_generic() Kamal Mostafa
` (8 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team; +Cc: Nicholas Bellinger, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Nicholas Bellinger <nab@linux-iscsi.org>
commit 0b41d6ca616ddeb3b6c0a80e8770b6f53cd42806 upstream.
This patch fixes a bug where ib_destroy_cm_id() was incorrectly being called
after srpt_destroy_ch_ib() had destroyed the active QP.
This would result in the following failed SRP_LOGIN_REQ messages:
Received SRP_LOGIN_REQ with i_port_id 0x0:0x2590ffff1762bd, t_port_id 0x2c903009f8f40:0x2c903009f8f40 and it_iu_len 260 on port 1 (guid=0xfe80000000000000:0x2c903009f8f41)
Received SRP_LOGIN_REQ with i_port_id 0x0:0x2590ffff1758f9, t_port_id 0x2c903009f8f40:0x2c903009f8f40 and it_iu_len 260 on port 2 (guid=0xfe80000000000000:0x2c903009f8f42)
Received SRP_LOGIN_REQ with i_port_id 0x0:0x2590ffff175941, t_port_id 0x2c903009f8f40:0x2c903009f8f40 and it_iu_len 260 on port 2 (guid=0xfe80000000000000:0x2c90300a3cfb2)
Received SRP_LOGIN_REQ with i_port_id 0x0:0x2590ffff176299, t_port_id 0x2c903009f8f40:0x2c903009f8f40 and it_iu_len 260 on port 1 (guid=0xfe80000000000000:0x2c90300a3cfb1)
mlx4_core 0000:84:00.0: command 0x19 failed: fw status = 0x9
rejected SRP_LOGIN_REQ because creating a new RDMA channel failed.
Received SRP_LOGIN_REQ with i_port_id 0x0:0x2590ffff176299, t_port_id 0x2c903009f8f40:0x2c903009f8f40 and it_iu_len 260 on port 1 (guid=0xfe80000000000000:0x2c90300a3cfb1)
mlx4_core 0000:84:00.0: command 0x19 failed: fw status = 0x9
rejected SRP_LOGIN_REQ because creating a new RDMA channel failed.
Received SRP_LOGIN_REQ with i_port_id 0x0:0x2590ffff176299, t_port_id 0x2c903009f8f40:0x2c903009f8f40 and it_iu_len 260 on port 1 (guid=0xfe80000000000000:0x2c90300a3cfb1)
Reported-by: Navin Ahuja <navin.ahuja@saratoga-speed.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/infiniband/ulp/srpt/ib_srpt.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
index b4a76d1..047ebe4 100644
--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
+++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
@@ -2358,6 +2358,8 @@ static void srpt_release_channel_work(struct work_struct *w)
transport_deregister_session(se_sess);
ch->sess = NULL;
+ ib_destroy_cm_id(ch->cm_id);
+
srpt_destroy_ch_ib(ch);
srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_ring,
@@ -2368,8 +2370,6 @@ static void srpt_release_channel_work(struct work_struct *w)
list_del(&ch->list);
spin_unlock_irq(&sdev->spinlock);
- ib_destroy_cm_id(ch->cm_id);
-
if (ch->release_done)
complete(ch->release_done);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 097/104] powerpc: Fix parameter clobber in csum_partial_copy_generic()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (95 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 096/104] ib_srpt: Destroy cm_id before destroying QP Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 098/104] powerpc: Restore registers on error exit from csum_partial_copy_generic() Kamal Mostafa
` (7 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Paul E. McKenney, Anton Blanchard, Benjamin Herrenschmidt,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
commit d9813c3681a36774b254c0cdc9cce53c9e22c756 upstream.
The csum_partial_copy_generic() uses register r7 to adjust the remaining
bytes to process. Unfortunately, r7 also holds a parameter, namely the
address of the flag to set in case of access exceptions while reading
the source buffer. Lacking a quantum implementation of PowerPC, this
commit instead uses register r9 to do the adjusting, leaving r7's
pointer uncorrupted.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
arch/powerpc/lib/checksum_64.S | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/lib/checksum_64.S b/arch/powerpc/lib/checksum_64.S
index 167f725..609665a 100644
--- a/arch/powerpc/lib/checksum_64.S
+++ b/arch/powerpc/lib/checksum_64.S
@@ -269,8 +269,8 @@ _GLOBAL(csum_partial_copy_generic)
rldicl. r6,r3,64-1,64-2 /* r6 = (r3 & 0x3) >> 1 */
beq .Lcopy_aligned
- li r7,4
- sub r6,r7,r6
+ li r9,4
+ sub r6,r9,r6
mtctr r6
1:
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 098/104] powerpc: Restore registers on error exit from csum_partial_copy_generic()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (96 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 097/104] powerpc: Fix parameter clobber in csum_partial_copy_generic() Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 099/104] powerpc/sysfs: Disable writing to PURR in guest mode Kamal Mostafa
` (6 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Paul E. McKenney, Anton Blanchard, Benjamin Herrenschmidt,
Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
commit 8f21bd0090052e740944f9397e2be5ac7957ded7 upstream.
The csum_partial_copy_generic() function saves the PowerPC non-volatile
r14, r15, and r16 registers for the main checksum-and-copy loop.
Unfortunately, it fails to restore them upon error exit from this loop,
which results in silent corruption of these registers in the presumably
rare event of an access exception within that loop.
This commit therefore restores these register on error exit from the loop.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
arch/powerpc/lib/checksum_64.S | 54 +++++++++++++++++++++++++++++++-----------
1 file changed, 40 insertions(+), 14 deletions(-)
diff --git a/arch/powerpc/lib/checksum_64.S b/arch/powerpc/lib/checksum_64.S
index 609665a..57a0720 100644
--- a/arch/powerpc/lib/checksum_64.S
+++ b/arch/powerpc/lib/checksum_64.S
@@ -226,19 +226,35 @@ _GLOBAL(csum_partial)
blr
- .macro source
+ .macro srcnr
100:
.section __ex_table,"a"
.align 3
- .llong 100b,.Lsrc_error
+ .llong 100b,.Lsrc_error_nr
.previous
.endm
- .macro dest
+ .macro source
+150:
+ .section __ex_table,"a"
+ .align 3
+ .llong 150b,.Lsrc_error
+ .previous
+ .endm
+
+ .macro dstnr
200:
.section __ex_table,"a"
.align 3
- .llong 200b,.Ldest_error
+ .llong 200b,.Ldest_error_nr
+ .previous
+ .endm
+
+ .macro dest
+250:
+ .section __ex_table,"a"
+ .align 3
+ .llong 250b,.Ldest_error
.previous
.endm
@@ -274,11 +290,11 @@ _GLOBAL(csum_partial_copy_generic)
mtctr r6
1:
-source; lhz r6,0(r3) /* align to doubleword */
+srcnr; lhz r6,0(r3) /* align to doubleword */
subi r5,r5,2
addi r3,r3,2
adde r0,r0,r6
-dest; sth r6,0(r4)
+dstnr; sth r6,0(r4)
addi r4,r4,2
bdnz 1b
@@ -392,10 +408,10 @@ dest; std r16,56(r4)
mtctr r6
3:
-source; ld r6,0(r3)
+srcnr; ld r6,0(r3)
addi r3,r3,8
adde r0,r0,r6
-dest; std r6,0(r4)
+dstnr; std r6,0(r4)
addi r4,r4,8
bdnz 3b
@@ -405,10 +421,10 @@ dest; std r6,0(r4)
srdi. r6,r5,2
beq .Lcopy_tail_halfword
-source; lwz r6,0(r3)
+srcnr; lwz r6,0(r3)
addi r3,r3,4
adde r0,r0,r6
-dest; stw r6,0(r4)
+dstnr; stw r6,0(r4)
addi r4,r4,4
subi r5,r5,4
@@ -416,10 +432,10 @@ dest; stw r6,0(r4)
srdi. r6,r5,1
beq .Lcopy_tail_byte
-source; lhz r6,0(r3)
+srcnr; lhz r6,0(r3)
addi r3,r3,2
adde r0,r0,r6
-dest; sth r6,0(r4)
+dstnr; sth r6,0(r4)
addi r4,r4,2
subi r5,r5,2
@@ -427,10 +443,10 @@ dest; sth r6,0(r4)
andi. r6,r5,1
beq .Lcopy_finish
-source; lbz r6,0(r3)
+srcnr; lbz r6,0(r3)
sldi r9,r6,8 /* Pad the byte out to 16 bits */
adde r0,r0,r9
-dest; stb r6,0(r4)
+dstnr; stb r6,0(r4)
.Lcopy_finish:
addze r0,r0 /* add in final carry */
@@ -440,6 +456,11 @@ dest; stb r6,0(r4)
blr
.Lsrc_error:
+ ld r14,STK_REG(R14)(r1)
+ ld r15,STK_REG(R15)(r1)
+ ld r16,STK_REG(R16)(r1)
+ addi r1,r1,STACKFRAMESIZE
+.Lsrc_error_nr:
cmpdi 0,r7,0
beqlr
li r6,-EFAULT
@@ -447,6 +468,11 @@ dest; stb r6,0(r4)
blr
.Ldest_error:
+ ld r14,STK_REG(R14)(r1)
+ ld r15,STK_REG(R15)(r1)
+ ld r16,STK_REG(R16)(r1)
+ addi r1,r1,STACKFRAMESIZE
+.Ldest_error_nr:
cmpdi 0,r8,0
beqlr
li r6,-EFAULT
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 099/104] powerpc/sysfs: Disable writing to PURR in guest mode
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (97 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 098/104] powerpc: Restore registers on error exit from csum_partial_copy_generic() Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 100/104] powerpc/iommu: Use GFP_KERNEL instead of GFP_ATOMIC in iommu_init_table() Kamal Mostafa
` (5 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Madhavan Srinivasan, Benjamin Herrenschmidt, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
commit d1211af3049f4c9c1d8d4eb8f8098cc4f4f0d0c7 upstream.
arch/powerpc/kernel/sysfs.c exports PURR with write permission.
This may be valid for kernel in phyp mode. But writing to
the file in guest mode causes crash due to a priviledge violation
Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
arch/powerpc/kernel/sysfs.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
index 3ce1f86..62eec1e 100644
--- a/arch/powerpc/kernel/sysfs.c
+++ b/arch/powerpc/kernel/sysfs.c
@@ -17,6 +17,7 @@
#include <asm/machdep.h>
#include <asm/smp.h>
#include <asm/pmc.h>
+#include <asm/firmware.h>
#include "cacheinfo.h"
@@ -179,15 +180,25 @@ SYSFS_PMCSETUP(spurr, SPRN_SPURR);
SYSFS_PMCSETUP(dscr, SPRN_DSCR);
SYSFS_PMCSETUP(pir, SPRN_PIR);
+/*
+ Lets only enable read for phyp resources and
+ enable write when needed with a separate function.
+ Lets be conservative and default to pseries.
+*/
static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);
static DEVICE_ATTR(spurr, 0600, show_spurr, NULL);
static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr);
-static DEVICE_ATTR(purr, 0600, show_purr, store_purr);
+static DEVICE_ATTR(purr, 0400, show_purr, store_purr);
static DEVICE_ATTR(pir, 0400, show_pir, NULL);
unsigned long dscr_default = 0;
EXPORT_SYMBOL(dscr_default);
+static void add_write_permission_dev_attr(struct device_attribute *attr)
+{
+ attr->attr.mode |= 0200;
+}
+
static ssize_t show_dscr_default(struct device *dev,
struct device_attribute *attr, char *buf)
{
@@ -394,8 +405,11 @@ static void __cpuinit register_cpu_online(unsigned int cpu)
if (cpu_has_feature(CPU_FTR_MMCRA))
device_create_file(s, &dev_attr_mmcra);
- if (cpu_has_feature(CPU_FTR_PURR))
+ if (cpu_has_feature(CPU_FTR_PURR)) {
+ if (!firmware_has_feature(FW_FEATURE_LPAR))
+ add_write_permission_dev_attr(&dev_attr_purr);
device_create_file(s, &dev_attr_purr);
+ }
if (cpu_has_feature(CPU_FTR_SPURR))
device_create_file(s, &dev_attr_spurr);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 100/104] powerpc/iommu: Use GFP_KERNEL instead of GFP_ATOMIC in iommu_init_table()
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (98 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 099/104] powerpc/sysfs: Disable writing to PURR in guest mode Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 101/104] powerpc/vio: Fix modalias_show return values Kamal Mostafa
` (4 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Nishanth Aravamudan, Benjamin Herrenschmidt, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
commit 1cf389df090194a0976dc867b7fffe99d9d490cb upstream.
Under heavy (DLPAR?) stress, we tripped this panic() in
arch/powerpc/kernel/iommu.c::iommu_init_table():
page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz));
if (!page)
panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
Before the panic() we got a page allocation failure for an order-2
allocation. There appears to be memory free, but perhaps not in the
ATOMIC context. I looked through all the call-sites of
iommu_init_table() and didn't see any obvious reason to need an ATOMIC
allocation. Most call-sites in fact have an explicit GFP_KERNEL
allocation shortly before the call to iommu_init_table(), indicating we
are not in an atomic context. There is some indirection for some paths,
but I didn't see any locks indicating that GFP_KERNEL is inappropriate.
With this change under the same conditions, we have not been able to
reproduce the panic.
Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
arch/powerpc/kernel/iommu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index c862fd7..0eb8da2 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -658,7 +658,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid)
/* number of bytes needed for the bitmap */
sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
- page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz));
+ page = alloc_pages_node(nid, GFP_KERNEL, get_order(sz));
if (!page)
panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
tbl->it_map = page_address(page);
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 101/104] powerpc/vio: Fix modalias_show return values
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (99 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 100/104] powerpc/iommu: Use GFP_KERNEL instead of GFP_ATOMIC in iommu_init_table() Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 102/104] ib_srpt: always set response for task management Kamal Mostafa
` (3 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Prarit Bhargava, Benjamin Herrenschmidt, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Prarit Bhargava <prarit@redhat.com>
commit e82b89a6f19bae73fb064d1b3dd91fcefbb478f4 upstream.
modalias_show() should return an empty string on error, not -ENODEV.
This causes the following false and annoying error:
> find /sys/devices -name modalias -print0 | xargs -0 cat >/dev/null
cat: /sys/devices/vio/4000/modalias: No such device
cat: /sys/devices/vio/4001/modalias: No such device
cat: /sys/devices/vio/4002/modalias: No such device
cat: /sys/devices/vio/4004/modalias: No such device
cat: /sys/devices/vio/modalias: No such device
Signed-off-by: Prarit Bhargava <prarit@redhat.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
arch/powerpc/kernel/vio.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c
index 536016d..2d845d8 100644
--- a/arch/powerpc/kernel/vio.c
+++ b/arch/powerpc/kernel/vio.c
@@ -1529,11 +1529,15 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
const char *cp;
dn = dev->of_node;
- if (!dn)
- return -ENODEV;
+ if (!dn) {
+ strcat(buf, "\n");
+ return strlen(buf);
+ }
cp = of_get_property(dn, "compatible", NULL);
- if (!cp)
- return -ENODEV;
+ if (!cp) {
+ strcat(buf, "\n");
+ return strlen(buf);
+ }
return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp);
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 102/104] ib_srpt: always set response for task management
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (100 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 101/104] powerpc/vio: Fix modalias_show return values Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 103/104] xen/hvc: allow xenboot console to be used again Kamal Mostafa
` (2 subsequent siblings)
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Jack Wang, Nicholas Bellinger, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: Jack Wang <jinpu.wang@profitbricks.com>
commit c807f64340932e19f0d2ac9b30c8381e1f60663a upstream.
The SRP specification requires:
"Response data shall be provided in any SRP_RSP response that is sent in
response to an SRP_TSK_MGMT request (see 6.7). The information in the
RSP_CODE field (see table 24) shall indicate the completion status of
the task management function."
So fix this to avoid the SRP initiator interprets task management functions
that succeeded as failed.
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/infiniband/ulp/srpt/ib_srpt.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
index 047ebe4..fb8abcb 100644
--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
+++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
@@ -1588,7 +1588,7 @@ static int srpt_build_tskmgmt_rsp(struct srpt_rdma_ch *ch,
int resp_data_len;
int resp_len;
- resp_data_len = (rsp_code == SRP_TSK_MGMT_SUCCESS) ? 0 : 4;
+ resp_data_len = 4;
resp_len = sizeof(*srp_rsp) + resp_data_len;
srp_rsp = ioctx->ioctx.buf;
@@ -1600,11 +1600,9 @@ static int srpt_build_tskmgmt_rsp(struct srpt_rdma_ch *ch,
+ atomic_xchg(&ch->req_lim_delta, 0));
srp_rsp->tag = tag;
- if (rsp_code != SRP_TSK_MGMT_SUCCESS) {
- srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID;
- srp_rsp->resp_data_len = cpu_to_be32(resp_data_len);
- srp_rsp->data[3] = rsp_code;
- }
+ srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID;
+ srp_rsp->resp_data_len = cpu_to_be32(resp_data_len);
+ srp_rsp->data[3] = rsp_code;
return resp_len;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 103/104] xen/hvc: allow xenboot console to be used again
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (101 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 102/104] ib_srpt: always set response for task management Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 15:42 ` [PATCH 104/104] net: Update the sysctl permissions handler to test effective uid/gid Kamal Mostafa
2013-10-10 17:37 ` [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Bjorn Helgaas
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: David Vrabel, Greg Kroah-Hartman, Jiri Slaby, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: David Vrabel <david.vrabel@citrix.com>
commit a9fbf4d591da6cd1d3eaab826c7c15f77fc8f6a3 upstream.
Commit d0380e6c3c0f6edb986d8798a23acfaf33d5df23 (early_printk:
consolidate random copies of identical code) added in 3.10 introduced
a check for con->index == -1 in early_console_register().
Initialize index to -1 for the xenboot console so earlyprintk=xen
works again.
Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
drivers/tty/hvc/hvc_xen.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
index 19843ec..6fe7c6c 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -636,6 +636,7 @@ struct console xenboot_console = {
.name = "xenboot",
.write = xenboot_write_console,
.flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME,
+ .index = -1,
};
#endif /* CONFIG_EARLY_PRINTK */
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* [PATCH 104/104] net: Update the sysctl permissions handler to test effective uid/gid
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (102 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 103/104] xen/hvc: allow xenboot console to be used again Kamal Mostafa
@ 2013-10-10 15:42 ` Kamal Mostafa
2013-10-10 17:37 ` [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Bjorn Helgaas
104 siblings, 0 replies; 109+ messages in thread
From: Kamal Mostafa @ 2013-10-10 15:42 UTC (permalink / raw)
To: linux-kernel, stable, kernel-team
Cc: Eric W. Biederman, Linus Torvalds, Kamal Mostafa
3.8.13.11 -stable review patch. If anyone has any objections, please let me know.
------------------
From: "Eric W. Biederman" <ebiederm@xmission.com>
commit 2433c8f094a008895e66f25bd1773cdb01c91d01 upstream.
Modify the code to use current_euid(), and in_egroup_p, as in done
in fs/proc/proc_sysctl.c:test_perm()
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Reported-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
net/sysctl_net.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/sysctl_net.c b/net/sysctl_net.c
index 9bc6db0..e7000be 100644
--- a/net/sysctl_net.c
+++ b/net/sysctl_net.c
@@ -47,12 +47,12 @@ static int net_ctl_permissions(struct ctl_table_header *head,
/* Allow network administrator to have same access as root. */
if (ns_capable(net->user_ns, CAP_NET_ADMIN) ||
- uid_eq(root_uid, current_uid())) {
+ uid_eq(root_uid, current_euid())) {
int mode = (table->mode >> 6) & 7;
return (mode << 6) | (mode << 3) | mode;
}
/* Allow netns root group to have the same access as the root group */
- if (gid_eq(root_gid, current_gid())) {
+ if (in_egroup_p(root_gid)) {
int mode = (table->mode >> 3) & 7;
return (mode << 3) | mode;
}
--
1.8.1.2
^ permalink raw reply related [flat|nested] 109+ messages in thread
* Re: [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
` (103 preceding siblings ...)
2013-10-10 15:42 ` [PATCH 104/104] net: Update the sysctl permissions handler to test effective uid/gid Kamal Mostafa
@ 2013-10-10 17:37 ` Bjorn Helgaas
2013-10-18 1:30 ` Ben Hutchings
104 siblings, 1 reply; 109+ messages in thread
From: Bjorn Helgaas @ 2013-10-10 17:37 UTC (permalink / raw)
To: Kamal Mostafa
Cc: linux-kernel@vger.kernel.org, stable@vger.kernel.org, kernel-team,
Greg Kroah-Hartman, Luis Henriques
On Thu, Oct 10, 2013 at 9:40 AM, Kamal Mostafa <kamal@canonical.com> wrote:
> This is the start of the review cycle for the Linux 3.8.13.11 stable kernel.
Would anybody be interested in adding some sort of "stable" tag to the
subject lines of stable backport patches, e.g., instead of:
[PATCH 001/104] htb: fix sign extension bug
something like:
[STABLE 3.8.13.11 001/104] htb: fix sign extension bug
I don't mind having the stable patches on LKML, but it would be nice
if it were easier to distinguish stable backports from new patches. I
know the patches are nicely threaded behind this message, but some
readers don't really pay attention to that.
Bjorn
^ permalink raw reply [flat|nested] 109+ messages in thread
* Re: [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review
2013-10-10 17:37 ` [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Bjorn Helgaas
@ 2013-10-18 1:30 ` Ben Hutchings
2013-10-18 15:41 ` Bjorn Helgaas
0 siblings, 1 reply; 109+ messages in thread
From: Ben Hutchings @ 2013-10-18 1:30 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Kamal Mostafa, linux-kernel@vger.kernel.org,
stable@vger.kernel.org, kernel-team, Greg Kroah-Hartman,
Luis Henriques
[-- Attachment #1: Type: text/plain, Size: 1427 bytes --]
On Thu, 2013-10-10 at 11:37 -0600, Bjorn Helgaas wrote:
> On Thu, Oct 10, 2013 at 9:40 AM, Kamal Mostafa <kamal@canonical.com> wrote:
> > This is the start of the review cycle for the Linux 3.8.13.11 stable kernel.
>
> Would anybody be interested in adding some sort of "stable" tag to the
> subject lines of stable backport patches, e.g., instead of:
>
> [PATCH 001/104] htb: fix sign extension bug
>
> something like:
>
> [STABLE 3.8.13.11 001/104] htb: fix sign extension bug
>
> I don't mind having the stable patches on LKML, but it would be nice
> if it were easier to distinguish stable backports from new patches. I
> know the patches are nicely threaded behind this message, but some
> readers don't really pay attention to that.
I agree that some distinction is needed, but I'm not convinced about
that precise format. I don't think it's worth including version
components after the stable base version e.g. 3.2. And I think that
including the version is a big enough clue that this is for a stable
branch and not mainline.
So I've changed my review script to put a subject prefix of 'PATCH 3.2'
before the patch number (and similarly in the cover letter). But if
there's consensus that a more explicit tag is wanted then I'll follow
that.
Ben.
--
Ben Hutchings
Horngren's Observation:
Among economists, the real world is often a special case.
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 828 bytes --]
^ permalink raw reply [flat|nested] 109+ messages in thread
* Re: [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review
2013-10-18 1:30 ` Ben Hutchings
@ 2013-10-18 15:41 ` Bjorn Helgaas
2013-10-18 15:56 ` Luis Henriques
0 siblings, 1 reply; 109+ messages in thread
From: Bjorn Helgaas @ 2013-10-18 15:41 UTC (permalink / raw)
To: Ben Hutchings
Cc: Kamal Mostafa, linux-kernel@vger.kernel.org,
stable@vger.kernel.org, kernel-team, Greg Kroah-Hartman,
Luis Henriques
On Thu, Oct 17, 2013 at 7:30 PM, Ben Hutchings <ben@decadent.org.uk> wrote:
> On Thu, 2013-10-10 at 11:37 -0600, Bjorn Helgaas wrote:
>> On Thu, Oct 10, 2013 at 9:40 AM, Kamal Mostafa <kamal@canonical.com> wrote:
>> > This is the start of the review cycle for the Linux 3.8.13.11 stable kernel.
>>
>> Would anybody be interested in adding some sort of "stable" tag to the
>> subject lines of stable backport patches, e.g., instead of:
>>
>> [PATCH 001/104] htb: fix sign extension bug
>>
>> something like:
>>
>> [STABLE 3.8.13.11 001/104] htb: fix sign extension bug
>>
>> I don't mind having the stable patches on LKML, but it would be nice
>> if it were easier to distinguish stable backports from new patches. I
>> know the patches are nicely threaded behind this message, but some
>> readers don't really pay attention to that.
>
> I agree that some distinction is needed, but I'm not convinced about
> that precise format. I don't think it's worth including version
> components after the stable base version e.g. 3.2. And I think that
> including the version is a big enough clue that this is for a stable
> branch and not mainline.
>
> So I've changed my review script to put a subject prefix of 'PATCH 3.2'
> before the patch number (and similarly in the cover letter). But if
> there's consensus that a more explicit tag is wanted then I'll follow
> that.
Selfishly, I would just like something gmail can filter on. I've seen
an "X-Extended-Stable: 3.8" header, which would be perfect, except
that I can't figure out how to create a gmail filter for random
headers. So I was hoping for something stable-specific in the subject
line, but that's just to compensate for gmail's limitations.
Bjorn
^ permalink raw reply [flat|nested] 109+ messages in thread
* Re: [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review
2013-10-18 15:41 ` Bjorn Helgaas
@ 2013-10-18 15:56 ` Luis Henriques
0 siblings, 0 replies; 109+ messages in thread
From: Luis Henriques @ 2013-10-18 15:56 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Ben Hutchings, Kamal Mostafa, linux-kernel@vger.kernel.org,
stable@vger.kernel.org, kernel-team, Greg Kroah-Hartman
Bjorn Helgaas <bhelgaas@google.com> writes:
> On Thu, Oct 17, 2013 at 7:30 PM, Ben Hutchings <ben@decadent.org.uk> wrote:
>> On Thu, 2013-10-10 at 11:37 -0600, Bjorn Helgaas wrote:
>>> On Thu, Oct 10, 2013 at 9:40 AM, Kamal Mostafa <kamal@canonical.com> wrote:
>>> > This is the start of the review cycle for the Linux 3.8.13.11 stable kernel.
>>>
>>> Would anybody be interested in adding some sort of "stable" tag to the
>>> subject lines of stable backport patches, e.g., instead of:
>>>
>>> [PATCH 001/104] htb: fix sign extension bug
>>>
>>> something like:
>>>
>>> [STABLE 3.8.13.11 001/104] htb: fix sign extension bug
>>>
>>> I don't mind having the stable patches on LKML, but it would be nice
>>> if it were easier to distinguish stable backports from new patches. I
>>> know the patches are nicely threaded behind this message, but some
>>> readers don't really pay attention to that.
>>
>> I agree that some distinction is needed, but I'm not convinced about
>> that precise format. I don't think it's worth including version
>> components after the stable base version e.g. 3.2. And I think that
>> including the version is a big enough clue that this is for a stable
>> branch and not mainline.
>>
>> So I've changed my review script to put a subject prefix of 'PATCH 3.2'
>> before the patch number (and similarly in the cover letter). But if
>> there's consensus that a more explicit tag is wanted then I'll follow
>> that.
>
> Selfishly, I would just like something gmail can filter on. I've seen
> an "X-Extended-Stable: 3.8" header, which would be perfect, except
> that I can't figure out how to create a gmail filter for random
> headers. So I was hoping for something stable-specific in the subject
> line, but that's just to compensate for gmail's limitations.
>
> Bjorn
I don't really mind changing the scripts we're currently using to make
life easier for filtering, although I would expect that the extra
'X-Extended-Stable' header would do the job (this was the reason we
added it in the first place).
Since the only header that can be parsed is the 'Subject:', it's just
a matter of agreeing on the format (personally, I don't have any
strong opinion on this).
Cheers,
--
Luis
^ permalink raw reply [flat|nested] 109+ messages in thread
end of thread, other threads:[~2013-10-18 15:56 UTC | newest]
Thread overview: 109+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-10 15:40 [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Kamal Mostafa
2013-10-10 15:40 ` [PATCH 001/104] htb: fix sign extension bug Kamal Mostafa
2013-10-10 15:40 ` [PATCH 002/104] net: avoid to hang up on sending due to sysctl configuration overflow Kamal Mostafa
2013-10-10 15:40 ` [PATCH 003/104] net: check net.core.somaxconn sysctl values Kamal Mostafa
2013-10-10 15:40 ` [PATCH 004/104] macvlan: validate flags Kamal Mostafa
2013-10-10 15:40 ` [PATCH 005/104] neighbour: populate neigh_parms on alloc before calling ndo_neigh_setup Kamal Mostafa
2013-10-10 15:40 ` [PATCH 006/104] bonding: modify only neigh_parms owned by us Kamal Mostafa
2013-10-10 15:40 ` [PATCH 007/104] fib_trie: remove potential out of bound access Kamal Mostafa
2013-10-10 15:40 ` [PATCH 008/104] bridge: don't try to update timers in case of broken MLD queries Kamal Mostafa
2013-10-10 15:40 ` [PATCH 009/104] tcp: cubic: fix overflow error in bictcp_update() Kamal Mostafa
2013-10-10 15:40 ` [PATCH 010/104] tcp: cubic: fix bug in bictcp_acked() Kamal Mostafa
2013-10-10 15:40 ` [PATCH 011/104] ipv6: don't stop backtracking in fib6_lookup_1 if subtree does not match Kamal Mostafa
2013-10-10 15:41 ` [PATCH 012/104] 8139cp: Fix skb leak in rx_status_loop failure path Kamal Mostafa
2013-10-10 15:41 ` [PATCH 013/104] tun: signedness bug in tun_get_user() Kamal Mostafa
2013-10-10 15:41 ` [PATCH 014/104] ipv6: remove max_addresses check from ipv6_create_tempaddr Kamal Mostafa
2013-10-10 15:41 ` [PATCH 015/104] ipv6: Store Router Alert option in IP6CB directly Kamal Mostafa
2013-10-10 15:41 ` [PATCH 016/104] ipv6: drop packets with multiple fragmentation headers Kamal Mostafa
2013-10-10 15:41 ` [PATCH 017/104] tcp: set timestamps for restored skb-s Kamal Mostafa
2013-10-10 15:41 ` [PATCH 018/104] net: usb: Add HP hs2434 device to ZLP exception table Kamal Mostafa
2013-10-10 15:41 ` [PATCH 019/104] tcp: initialize rcv_tstamp for restored sockets Kamal Mostafa
2013-10-10 15:41 ` [PATCH 020/104] ipv4: sendto/hdrincl: don't use destination address found in header Kamal Mostafa
2013-10-10 15:41 ` [PATCH 021/104] tcp: tcp_make_synack() should use sock_wmalloc Kamal Mostafa
2013-10-10 15:41 ` [PATCH 022/104] tipc: set sk_err correctly when connection fails Kamal Mostafa
2013-10-10 15:41 ` [PATCH 023/104] net: bridge: convert MLDv2 Query MRC into msecs_to_jiffies for max_delay Kamal Mostafa
2013-10-10 15:41 ` [PATCH 024/104] ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO Kamal Mostafa
2013-10-10 15:41 ` [PATCH 025/104] tg3: Don't turn off led on 5719 serdes port 0 Kamal Mostafa
2013-10-10 15:41 ` [PATCH 026/104] vhost_net: poll vhost queue after marking DMA is done Kamal Mostafa
2013-10-10 15:41 ` [PATCH 027/104] net: ipv6: tcp: fix potential use after free in tcp_v6_do_rcv Kamal Mostafa
2013-10-10 15:41 ` [PATCH 028/104] drm/radeon/si: Add support for CP DMA to CS checker for compute v2 Kamal Mostafa
2013-10-10 15:41 ` [PATCH 029/104] sfc: Fix efx_rx_buf_offset() for recycled pages Kamal Mostafa
2013-10-10 15:41 ` [PATCH 030/104] cfq: explicitly use 64bit divide operation for 64bit arguments Kamal Mostafa
2013-10-10 15:41 ` [PATCH 031/104] cpqarray: fix info leak in ida_locked_ioctl() Kamal Mostafa
2013-10-10 15:41 ` [PATCH 032/104] cciss: fix info leak in cciss_ioctl32_passthru() Kamal Mostafa
2013-10-10 15:41 ` [PATCH 033/104] drm/radeon/atom: workaround vbios bug in transmitter table on rs880 (v2) Kamal Mostafa
2013-10-10 15:41 ` [PATCH 034/104] drm/ast: fix the ast open key function Kamal Mostafa
2013-10-10 15:41 ` [PATCH 035/104] sched/fair: Fix small race where child->se.parent,cfs_rq might point to invalid ones Kamal Mostafa
2013-10-10 15:41 ` [PATCH 036/104] tg3: Expand led off fix to include 5720 Kamal Mostafa
2013-10-10 15:41 ` [PATCH 037/104] HID: provide a helper for validating hid reports Kamal Mostafa
2013-10-10 15:41 ` [PATCH 038/104] HID: zeroplus: validate output report details Kamal Mostafa
2013-10-10 15:41 ` [PATCH 039/104] HID: LG: validate HID " Kamal Mostafa
2013-10-10 15:41 ` [PATCH 040/104] HID: lenovo-tpkbd: validate " Kamal Mostafa
2013-10-10 15:41 ` [PATCH 041/104] HID: validate feature and input " Kamal Mostafa
2013-10-10 15:41 ` [PATCH 042/104] HID: logitech-dj: validate output " Kamal Mostafa
2013-10-10 15:41 ` [PATCH 043/104] HID: multitouch: validate indexes details Kamal Mostafa
2013-10-10 15:41 ` [PATCH 044/104] HID: lenovo-tpkbd: fix leak if tpkbd_probe_tp fails Kamal Mostafa
2013-10-10 15:41 ` [PATCH 045/104] drm/radeon: fix panel scaling with eDP and LVDS bridges Kamal Mostafa
2013-10-10 15:41 ` [PATCH 046/104] cifs: fix filp leak in cifs_atomic_open() Kamal Mostafa
2013-10-10 15:41 ` [PATCH 047/104] net: usb: cdc_ether: Use wwan interface for Telit modules Kamal Mostafa
2013-10-10 15:41 ` [PATCH 048/104] usb: gadget: fix a bug and a WARN_ON in dummy-hcd Kamal Mostafa
2013-10-10 15:41 ` [PATCH 049/104] drm/i915: do not update cursor in crtc mode set Kamal Mostafa
2013-10-10 15:41 ` [PATCH 050/104] drm/i915: Don't enable the cursor on a disable pipe Kamal Mostafa
2013-10-10 15:41 ` [PATCH 051/104] drm/ttm: fix the tt_populated check in ttm_tt_destroy() Kamal Mostafa
2013-10-10 15:41 ` [PATCH 052/104] PCI / ACPI / PM: Clear pme_poll for devices in D3cold on wakeup Kamal Mostafa
2013-10-10 15:41 ` [PATCH 053/104] Smack: Fix the bug smackcipso can't set CIPSO correctly Kamal Mostafa
2013-10-10 15:41 ` [PATCH 054/104] serial: pch_uart: fix tty-kref leak in dma-rx path Kamal Mostafa
2013-10-10 15:41 ` [PATCH 055/104] x86, efi: Don't map Boot Services on i386 Kamal Mostafa
2013-10-10 15:41 ` [PATCH 056/104] ALSA: compress: Fix compress device unregister Kamal Mostafa
2013-10-10 15:41 ` [PATCH 057/104] dm snapshot: workaround for a false positive lockdep warning Kamal Mostafa
2013-10-10 15:41 ` [PATCH 058/104] dm-snapshot: fix performance degradation due to small hash size Kamal Mostafa
2013-10-10 15:41 ` [PATCH 059/104] drm/radeon: Make r100_cp_ring_info() and radeon_ring_gfx() safe (v2) Kamal Mostafa
2013-10-10 15:41 ` [PATCH 060/104] ARM: 7837/3: fix Thumb-2 bug in AES assembler code Kamal Mostafa
2013-10-10 15:41 ` [PATCH 061/104] x86/reboot: Add quirk to make Dell C6100 use reboot=pci automatically Kamal Mostafa
2013-10-10 15:41 ` [PATCH 062/104] drm/radeon: disable tests/benchmarks if accel is disabled Kamal Mostafa
2013-10-10 15:41 ` [PATCH 063/104] xhci: Fix oops happening after address device timeout Kamal Mostafa
2013-10-10 15:41 ` [PATCH 064/104] xhci: Ensure a command structure points to the correct trb on the command ring Kamal Mostafa
2013-10-10 15:41 ` [PATCH 065/104] drm/i915/dp: increase i2c-over-aux retry interval on AUX DEFER Kamal Mostafa
2013-10-10 15:41 ` [PATCH 066/104] staging: vt6656: [BUG] main_usb.c oops on device_close move flag earlier Kamal Mostafa
2013-10-10 15:41 ` [PATCH 067/104] staging: vt6656: [BUG] iwctl_siwencodeext return if device not open Kamal Mostafa
2013-10-10 15:41 ` [PATCH 068/104] USB: UHCI: accept very late isochronous URBs Kamal Mostafa
2013-10-10 15:41 ` [PATCH 069/104] USB: OHCI: " Kamal Mostafa
2013-10-10 15:41 ` [PATCH 070/104] USB: fix PM config symbol in uhci-hcd, ehci-hcd, and xhci-hcd Kamal Mostafa
2013-10-10 15:41 ` [PATCH 071/104] usb/core/devio.c: Don't reject control message to endpoint with wrong direction bit Kamal Mostafa
2013-10-10 15:42 ` [PATCH 072/104] hwmon: (applesmc) Check key count before proceeding Kamal Mostafa
2013-10-10 15:42 ` [PATCH 073/104] fsl/usb: Resolve PHY_CLK_VLD instability issue for ULPI phy Kamal Mostafa
2013-10-10 15:42 ` [PATCH 074/104] driver core : Fix use after free of dev->parent in device_shutdown Kamal Mostafa
2013-10-10 15:42 ` [PATCH 075/104] USB: Fix breakage in ffs_fs_mount() Kamal Mostafa
2013-10-10 15:42 ` [PATCH 076/104] usb: dwc3: pci: add support for BayTrail Kamal Mostafa
2013-10-10 15:42 ` [PATCH 077/104] usb: dwc3: add support for Merrifield Kamal Mostafa
2013-10-10 15:42 ` [PATCH 078/104] ASoC: max98095: a couple array underflows Kamal Mostafa
2013-10-10 15:42 ` [PATCH 079/104] ASoC: ab8500-codec: info leak in anc_status_control_put() Kamal Mostafa
2013-10-10 15:42 ` [PATCH 080/104] ASoC: 88pm860x: array overflow in snd_soc_put_volsw_2r_st() Kamal Mostafa
2013-10-10 15:42 ` [PATCH 081/104] Bluetooth: Add a new PID/VID 0cf3/e005 for AR3012 Kamal Mostafa
2013-10-10 15:42 ` [PATCH 082/104] Bluetooth: Fix security level for peripheral role Kamal Mostafa
2013-10-10 15:42 ` [PATCH 083/104] Bluetooth: Fix encryption key size " Kamal Mostafa
2013-10-10 15:42 ` [PATCH 084/104] Bluetooth: Add support for BCM20702A0 [0b05, 17cb] Kamal Mostafa
2013-10-10 15:42 ` [PATCH 085/104] Bluetooth: Introduce a new HCI_RFKILLED flag Kamal Mostafa
2013-10-10 15:42 ` [PATCH 086/104] rtlwifi: Align private space in rtl_priv struct Kamal Mostafa
2013-10-10 15:42 ` [PATCH 087/104] p54usb: add USB ID for Corega WLUSB2GTST USB adapter Kamal Mostafa
2013-10-10 15:42 ` [PATCH 088/104] mwifiex: fix hang issue for USB chipsets Kamal Mostafa
2013-10-10 15:42 ` [PATCH 089/104] mwifiex: fix NULL pointer dereference in usb suspend handler Kamal Mostafa
2013-10-10 15:42 ` [PATCH 090/104] fs/binfmt_elf.c: prevent a coredump with a large vm_map_count from Oopsing Kamal Mostafa
2013-10-10 15:42 ` [PATCH 091/104] nilfs2: fix issue with race condition of competition between segments for dirty blocks Kamal Mostafa
2013-10-10 15:42 ` [PATCH 092/104] mm: avoid reinserting isolated balloon pages into LRU lists Kamal Mostafa
2013-10-10 15:42 ` [PATCH 093/104] USB: serial: option: Ignore card reader interface on Huawei E1750 Kamal Mostafa
2013-10-10 15:42 ` [PATCH 094/104] gpio/omap: maintain GPIO and IRQ usage separately Kamal Mostafa
2013-10-10 15:42 ` [PATCH 095/104] gpio/omap: auto-setup a GPIO when used as an IRQ Kamal Mostafa
2013-10-10 15:42 ` [PATCH 096/104] ib_srpt: Destroy cm_id before destroying QP Kamal Mostafa
2013-10-10 15:42 ` [PATCH 097/104] powerpc: Fix parameter clobber in csum_partial_copy_generic() Kamal Mostafa
2013-10-10 15:42 ` [PATCH 098/104] powerpc: Restore registers on error exit from csum_partial_copy_generic() Kamal Mostafa
2013-10-10 15:42 ` [PATCH 099/104] powerpc/sysfs: Disable writing to PURR in guest mode Kamal Mostafa
2013-10-10 15:42 ` [PATCH 100/104] powerpc/iommu: Use GFP_KERNEL instead of GFP_ATOMIC in iommu_init_table() Kamal Mostafa
2013-10-10 15:42 ` [PATCH 101/104] powerpc/vio: Fix modalias_show return values Kamal Mostafa
2013-10-10 15:42 ` [PATCH 102/104] ib_srpt: always set response for task management Kamal Mostafa
2013-10-10 15:42 ` [PATCH 103/104] xen/hvc: allow xenboot console to be used again Kamal Mostafa
2013-10-10 15:42 ` [PATCH 104/104] net: Update the sysctl permissions handler to test effective uid/gid Kamal Mostafa
2013-10-10 17:37 ` [ 3.8.y.z extended stable ] Linux 3.8.13.11 stable review Bjorn Helgaas
2013-10-18 1:30 ` Ben Hutchings
2013-10-18 15:41 ` Bjorn Helgaas
2013-10-18 15:56 ` Luis Henriques
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).