3.0.79-stable review
Subsystems (35)
Greg Kroah-Hartman
maintainercover 3.0.79-stable review
This is the start of the stable review cycle for the 3.0.79 release. There are 33 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun May 19 21:47:48 UTC 2013. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v3.0/stable-review/patch-3.0.79-rc1.gz
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 3.0.79-rc1
Oleg Nesterov <[email protected]>
usermodehelper: check subprocess_info->path != NULL
Kees Cook <[email protected]>
drm/radeon: check incoming cliprects pointer
Benjamin LaHaise <[email protected]>
ipmi: ipmi_devintf: compat_ioctl method fails to take ipmi_mutex
Chen Gang <[email protected]>
drivers/char/ipmi: memcpy, need additional 2 bytes to avoid memory overflow
Lan Tianyu <[email protected]>
ACPI / EC: Restart transaction even when the IBF flag set
Wei Yongjun <[email protected]>
drivers/rtc/rtc-pcf2123.c: fix error return code in pcf2123_probe()
Philipp Reisner <[email protected]>
drbd: fix for deadlock when using automatic split-brain-recovery
Francois Romieu <[email protected]>
r8169: fix vlan tag read ordering.
Tomoya MORINAGA <[email protected]>
pch_dma: Use GFP_ATOMIC because called from interrupt context
Cong Wang <[email protected]>
xfrm6: release dev before returning error
Eric Dumazet <[email protected]>
ipv6: do not clear pinet6 field
Jiri Pirko <[email protected]>
macvlan: fix passthru mode race between dev removal and rx path
Josh Boyer <[email protected]>
if_cablemodem.h: Add parenthesis around ioctl macros
Sergei Shtylyov <[email protected]>
3c59x: fix PCI resource management
Sergei Shtylyov <[email protected]>
3c59x: fix freeing nonexistent resource on driver unload
stephen hemminger <[email protected]>
bridge: fix race with topology change timer
Jamal Hadi Salim <[email protected]>
net_sched: act_ipt forward compat with xtables
Matthew Whitehead <[email protected]>
3c509.c: call SET_NETDEV_DEV for all device types (ISA/ISAPnP/EISA)
Eric Dumazet <[email protected]>
tcp: force a dst refcount when prequeue packet
Daniel Vetter <[email protected]>
drm/mm: fix dump table BUG
Daniel Drake <[email protected]>
mwifiex: fix setting of multicast filter
Bing Zhao <[email protected]>
mwifiex: clear is_suspended flag when interrupt is received early
Felix Fietkau <[email protected]>
ath9k: fix key allocation error handling for powersave keys
Lachlan McIlroy <[email protected]>
ext4: limit group search loop for non-extent files
Thomas Gleixner <[email protected]>
tick: Cleanup NOHZ per cpu data on cpu down
Tirupathi Reddy <[email protected]>
timer: Don't reinitialize the cpu base lock during CPU_UP_PREPARE
James Bottomley <[email protected]>
SCSI: sd: fix array cache flushing bug causing performance problems
Konrad Rzeszutek Wilk <[email protected]>
xen/vcpu/pvhvm: Fix vcpu hotplugging hanging.
Wei Yongjun <[email protected]>
dm snapshot: fix error return code in snapshot_ctr
Bob Moore <[email protected]>
ACPICA: Fix possible buffer overflow during a field unit read operation
Dan Carpenter <[email protected]>
ASoC: wm8994: missing break in wm8994_aif3_hw_params()
Aaro Koskinen <[email protected]>
ARM: OMAP: RX-51: change probe order of touchscreen and panel SPI devices
Gleb Natapov <[email protected]>
KVM: VMX: fix halt emulation while emulating invalid guest sate
-------------
Diffstat:
Makefile | 4 ++-- arch/arm/mach-omap2/board-rx51-peripherals.c | 4 ++-- arch/x86/kvm/vmx.c | 6 +++++ arch/x86/xen/enlighten.c | 15 ++++++++++++ drivers/acpi/acpica/exfldio.c | 14 +++++++++++- drivers/acpi/ec.c | 4 +--- drivers/block/drbd/drbd_receiver.c | 1 - drivers/char/ipmi/ipmi_bt_sm.c | 4 ++-- drivers/char/ipmi/ipmi_devintf.c | 14 +++++++++++- drivers/dma/pch_dma.c | 2 +- drivers/gpu/drm/drm_mm.c | 34 +++++++++++++++------------- drivers/gpu/drm/radeon/r300_cmdbuf.c | 2 +- drivers/md/dm-snap.c | 1 + drivers/net/3c509.c | 2 ++ drivers/net/3c59x.c | 27 +++++++++++----------- drivers/net/macvlan.c | 7 +++--- drivers/net/r8169.c | 13 +++++------ drivers/net/wireless/ath/ath9k/main.c | 6 ++++- drivers/net/wireless/mwifiex/cmdevt.c | 1 + drivers/net/wireless/mwifiex/sta_ioctl.c | 21 +++++------------ drivers/rtc/rtc-pcf2123.c | 1 + drivers/scsi/sd.c | 20 ++++++++++++++++ drivers/scsi/sd.h | 1 + fs/ext4/mballoc.c | 6 ++++- include/linux/if_cablemodem.h | 12 +++++----- include/linux/rculist.h | 17 ++++++++++++++ include/net/sock.h | 12 ++++++++++ include/net/tcp.h | 1 + kernel/kmod.c | 5 ++++ kernel/time/tick-sched.c | 2 +- kernel/timer.c | 2 +- net/bridge/br_stp_timer.c | 2 +- net/core/sock.c | 12 ---------- net/ipv6/tcp_ipv6.c | 12 ++++++++++ net/ipv6/udp.c | 13 ++++++++++- net/ipv6/udp_impl.h | 2 ++ net/ipv6/udplite.c | 2 +- net/ipv6/xfrm6_policy.c | 4 +++- net/sched/act_ipt.c | 33 ++++++++++++++++++++++++--- sound/soc/codecs/wm8994.c | 1 + 40 files changed, 245 insertions(+), 97 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/33 KVM: VMX: fix halt emulation while emulating invalid guest sate
3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gleb Natapov <[email protected]>
commit 8d76c49e9ffeee839bc0b7a3278a23f99101263e upstream.
The invalid guest state emulation loop does not check halt_request which causes 100% cpu loop while guest is in halt and in invalid state, but more serious issue is that this leaves halt_request set, so random instruction emulated by vm86 #GP exit can be interpreted as halt which causes guest hang. Fix both problems by handling halt_request in emulation loop.
--- arch/x86/kvm/vmx.c | 6 ++++++ 1 file changed, 6 insertions(+)
arch/x86/kvm/vmx.c +6 -0
@@ -3836,6 +3836,12 @@ static int handle_invalid_guest_state(stif (err !=EMULATE_DONE )return 0 ; +if (vcpu->arch.halt_request) { + vcpu->arch.halt_request =0 ; + ret =kvm_emulate_halt (vcpu); + goto out; + } +if (signal_pending (current)) goto out;if (need_resched ())
Greg Kroah-Hartman
maintainerPATCH 2/33 ARM: OMAP: RX-51: change probe order of touchscreen and panel SPI devices
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Aaro Koskinen <[email protected]>
commit e65f131a14726e5f1b880a528271a52428e5b3a5 upstream.
Commit 9fdca9df (spi: omap2-mcspi: convert to module_platform_driver) broke the SPI display/panel driver probe on RX-51/N900. The exact cause is not fully understood, but it seems to be related to the probe order. SPI communication to the panel driver (spi1.2) fails unless the touchscreen (spi1.0) has been probed/initialized before. When the omap2-mcspi driver was converted to a platform driver, it resulted in that the devices are probed immediately after the board registers them in the order they are listed in the board file.
Fix the issue by moving the touchscreen before the panel in the SPI device list.
The patch fixes the following failure:
[ 1.260955] acx565akm spi1.2: invalid display ID [ 1.265899] panel-acx565akm display0: acx_panel_probe panel detect error [ 1.273071] omapdss CORE error: driver probe failed: -19
--- arch/arm/mach-omap2/board-rx51-peripherals.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/board-rx51-peripherals.c +2 -2
@@ -56,11 +56,11 @@#define RX51_USB_TRANSCEIVER_RST_GPIO 67 -/* list all spi devices here */ +/* List all SPI devices here. Note that the list/probe order seems to matter! */ enum {RX51_SPI_WL1251 , -RX51_SPI_MIPID ,/* LCD panel */ RX51_SPI_TSC2005 ,/* Touch Controller */ +RX51_SPI_MIPID ,/* LCD panel */ };static struct wl12xx_platform_data wl1251_pdata;
Greg Kroah-Hartman
maintainerPATCH 3/33 ASoC: wm8994: missing break in wm8994_aif3_hw_params()
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
commit 4495e46fe18f198366961bb2b324a694ef8a9b44 upstream.
The missing break here means that we always return early and the function is a no-op.
--- sound/soc/codecs/wm8994.c | 1 + 1 file changed, 1 insertion(+)
sound/soc/codecs/wm8994.c +1 -0
@@ -2249,6 +2249,7 @@ static int wm8994_aif3_hw_params(structdefault :return 0 ; } +break ;default :return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 4/33 ACPICA: Fix possible buffer overflow during a field unit read operation
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bob Moore <[email protected]>
commit 61388f9e5d93053cf399a356414f31f9b4814c6d upstream.
Can only happen under these conditions: 1) The DSDT version is 1, meaning integers are 32-bits. 2) The field is between 33 and 64 bits long.
It applies cleanly back to ACPICA 20100806+ (Linux v2.6.37+).
--- drivers/acpi/acpica/exfldio.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
drivers/acpi/acpica/exfldio.c +13 -1
@@ -702,7 +702,19 @@ acpi_ex_extract_from_field(union acpi_opif ((obj_desc->common_field.start_field_bit_offset ==0 ) && (obj_desc->common_field.bit_length == access_bit_width)) { - status =acpi_ex_field_datum_io (obj_desc,0 , buffer,ACPI_READ ); +if (buffer_length >=sizeof (u64)) { + status = +acpi_ex_field_datum_io (obj_desc,0 , buffer, +ACPI_READ ); + }else { +/* Use raw_datum (u64) to handle buffers < 64 bits */ + + status = +acpi_ex_field_datum_io (obj_desc,0 , &raw_datum, +ACPI_READ ); +ACPI_MEMCPY (buffer, &raw_datum, buffer_length); + } +return_ACPI_STATUS (status); }
Greg Kroah-Hartman
maintainerPATCH 5/33 dm snapshot: fix error return code in snapshot_ctr
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wei Yongjun <[email protected]>
commit 09e8b813897a0f85bb401435d009228644c81214 upstream.
Return -ENOMEM instead of success if unable to allocate pending exception mempool in snapshot_ctr.
--- drivers/md/dm-snap.c | 1 + 1 file changed, 1 insertion(+)
drivers/md/dm-snap.c +1 -0
@@ -1121,6 +1121,7 @@ static int snapshot_ctr(struct dm_target s->pending_pool =mempool_create_slab_pool (MIN_IOS , pending_cache);if (!s->pending_pool) { ti->error ="Could not allocate mempool for pending exceptions" ; + r = -ENOMEM ; goto bad_pending_pool; }
Greg Kroah-Hartman
maintainerPATCH 6/33 xen/vcpu/pvhvm: Fix vcpu hotplugging hanging.
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konrad Rzeszutek Wilk <[email protected]>
commit 7f1fc268c47491fd5e63548f6415fc8604e13003 upstream.
If a user did:
echo 0 > /sys/devices/system/cpu/cpu1/online echo 1 > /sys/devices/system/cpu/cpu1/online
we would (this a build with DEBUG enabled) get to:
smpboot: ++++++++++++++++++++=_---CPU UP 1 .. snip..
smpboot: Stack at about ffff880074c0ff44
smpboot: CPU1: has booted.
and hang. The RCU mechanism would kick in an try to IPI the CPU1 but the IPIs (and all other interrupts) would never arrive at the CPU1. At first glance at least. A bit digging in the hypervisor trace shows that (using xenanalyze):
[vla] d4v1 vec 243 injecting
0.043163027 --|x d4v1 intr_window vec 243 src 5(vector) intr f3 ] 0.043163639 --|x d4v1 vmentry cycles 1468 ] 0.043164913 --|x d4v1 vmexit exit_reason PENDING_INTERRUPT eip ffffffff81673254 0.043164913 --|x d4v1 inj_virq vec 243 real [vla] d4v1 vec 243 injecting 0.043164913 --|x d4v1 intr_window vec 243 src 5(vector) intr f3 ] 0.043165526 --|x d4v1 vmentry cycles 1472 ] 0.043166800 --|x d4v1 vmexit exit_reason PENDING_INTERRUPT eip ffffffff81673254 0.043166800 --|x d4v1 inj_virq vec 243 real
[vla] d4v1 vec 243 injecting
there is a pending event (subsequent debugging shows it is the IPI from the VCPU0 when smpboot.c on VCPU1 has done "set_cpu_online(smp_processor_id(), true)") and the guest VCPU1 is interrupted with the callback IPI (0xf3 aka 243) which ends up calling __xen_evtchn_do_upcall.
The __xen_evtchn_do_upcall seems to do *something* but not acknowledge the pending events. And the moment the guest does a 'cli' (that is the ffffffff81673254 in the log above) the hypervisor is invoked again to inject the IPI (0xf3) to tell the guest it has pending interrupts. This repeats itself forever.
The culprit was the per_cpu(xen_vcpu, cpu) pointer. At the bootup we set each per_cpu(xen_vcpu, cpu) to point to the shared_info->vcpu_info[vcpu] but later on use the VCPUOP_register_vcpu_info to register per-CPU structures (xen_vcpu_setup).
This is used to allow events for more than 32 VCPUs and for performance optimizations reasons.
When the user performs the VCPU hotplug we end up calling the the xen_vcpu_setup once more. We make the hypercall which returns -EINVAL as it does not allow multiple registration calls (and already has re-assigned where the events are being set). We pick the fallback case and set per_cpu(xen_vcpu, cpu) to point to the shared_info->vcpu_info[vcpu] (which is a good fallback during bootup). However the hypervisor is still setting events in the register per-cpu structure (per_cpu(xen_vcpu_info, cpu)).
As such when the events are set by the hypervisor (such as timer one), and when we iterate in __xen_evtchn_do_upcall we end up reading stale events from the shared_info->vcpu_info[vcpu] instead of the per_cpu(xen_vcpu_info, cpu) structures. Hence we never acknowledge the events that the hypervisor has set and the hypervisor keeps on reminding us to ack the events which we never do.
The fix is simple. Don't on the second time when xen_vcpu_setup is called over-write the per_cpu(xen_vcpu, cpu) if it points to per_cpu(xen_vcpu_info).
--- arch/x86/xen/enlighten.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
arch/x86/xen/enlighten.c +15 -0
@@ -129,6 +129,21 @@ static void xen_vcpu_setup(int cpu)BUG_ON (HYPERVISOR_shared_info == &xen_dummy_shared_info); +/* +* This path is called twice on PVHVM - first during bootup via +* smp_init -> xen_hvm_cpu_notify, and then if the VCPU is being +* hotplugged: cpu_up -> xen_hvm_cpu_notify. +* As we can only do the VCPUOP_register_vcpu_info once lets +* not over-write its result. +* +* For PV it is called during restore (xen_vcpu_restore) and bootup +* (xen_setup_vcpu_info_placement). The hotplug mechanism does not +* use this function. +*/ +if (xen_hvm_domain ()) { +if (per_cpu (xen_vcpu, cpu) == &per_cpu (xen_vcpu_info, cpu)) +return ; + }if (cpu <MAX_VIRT_CPUS )per_cpu (xen_vcpu,cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu];
Greg Kroah-Hartman
maintainerPATCH 7/33 SCSI: sd: fix array cache flushing bug causing performance problems
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: James Bottomley <[email protected]>
commit 39c60a0948cc06139e2fbfe084f83cb7e7deae3b upstream.
Some arrays synchronize their full non volatile cache when the sd driver sends a SYNCHRONIZE CACHE command. Unfortunately, they can have Terrabytes of this and we send a SYNCHRONIZE CACHE for every barrier if an array reports it has a writeback cache. This leads to massive slowdowns on journalled filesystems.
The fix is to allow userspace to turn off the writeback cache setting as a temporary measure (i.e. without doing the MODE SELECT to write it back to the device), so even though the device reported it has a writeback cache, the user, knowing that the cache is non volatile and all they care about is filesystem correctness, can turn that bit off in the kernel and avoid the performance ruinous (and safety irrelevant) SYNCHRONIZE CACHE commands.
The way you do this is add a 'temporary' prefix when performing the usual cache setting operations, so
echo temporary write through > /sys/class/scsi_disk/<disk>/cache_type
--- drivers/scsi/sd.c | 20 ++++++++++++++++++++ drivers/scsi/sd.h | 1 + 2 files changed, 21 insertions(+)
drivers/scsi/sd.c +20 -0
@@ -138,6 +138,7 @@ sd_store_cache_type(struct device *dev,char *buffer_data;struct scsi_mode_data data;struct scsi_sense_hdr sshdr; +const char *temp ="temporary " ;int len;if (sdp->type !=TYPE_DISK )
@@ -146,6 +147,13 @@ sd_store_cache_type(struct device *dev,* it's not worth the risk */ return -EINVAL ; +if (strncmp (buf, temp,sizeof (temp) -1 ) ==0 ) { + buf +=sizeof (temp) -1 ; + sdkp->cache_override =1 ; + }else { + sdkp->cache_override =0 ; + } +for (i =0 ; i <ARRAY_SIZE (sd_cache_types); i++) { len =strlen (sd_cache_types[i]); if (strncmp(sd_cache_types[i], buf, len) == 0 &&
@@ -158,6 +166,13 @@ sd_store_cache_type(struct device *dev,return -EINVAL ; rcd = ct &0x01 ?1 :0 ; wce = ct &0x02 ?1 :0 ; + +if (sdkp->cache_override) { + sdkp->WCE = wce; + sdkp->RCD = rcd; +return count; + } +if (scsi_mode_sense (sdp,0x08 ,8 , buffer,sizeof (buffer),SD_TIMEOUT ,SD_MAX_RETRIES , &data,NULL ))return -EINVAL ;
@@ -2036,6 +2051,10 @@ sd_read_cache_type(struct scsi_disk *sdkint old_rcd = sdkp->RCD;int old_dpofua = sdkp->DPOFUA; + +if (sdkp->cache_override) +return ; + first_len =4 ;if (sdp->skip_ms_page_8) {if (sdp->type ==TYPE_RBC )
@@ -2517,6 +2536,7 @@ static void sd_probe_async(void *data, a sdkp->capacity =0 ; sdkp->media_present =1 ; sdkp->write_prot =0 ; + sdkp->cache_override =0 ; sdkp->WCE =0 ; sdkp->RCD =0 ; sdkp->ATO =0 ;
drivers/scsi/sd.h +1 -0
@@ -70,6 +70,7 @@ struct scsi_disk {u8 protection_type;/* Data Integrity Field */ u8 provisioning_mode; unsigned ATO : 1; /* state of disk ATO bit */ + unsigned cache_override : 1; /* temp override of WCE,RCD */ unsigned WCE : 1; /* state of disk WCE bit */ unsigned RCD : 1; /* state of disk RCD bit, unused */ unsigned DPOFUA : 1; /* state of disk DPOFUA bit */
Greg Kroah-Hartman
maintainerPATCH 8/33 timer: Dont reinitialize the cpu base lock during CPU_UP_PREPARE
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tirupathi Reddy <[email protected]>
commit 42a5cf46cd56f46267d2a9fcf2655f4078cd3042 upstream.
An inactive timer's base can refer to a offline cpu's base.
In the current code, cpu_base's lock is blindly reinitialized each time a CPU is brought up. If a CPU is brought online during the period that another thread is trying to modify an inactive timer on that CPU with holding its timer base lock, then the lock will be reinitialized under its feet. This leads to following SPIN_BUG().
<0> BUG: spinlock already unlocked on CPU#3, kworker/u:3/1466
<0> lock: 0xe3ebe000, .magic: dead4ead, .owner: kworker/u:3/1466, .owner_cpu: 1
<4> [<c0013dc4>] (unwind_backtrace+0x0/0x11c) from [<c026e794>] (do_raw_spin_unlock+0x40/0xcc) <4> [<c026e794>] (do_raw_spin_unlock+0x40/0xcc) from [<c076c160>] (_raw_spin_unlock+0x8/0x30) <4> [<c076c160>] (_raw_spin_unlock+0x8/0x30) from [<c009b858>] (mod_timer+0x294/0x310) <4> [<c009b858>] (mod_timer+0x294/0x310) from [<c00a5e04>] (queue_delayed_work_on+0x104/0x120) <4> [<c00a5e04>] (queue_delayed_work_on+0x104/0x120) from [<c04eae00>] (sdhci_msm_bus_voting+0x88/0x9c) <4> [<c04eae00>] (sdhci_msm_bus_voting+0x88/0x9c) from [<c04d8780>] (sdhci_disable+0x40/0x48) <4> [<c04d8780>] (sdhci_disable+0x40/0x48) from [<c04bf300>] (mmc_release_host+0x4c/0xb0) <4> [<c04bf300>] (mmc_release_host+0x4c/0xb0) from [<c04c7aac>] (mmc_sd_detect+0x90/0xfc) <4> [<c04c7aac>] (mmc_sd_detect+0x90/0xfc) from [<c04c2504>] (mmc_rescan+0x7c/0x2c4) <4> [<c04c2504>] (mmc_rescan+0x7c/0x2c4) from [<c00a6a7c>] (process_one_work+0x27c/0x484) <4> [<c00a6a7c>] (process_one_work+0x27c/0x484) from [<c00a6e94>] (worker_thread+0x210/0x3b0) <4> [<c00a6e94>] (worker_thread+0x210/0x3b0) from [<c00aad9c>] (kthread+0x80/0x8c)
<4> [<c00aad9c>] (kthread+0x80/0x8c) from [<c000ea80>] (kernel_thread_exit+0x0/0x8)
As an example, this particular crash occurred when CPU #3 is executing mod_timer() on an inactive timer whose base is refered to offlined CPU #2. The code locked the timer_base corresponding to CPU #2. Before it could proceed, CPU #2 came online and reinitialized the spinlock corresponding to its base. Thus now CPU #3 held a lock which was reinitialized. When CPU #3 finally ended up unlocking the old cpu_base corresponding to CPU #2, we hit the above SPIN_BUG().
CPU #0 CPU #3 CPU #2
------ ------- -------
..... ...... <Offline>
mod_timer() lock_timer_base spin_lock_irqsave(&base->lock)
cpu_up(2) ..... ......
init_timers_cpu()
.... ..... spin_lock_init(&base->lock)
..... spin_unlock_irqrestore(&base->lock) ......
<spin_bug>
Allocation of per_cpu timer vector bases is done only once under "tvec_base_done[]" check. In the current code, spinlock_initialization of base->lock isn't under this check. When a CPU is up each time the base lock is reinitialized. Move base spinlock initialization under the check.
--- kernel/timer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/timer.c +1 -1
@@ -1630,12 +1630,12 @@ static int __cpuinit init_timers_cpu(int boot_done =1 ; base = &boot_tvec_bases; } +spin_lock_init (&base->lock); tvec_base_done[cpu] =1 ; }else { base =per_cpu (tvec_bases, cpu); } -spin_lock_init (&base->lock);for (j =0 ; j <TVN_SIZE ; j++) {INIT_LIST_HEAD (base->tv5.vec + j);
Greg Kroah-Hartman
maintainerPATCH 9/33 tick: Cleanup NOHZ per cpu data on cpu down
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Gleixner <[email protected]>
commit 4b0c0f294f60abcdd20994a8341a95c8ac5eeb96 upstream.
Prarit reported a crash on CPU offline/online. The reason is that on CPU down the NOHZ related per cpu data of the dead cpu is not cleaned up. If at cpu online an interrupt happens before the per cpu tick device is registered the irq_enter() check potentially sees stale data and dereferences a NULL pointer.
Cleanup the data after the cpu is dead.
--- kernel/time/tick-sched.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/time/tick-sched.c +1 -1
@@ -811,7 +811,7 @@ void tick_cancel_sched_timer(int cpu)hrtimer_cancel (&ts->sched_timer);# endif - ts->nohz_mode = NOHZ_MODE_INACTIVE; + memset(ts, 0, sizeof(*ts)); }#endif
Greg Kroah-Hartman
maintainerPATCH 10/33 ext4: limit group search loop for non-extent files
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lachlan McIlroy <[email protected]>
commit e6155736ad76b2070652745f9e54cdea3f0d8567 upstream.
In the case where we are allocating for a non-extent file, we must limit the groups we allocate from to those below 2^32 blocks, and ext4_mb_regular_allocator() attempts to do this initially by putting a cap on ngroups for the subsequent search loop.
However, the initial target group comes in from the allocation context (ac), and it may already be beyond the artificially limited ngroups. In this case, the limit
if (group == ngroups) group = 0;
at the top of the loop is never true, and the loop will run away.
Catch this case inside the loop and reset the search to start at group 0.
[[email protected]: add commit msg & comments]
--- fs/ext4/mballoc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
fs/ext4/mballoc.c +5 -1
@@ -2026,7 +2026,11 @@ repeat: group = ac->ac_g_ex.fe_group;for (i =0 ; i < ngroups; group++, i++) { -if (group == ngroups) +/* +* Artificially restricted ngroups for non-extent +* files makes group > ngroups possible on first loop. +*/ +if (group >= ngroups) group =0 ;/* This now checks without needing the buddy page */
Greg Kroah-Hartman
maintainerPATCH 11/33 ath9k: fix key allocation error handling for powersave keys
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Felix Fietkau <[email protected]>
commit 4ef69d0394cba8caa9f75d3f2e53429bfb8b3045 upstream.
If no keycache slots are available, ath_key_config can return -ENOSPC. If the key index is not checked for errors, it can lead to logspam that looks like this: "ath: wiphy0: keyreset: keycache entry 228 out of range" This can cause follow-up errors if the invalid keycache index gets used for tx.
--- drivers/net/wireless/ath/ath9k/main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/net/wireless/ath/ath9k/main.c +5 -1
@@ -1791,6 +1791,7 @@ static int ath9k_sta_add(struct ieee8021struct ath_common *common =ath9k_hw_common (sc->sc_ah);struct ath_node *an = (struct ath_node *) sta->drv_priv;struct ieee80211_key_conf ps_key = { }; +int key;ath_node_attach (sc, sta);
@@ -1798,7 +1799,9 @@ static int ath9k_sta_add(struct ieee8021 vif->type != NL80211_IFTYPE_AP_VLAN)return 0 ; - an->ps_key =ath_key_config (common, vif, sta, &ps_key); + key =ath_key_config (common, vif, sta, &ps_key); +if (key >0 ) + an->ps_key = key;return 0 ; }
@@ -1815,6 +1818,7 @@ static void ath9k_del_ps_key(struct ath_return ;ath_key_delete (common, &ps_key); + an->ps_key =0 ; } static int ath9k_sta_remove(struct ieee80211_hw *hw,
Greg Kroah-Hartman
maintainerPATCH 12/33 mwifiex: clear is_suspended flag when interrupt is received early
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bing Zhao <[email protected]>
commit 48795424acff7215d5eac0b52793a2c1eb3a6283 upstream.
When the XO-4 with 8787 wireless is woken up due to wake-on-WLAN mwifiex is often flooded with "not allowed while suspended" messages and the interface is unusable.
[ 202.171609] int: sdio_ireg = 0x1
[ 202.180700] info: mwifiex_process_hs_config: auto cancelling host
sleep since there is interrupt from the firmware
[ 202.201880] event: wakeup device...
[ 202.211452] event: hs_deactivated
[ 202.514638] info: --- Rx: Data packet ---
[ 202.514753] data: 4294957544 BSS(0-0): Data <= kernel
[ 202.514825] PREP_CMD: device in suspended state
[ 202.514839] data: dequeuing the packet ec7248c0 ec4869c0
[ 202.514886] mwifiex_write_data_sync: not allowed while suspended
[ 202.514886] host_to_card, write iomem (1) failed: -1
[ 202.514917] mwifiex_write_data_sync: not allowed while suspended
[ 202.514936] host_to_card, write iomem (2) failed: -1
[ 202.514949] mwifiex_write_data_sync: not allowed while suspended
[ 202.514965] host_to_card, write iomem (3) failed: -1
[ 202.514976] mwifiex_write_data_async failed: 0xFFFFFFFFThis can be readily reproduced when putting the XO-4 in a loop where it goes to sleep due to inactivity, but then wakes up due to an incoming ping. The error is hit within an hour or two.
This issue happens when an interrupt comes in early while host sleep is still activated. Driver handles this case by auto cancelling host sleep. However is_suspended flag is still set which prevents any cmd or data from being sent to firmware. Fix it by clearing is_suspended flag in this path.
--- drivers/net/wireless/mwifiex/cmdevt.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/wireless/mwifiex/cmdevt.c +1 -0
@@ -1081,6 +1081,7 @@ mwifiex_process_hs_config(struct mwifiex adapter->if_ops.wakeup (adapter); adapter->hs_activated = false; adapter->is_hs_configured = false; + adapter->is_suspended = false;mwifiex_hs_activated_event (mwifiex_get_priv (adapter,MWIFIEX_BSS_ROLE_ANY ), false); }
Greg Kroah-Hartman
maintainerPATCH 13/33 mwifiex: fix setting of multicast filter
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Drake <[email protected]>
commit ccd384b10420ac81ba3fb9b0a7d18272c7173552 upstream.
A small bug in this code was causing the ALLMULTI filter to be set when in fact we were just wanting to program a selective multicast list to the hardware.
Fix that bug and remove a redundant if condition in the code that follows.
This fixes wakeup behaviour when multicast WOL is enabled. Previously, all multicast packets would wake up the system. Now, only those that the host intended to receive trigger wakeups.
--- drivers/net/wireless/mwifiex/sta_ioctl.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-)
drivers/net/wireless/mwifiex/sta_ioctl.c +6 -15
@@ -100,7 +100,7 @@ int mwifiex_request_set_multicast_list(s }else {/* Multicast */ priv->curr_pkt_filter &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE; -if (mcast_list->mode ==MWIFIEX_MULTICAST_MODE ) { +if (mcast_list->mode ==MWIFIEX_ALL_MULTI_MODE ) {dev_dbg (priv->adapter->dev,"info: Enabling All Multicast!\n" ); priv->curr_pkt_filter |=
@@ -112,20 +112,11 @@ int mwifiex_request_set_multicast_list(sdev_dbg (priv->adapter->dev,"info: Set multicast list=%d\n" , mcast_list->num_multicast_addr); -/* Set multicast addresses to firmware */ -if (old_pkt_filter == priv->curr_pkt_filter) { -/* Send request to firmware */ - ret =mwifiex_send_cmd_async (priv, - HostCmd_CMD_MAC_MULTICAST_ADR, - HostCmd_ACT_GEN_SET,0 , - mcast_list); - }else { -/* Send request to firmware */ - ret =mwifiex_send_cmd_async (priv, - HostCmd_CMD_MAC_MULTICAST_ADR, - HostCmd_ACT_GEN_SET,0 , - mcast_list); - } +/* Send multicast addresses to firmware */ + ret =mwifiex_send_cmd_async (priv, + HostCmd_CMD_MAC_MULTICAST_ADR, + HostCmd_ACT_GEN_SET,0 , + mcast_list); } } }
Greg Kroah-Hartman
maintainerPATCH 14/33 drm/mm: fix dump table BUG
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Vetter <[email protected]>
commit 3a359f0b21ab218c1bf7a6a1b638b6fd143d0b99 upstream.
In
commit 9e8944ab564f2e3dde90a518cd32048c58918608
Author: Chris Wilson <[email protected]> Date: Thu Nov 15 11:32:17 2012 +0000
drm: Introduce an iterator over holes in the drm_mm range manager
helpers and iterators for hole handling have been introduced with some debug BUG_ONs sprinkled over. Unfortunately this broke the mm dumper which unconditionally tried to compute the size of the very first hole.
While at it unify the code a bit with the hole dumping in the loop.
v2: Extract a hole dump helper.
--- drivers/gpu/drm/drm_mm.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-)
drivers/gpu/drm/drm_mm.c +18 -16
@@ -679,33 +679,35 @@ void drm_mm_debug_table(struct drm_mm *mEXPORT_SYMBOL (drm_mm_debug_table);#if defined(CONFIG_DEBUG_FS ) -int drm_mm_dump_table (struct seq_file *m,struct drm_mm *mm) +static unsigned long drm_mm_dump_hole (struct seq_file *m,struct drm_mm_node *entry) { -struct drm_mm_node *entry; -unsigned long total_used =0 , total_free =0 , total =0 ;unsigned long hole_start, hole_end, hole_size; - hole_start =drm_mm_hole_node_start (&mm->head_node); - hole_end =drm_mm_hole_node_end (&mm->head_node); - hole_size = hole_end - hole_start; -if (hole_size) +if (entry->hole_follows) { + hole_start =drm_mm_hole_node_start (entry); + hole_end =drm_mm_hole_node_end (entry); + hole_size = hole_end - hole_start;seq_printf (m,"0x%08lx-0x%08lx: 0x%08lx: free\n" , hole_start, hole_end, hole_size); - total_free += hole_size; +return hole_size; + } + +return 0 ; +} + +int drm_mm_dump_table (struct seq_file *m,struct drm_mm *mm) +{ +struct drm_mm_node *entry; +unsigned long total_used =0 , total_free =0 , total =0 ; + + total_free +=drm_mm_dump_hole (m, &mm->head_node);drm_mm_for_each_node (entry, mm) {seq_printf (m,"0x%08lx-0x%08lx: 0x%08lx: used\n" , entry->start, entry->start + entry->size, entry->size); total_used += entry->size; -if (entry->hole_follows) { - hole_start =drm_mm_hole_node_start (entry); - hole_end =drm_mm_hole_node_end (entry); - hole_size = hole_end - hole_start; -seq_printf (m,"0x%08lx-0x%08lx: 0x%08lx: free\n" , - hole_start, hole_end, hole_size); - total_free += hole_size; - } + total_free +=drm_mm_dump_hole (m, entry); } total = total_free + total_used;
Greg Kroah-Hartman
maintainerPATCH 15/33 tcp: force a dst refcount when prequeue packet
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
[ Upstream commit 093162553c33e9479283e107b4431378271c735d ]
Before escaping RCU protected section and adding packet into prequeue, make sure the dst is refcounted.
--- include/net/tcp.h | 1 + 1 file changed, 1 insertion(+)
include/net/tcp.h +1 -0
@@ -902,6 +902,7 @@ static inline int tcp_prequeue(struct soif (sysctl_tcp_low_latency || !tp->ucopy.task)return 0 ; +skb_dst_force (skb);__skb_queue_tail (&tp->ucopy.prequeue, skb); tp->ucopy.memory += skb->truesize;if (tp->ucopy.memory > sk->sk_rcvbuf) {
Greg Kroah-Hartman
maintainerPATCH 16/33 3c509.c: call SET_NETDEV_DEV for all device types (ISA/ISAPnP/EISA)
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthew Whitehead <[email protected]>
[ Upstream commit 3b54912f9cd167641b91d4a697bd742f70e534fe ]
The venerable 3c509 driver only sets its device parent in one case, the ISAPnP one. It does this with the SET_NETDEV_DEV function. It should register with the device hierarchy in two additional cases: standard (non-PnP) ISA and EISA.
- Currently they appear here:/sys/devices/virtual/net/eth0 (standard ISA)/sys/devices/virtual/net/eth1 (EISA)
- Rather, they should instead be here:/sys/devices/isa/3c509.0/net/eth0 (standard ISA) /sys/devices/pci0000:00/0000:00:07.0/00:04/net/eth1 (EISA)
Tested on ISA and EISA boards.
--- drivers/net/3c509.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/3c509.c +2 -0
@@ -309,6 +309,7 @@ static int __devinit el3_isa_match(strucif (!dev)return -ENOMEM ; +SET_NETDEV_DEV (dev, pdev);netdev_boot_setup_check (dev);if (!request_region (ioaddr,EL3_IO_EXTENT ,"3c509-isa" )) {
@@ -704,6 +705,7 @@ static int __init el3_eisa_probe (structreturn -ENOMEM ; } +SET_NETDEV_DEV (dev, device);netdev_boot_setup_check (dev);el3_dev_fill (dev, phys_addr, ioaddr, irq, if_port,EL3_EISA );
Greg Kroah-Hartman
maintainerPATCH 17/33 net_sched: act_ipt forward compat with xtables
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jamal Hadi Salim <[email protected]>
[ Upstream commit 0dcffd09641f3abb21ac5cabc61542ab289d1a3c ]
Deal with changes in newer xtables while maintaining backward compatibility. Thanks to Jan Engelhardt for suggestions.
--- net/sched/act_ipt.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-)
net/sched/act_ipt.c +30 -3
@@ -8,7 +8,7 @@* as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * -* Copyright: Jamal Hadi Salim (2002-4) +* Copyright: Jamal Hadi Salim (2002-13) */ #include <linux/types.h>
@@ -299,17 +299,44 @@ static struct tc_action_ops act_ipt_ops .walk = tcf_generic_walker }; -MODULE_AUTHOR ("Jamal Hadi Salim(2002-4)" ); +static struct tc_action_ops act_xt_ops = { + .kind ="xt" , + .hinfo = &ipt_hash_info, + .type =TCA_ACT_IPT , + .capab =TCA_CAP_NONE , + .owner =THIS_MODULE , + .act = tcf_ipt, + .dump = tcf_ipt_dump, + .cleanup = tcf_ipt_cleanup, + .lookup = tcf_hash_search, + .init = tcf_ipt_init, + .walk = tcf_generic_walker +}; + +MODULE_AUTHOR ("Jamal Hadi Salim(2002-13)" );MODULE_DESCRIPTION ("Iptables target actions" );MODULE_LICENSE ("GPL" ); +MODULE_ALIAS ("act_xt" );static int __init ipt_init_module (void ) { -return tcf_register_action (&act_ipt_ops); +int ret1, ret2; + ret1 =tcf_register_action (&act_xt_ops); +if (ret1 <0 ) +printk ("Failed to load xt action\n" ); + ret2 =tcf_register_action (&act_ipt_ops); +if (ret2 <0 ) +printk ("Failed to load ipt action\n" ); + +if (ret1 <0 && ret2 <0 ) +return ret1; +else +return 0 ; } static void __exit ipt_cleanup_module(void) { +tcf_unregister_action (&act_xt_ops);tcf_unregister_action (&act_ipt_ops); }
Greg Kroah-Hartman
maintainerPATCH 18/33 bridge: fix race with topology change timer
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: stephen hemminger <[email protected]>
[ Upstream commit 83401eb4990ff6af55aeed8f49681558544192e6 ]
A bridge should only send topology change notice if it is not the root bridge. It is possible for message age timer to elect itself as a new root bridge, and still have a topology change timer running but waiting for bridge lock on other CPU.
Solve the race by checking if we are root bridge before continuing. This was the root cause of the cases where br_send_tcn_bpdu would OOPS.
--- net/bridge/br_stp_timer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/bridge/br_stp_timer.c +1 -1
@@ -106,7 +106,7 @@ static void br_tcn_timer_expired(unsignebr_debug (br,"tcn timer expired\n" );spin_lock (&br->lock); -if (br->dev->flags &IFF_UP ) { +if (!br_is_root_bridge (br) && (br->dev->flags &IFF_UP )) {br_transmit_tcn (br);mod_timer (&br->tcn_timer,jiffies + br->bridge_hello_time);
Greg Kroah-Hartman
maintainerPATCH 19/33 3c59x: fix freeing nonexistent resource on driver unload
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sergei Shtylyov <[email protected]>
[ Upstream commit c81400be716aa4c76f6ebf339ba94358dbbf6da6 ]
When unloading the driver that drives an EISA board, a message similar to the following one is displayed:
Trying to free nonexistent resource <0000000000013000-000000000001301f>
Then an user is unable to reload the driver because the resource it requested in the previous load hasn't been freed. This happens most probably due to a typo in vortex_eisa_remove() which calls release_region() with 'dev->base_addr' instead of 'edev->base_addr'...
--- drivers/net/3c59x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/3c59x.c +1 -1
@@ -951,7 +951,7 @@ static int __devexit vortex_eisa_remove(unregister_netdev (dev);iowrite16 (TotalReset|0x14 , ioaddr +EL3_CMD ); -release_region (dev->base_addr,VORTEX_TOTAL_SIZE ); +release_region (edev->base_addr,VORTEX_TOTAL_SIZE );free_netdev (dev);return 0 ;
Greg Kroah-Hartman
maintainerPATCH 20/33 3c59x: fix PCI resource management
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sergei Shtylyov <[email protected]>
[ Upstream commit 4b264a1676e70dc656ba53a8cac690f2d4b65f4e ]
The driver wrongly claimed I/O ports at an address returned by pci_iomap() -- even if it was passed an MMIO address. Fix this by claiming/releasing all PCI resources in the PCI driver's probe()/remove() methods instead and get rid of 'must_free_region' flag weirdness (why would Cardbus claim anything for us?).
--- drivers/net/3c59x.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-)
drivers/net/3c59x.c +13 -12
@@ -632,7 +632,6 @@ struct vortex_private { pm_state_valid:1, /* pci_dev->saved_config_space has sane contents */ open:1, medialock:1, - must_free_region:1, /* Flag: if zero, Cardbus owns the I/O region */ large_frames:1, /* accept large frames */ handling_irq:1; /* private in_irq indicator *//* {get|set}_wol operations are already serialized by rtnl.
@@ -1012,6 +1011,12 @@ static int __devinit vortex_init_one(strif (rc <0 ) goto out; + rc =pci_request_regions (pdev,DRV_NAME ); +if (rc <0 ) { +pci_disable_device (pdev); + goto out; + } + unit = vortex_cards_found;if (global_use_mmio <0 && (unit >=MAX_UNITS || use_mmio[unit] <0 )) {
@@ -1027,6 +1032,7 @@ static int __devinit vortex_init_one(strif (!ioaddr)/* If mapping fails, fall-back to BAR 0... */ ioaddr =pci_iomap (pdev,0 ,0 );if (!ioaddr) { +pci_release_regions (pdev);pci_disable_device (pdev); rc = -ENOMEM ; goto out;
@@ -1036,6 +1042,7 @@ static int __devinit vortex_init_one(str ent->driver_data, unit);if (rc <0 ) {pci_iounmap (pdev, ioaddr); +pci_release_regions (pdev);pci_disable_device (pdev); goto out; }
@@ -1180,11 +1187,6 @@ static int __devinit vortex_probe1(struc/* PCI-only startup logic */ if (pdev) { -/* EISA resources already marked, so only PCI needs to do this here */ -/* Ignore return value, because Cardbus drivers already allocate for us */ -if (request_region (dev->base_addr, vci->io_size, print_name) !=NULL ) - vp->must_free_region =1 ; -/* enable bus-mastering if necessary */ if (vci->flags &PCI_USES_MASTER )pci_set_master (pdev);
@@ -1222,7 +1224,7 @@ static int __devinit vortex_probe1(struc &vp->rx_ring_dma); retval = -ENOMEM ;if (!vp->rx_ring) - goto free_region; + goto free_device; vp->tx_ring = (struct boom_tx_desc *)(vp->rx_ring +RX_RING_SIZE ); vp->tx_ring_dma = vp->rx_ring_dma +sizeof (struct boom_rx_desc ) *RX_RING_SIZE ;
@@ -1487,9 +1489,7 @@ free_ring: +sizeof (struct boom_tx_desc ) *TX_RING_SIZE , vp->rx_ring, vp->rx_ring_dma); -free_region: -if (vp->must_free_region) -release_region (dev->base_addr, vci->io_size); +free_device:free_netdev (dev);pr_err (PFX "vortex_probe1 fails. Returns %d\n" , retval); out:
@@ -3253,8 +3253,9 @@ static void __devexit vortex_remove_one( +sizeof (struct boom_tx_desc ) *TX_RING_SIZE , vp->rx_ring, vp->rx_ring_dma); -if (vp->must_free_region) -release_region (dev->base_addr, vp->io_size); + +pci_release_regions (pdev); +free_netdev (dev); }
Greg Kroah-Hartman
maintainerPATCH 21/33 if_cablemodem.h: Add parenthesis around ioctl macros
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josh Boyer <[email protected]>
[ Upstream commit 4f924b2aa4d3cb30f07e57d6b608838edcbc0d88 ]
Protect the SIOCGCM* ioctl macros with parenthesis.
--- include/linux/if_cablemodem.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
include/linux/if_cablemodem.h +6 -6
@@ -12,11 +12,11 @@*/ /* some useful defines for sb1000.c e cmconfig.c - fv */ -#define SIOCGCMSTATS SIOCDEVPRIVATE+0/* get cable modem stats */ -#define SIOCGCMFIRMWARE SIOCDEVPRIVATE+1/* get cm firmware version */ -#define SIOCGCMFREQUENCY SIOCDEVPRIVATE+2/* get cable modem frequency */ -#define SIOCSCMFREQUENCY SIOCDEVPRIVATE+3/* set cable modem frequency */ -#define SIOCGCMPIDS SIOCDEVPRIVATE+4/* get cable modem PIDs */ -#define SIOCSCMPIDS SIOCDEVPRIVATE+5/* set cable modem PIDs */ +#define SIOCGCMSTATS (SIOCDEVPRIVATE+0)/* get cable modem stats */ +#define SIOCGCMFIRMWARE (SIOCDEVPRIVATE+1)/* get cm firmware version */ +#define SIOCGCMFREQUENCY (SIOCDEVPRIVATE+2)/* get cable modem frequency */ +#define SIOCSCMFREQUENCY (SIOCDEVPRIVATE+3)/* set cable modem frequency */ +#define SIOCGCMPIDS (SIOCDEVPRIVATE+4)/* get cable modem PIDs */ +#define SIOCSCMPIDS (SIOCDEVPRIVATE+5)/* set cable modem PIDs */ #endif
Greg Kroah-Hartman
maintainerPATCH 22/33 macvlan: fix passthru mode race between dev removal and rx path
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiri Pirko <[email protected]>
[ Upstream commit 233c7df0821c4190e2d3f4be0f2ca0ab40a5ed8c, note
that I had to add list_first_or_null_rcu to rculist.h in order to accomodate this fix. ]
Currently, if macvlan in passthru mode is created and data are rxed and you remove this device, following panic happens:
NULL pointer dereference at 0000000000000198
IP: [<ffffffffa0196058>] macvlan_handle_frame+0x153/0x1f7 [macvlan]
I'm using following script to trigger this:
<script>
while [ 1 ]
do
ip link add link e1 name macvtap0 type macvtap mode passthru ip link set e1 up
ip link set macvtap0 up
IFINDEX=ip link |grep macvtap0 | cut -f 1 -d ':' cat /dev/tap$IFINDEX >/dev/null &
ip link del dev macvtap0
done
</script>
I run this script while "ping -f" is running on another machine to send packets to e1 rx.
Reason of the panic is that list_first_entry() is blindly called in macvlan_handle_frame() even if the list was empty. vlan is set to incorrect pointer which leads to the crash.
I'm fixing this by protecting port->vlans list by rcu and by preventing from getting incorrect pointer in case the list is empty.
Introduced by: commit eb06acdc85585f2 "macvlan: Introduce 'passthru' mode to takeover the underlying device"
--- drivers/net/macvlan.c | 7 ++++--- include/linux/rculist.h | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-)
drivers/net/macvlan.c +4 -3
@@ -193,7 +193,8 @@ static rx_handler_result_t macvlan_handl }if (port->passthru) - vlan = list_first_entry(&port->vlans, struct macvlan_dev, list); + vlan =list_first_or_null_rcu (&port->vlans, + struct macvlan_dev, list);else vlan =macvlan_hash_lookup (port, eth->h_dest);if (vlan ==NULL )
@@ -687,7 +688,7 @@ int macvlan_common_newlink(struct net *sif (err <0 ) goto destroy_port; -list_add_tail (&vlan->list, &port->vlans); +list_add_tail_rcu (&vlan->list, &port->vlans);netif_stacked_transfer_operstate (lowerdev, dev);return 0 ;
@@ -713,7 +714,7 @@ void macvlan_dellink(struct net_device * {struct macvlan_dev *vlan =netdev_priv (dev); -list_del (&vlan->list); +list_del_rcu (&vlan->list);unregister_netdevice_queue (dev, head); }EXPORT_SYMBOL_GPL (macvlan_dellink);
include/linux/rculist.h +17 -0
@@ -242,6 +242,23 @@ static inline void list_splice_init_rcu(list_entry_rcu ((ptr)->next, type, member)/** +* list_first_or_null_rcu - get the first element from a list +* @ptr: the list head to take the element from. +* @type: the type of the struct this is embedded in. +* @member: the name of the list_struct within the struct. +* +* Note that if the list is empty, it returns NULL. +* +* This primitive may safely run concurrently with the _rcu list-mutation +* primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock(). + */ +#define list_first_or_null_rcu (ptr, type, member) \ + ({struct list_head *__ptr = (ptr); \ + struct list_head __rcu *__next = list_next_rcu(__ptr); \ + likely(__ptr != __next) ? container_of(__next, type, member) : NULL; \ + }) + +/** * list_for_each_entry_rcu - iterate over rcu list of given type * @pos: the type * to use as a loop cursor. * @head: the head for your list.
Greg Kroah-Hartman
maintainerPATCH 23/33 ipv6: do not clear pinet6 field
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
[ Upstream commit f77d602124d865c38705df7fa25c03de9c284ad2 ]
We have seen multiple NULL dereferences in __inet6_lookup_established()
After analysis, I found that inet6_sk() could be NULL while the check for sk_family == AF_INET6 was true.
Bug was added in linux-2.6.29 when RCU lookups were introduced in UDP and TCP stacks.
Once an IPv6 socket, using SLAB_DESTROY_BY_RCU is inserted in a hash table, we no longer can clear pinet6 field.
This patch extends logic used in commit fcbdf09d9652c891 ("net: fix nulls list corruptions in sk_prot_alloc")
TCP/UDP/UDPLite IPv6 protocols provide their own .clear_sk() method to make sure we do not clear pinet6 field.
At socket clone phase, we do not really care, as cloning the parent (non NULL) pinet6 is not adding a fatal race.
--- include/net/sock.h | 12 ++++++++++++ net/core/sock.c | 12 ------------ net/ipv6/tcp_ipv6.c | 12 ++++++++++++ net/ipv6/udp.c | 13 ++++++++++++- net/ipv6/udp_impl.h | 2 ++ net/ipv6/udplite.c | 2 +- 6 files changed, 39 insertions(+), 14 deletions(-)
include/net/sock.h +12 -0
@@ -721,6 +721,18 @@ struct timewait_sock_ops;struct inet_hashinfo ;struct raw_hashinfo ; +/* +* caches using SLAB_DESTROY_BY_RCU should let .next pointer from nulls nodes +* un-modified. Special care is taken when initializing object to zero. +*/ +static inline void sk_prot_clear_nulls (struct sock *sk,int size) +{ + if (offsetof(struct sock, sk_node.next) != 0) + memset(sk, 0, offsetof(struct sock, sk_node.next)); +memset (&sk->sk_node.pprev,0 , + size - offsetof(struct sock, sk_node.pprev)); +} +/* Networking protocol blocks we attach to sockets. * socket layer -> transport layer interface * transport -> network interface is defined by struct inet_proto
net/core/sock.c +0 -12
@@ -1017,18 +1017,6 @@ static void sock_copy(struct sock *nsk,#endif } -/* -* caches using SLAB_DESTROY_BY_RCU should let .next pointer from nulls nodes -* un-modified. Special care is taken when initializing object to zero. -*/ -static inline void sk_prot_clear_nulls (struct sock *sk,int size) -{ - if (offsetof(struct sock, sk_node.next) != 0) - memset(sk, 0, offsetof(struct sock, sk_node.next)); -memset (&sk->sk_node.pprev,0 , - size - offsetof(struct sock, sk_node.pprev)); -} -void sk_prot_clear_portaddr_nulls (struct sock *sk,int size) {unsigned long nulls1, nulls2;
net/ipv6/tcp_ipv6.c +12 -0
@@ -2205,6 +2205,17 @@ void tcp6_proc_exit(struct net *net) }#endif +static void tcp_v6_clear_sk (struct sock *sk,int size) +{ +struct inet_sock *inet =inet_sk (sk); + +/* we do not want to clear pinet6 field, because of RCU lookups */ +sk_prot_clear_nulls (sk, offsetof(struct inet_sock , pinet6)); + + size -= offsetof(struct inet_sock , pinet6) +sizeof (inet->pinet6); +memset (&inet->pinet6 +1 ,0 , size); +} +struct proto tcpv6_prot = { .name ="TCPv6" , .owner =THIS_MODULE ,
@@ -2244,6 +2255,7 @@ struct proto tcpv6_prot = { .compat_setsockopt = compat_tcp_setsockopt, .compat_getsockopt = compat_tcp_getsockopt, #endif + .clear_sk = tcp_v6_clear_sk, }; static const struct inet6_protocol tcpv6_protocol = {
net/ipv6/udp.c +12 -1
@@ -1448,6 +1448,17 @@ void udp6_proc_exit(struct net *net) { }#endif /* CONFIG_PROC_FS */ +void udp_v6_clear_sk (struct sock *sk,int size) +{ +struct inet_sock *inet =inet_sk (sk); + +/* we do not want to clear pinet6 field, because of RCU lookups */ +sk_prot_clear_portaddr_nulls (sk, offsetof(struct inet_sock , pinet6)); + + size -= offsetof(struct inet_sock , pinet6) +sizeof (inet->pinet6); +memset (&inet->pinet6 +1 ,0 , size); +} +/* ------------------------------------------------------------------------ */ struct proto udpv6_prot = {
@@ -1478,7 +1489,7 @@ struct proto udpv6_prot = { .compat_setsockopt = compat_udpv6_setsockopt, .compat_getsockopt = compat_udpv6_getsockopt, #endif - .clear_sk = sk_prot_clear_portaddr_nulls, + .clear_sk = udp_v6_clear_sk, }; static struct inet_protosw udpv6_protosw = {
net/ipv6/udp_impl.h +2 -0
@@ -31,6 +31,8 @@ extern int udpv6_recvmsg(struct kiocb *iextern int udpv6_queue_rcv_skb (struct sock * sk,struct sk_buff *skb);extern void udpv6_destroy_sock (struct sock *sk); +extern void udp_v6_clear_sk (struct sock *sk,int size); +#ifdef CONFIG_PROC_FS extern int udp6_seq_show (struct seq_file *seq,void *v);#endif
net/ipv6/udplite.c +1 -1
@@ -55,7 +55,7 @@ struct proto udplitev6_prot = { .compat_setsockopt = compat_udpv6_setsockopt, .compat_getsockopt = compat_udpv6_getsockopt, #endif - .clear_sk = sk_prot_clear_portaddr_nulls, + .clear_sk = udp_v6_clear_sk, }; static struct inet_protosw udplite6_protosw = {
Greg Kroah-Hartman
maintainerPATCH 24/33 xfrm6: release dev before returning error
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cong Wang <[email protected]>
[ Upstream commit 84c4a9dfbf430861e7588d95ae3ff61535dca351 ]
We forget to call dev_put() on error path in xfrm6_fill_dst(), its caller doesn't handle this.
--- net/ipv6/xfrm6_policy.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
net/ipv6/xfrm6_policy.c +3 -1
@@ -96,8 +96,10 @@ static int xfrm6_fill_dst(struct xfrm_dsdev_hold (dev); xdst->u.rt6.rt6i_idev =in6_dev_get (dev); -if (!xdst->u.rt6.rt6i_idev) +if (!xdst->u.rt6.rt6i_idev) { +dev_put (dev);return -ENODEV ; + } xdst->u.rt6.rt6i_peer = rt->rt6i_peer;if (rt->rt6i_peer)
Greg Kroah-Hartman
maintainerPATCH 25/33 pch_dma: Use GFP_ATOMIC because called from interrupt context
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tomoya MORINAGA <[email protected]>
commit 5c1ef59168c485318e40ba485c1eba57d81d0faa upstream.
pdc_desc_get() is called from pd_prep_slave_sg, and the function is called from interrupt context(e.g. Uart driver "pch_uart.c"). In fact, I saw kernel error message.
So, GFP_ATOMIC must be used not GFP_NOIO.
--- drivers/dma/pch_dma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/dma/pch_dma.c +1 -1
@@ -489,7 +489,7 @@ static struct pch_dma_desc *pdc_desc_getdev_dbg (chan2dev (&pd_chan->chan),"scanned %d descriptors\n" , i);if (!ret) { - ret =pdc_alloc_desc (&pd_chan->chan,GFP_NOIO ); + ret =pdc_alloc_desc (&pd_chan->chan,GFP_ATOMIC );if (ret) {spin_lock (&pd_chan->lock); pd_chan->descs_allocated++;
Greg Kroah-Hartman
maintainerPATCH 26/33 r8169: fix vlan tag read ordering.
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Francois Romieu <[email protected]>
commit ce11ff5e5963e441feb591e76278528f876c332d upstream.
Control of receive descriptor must not be returned to ethernet chipset before vlan tag processing is done.
VLAN tag receive word is now reset both in normal and error path.
--- drivers/net/r8169.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
drivers/net/r8169.c +6 -7
@@ -1494,8 +1494,6 @@ static void rtl8169_rx_vlan_tag(struct Rif (opts2 & RxVlanTag)__vlan_hwaccel_put_tag (skb,swab16 (opts2 &0xffff )); - - desc->opts2 =0 ; }static int rtl8169_gset_tbi (struct net_device *dev,struct ethtool_cmd *cmd)
@@ -5188,7 +5186,6 @@ static int rtl8169_rx_interrupt(struct nrtl8169_schedule_work (dev, rtl8169_reset_task); dev->stats.rx_fifo_errors++; } -rtl8169_mark_to_asic (desc, rx_buf_sz); }else {struct sk_buff *skb;dma_addr_t addr =le64_to_cpu (desc->addr);
@@ -5202,16 +5199,14 @@ static int rtl8169_rx_interrupt(struct nif (unlikely (rtl8169_fragmented_frame (status))) { dev->stats.rx_dropped++; dev->stats.rx_length_errors++; -rtl8169_mark_to_asic (desc, rx_buf_sz); -continue ; + goto release_descriptor; } skb =rtl8169_try_rx_copy (tp->Rx_databuff[entry], tp, pkt_size, addr); -rtl8169_mark_to_asic (desc, rx_buf_sz);if (!skb) { dev->stats.rx_dropped++; -continue ; + goto release_descriptor; }rtl8169_rx_csum (skb, status);
@@ -5225,6 +5220,10 @@ static int rtl8169_rx_interrupt(struct n dev->stats.rx_bytes += pkt_size; dev->stats.rx_packets++; } +release_descriptor: + desc->opts2 =0 ; +wmb (); +rtl8169_mark_to_asic (desc, rx_buf_sz); } count = cur_rx - tp->cur_rx;
Greg Kroah-Hartman
maintainerPATCH 27/33 drbd: fix for deadlock when using automatic split-brain-recovery
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Philipp Reisner <[email protected]>
commit 7c689e63a847316c1b2500f86891b0a574ce7e69 upstream.
With an automatic after split-brain recovery policy of "after-sb-1pri call-pri-lost-after-sb",
when trying to drbd_set_role() to R_SECONDARY, we run into a deadlock.
This was first recognized and supposedly fixed by
2009-06-10 "Fixed a deadlock when using automatic split brain recovery when both nodes are" replacing drbd_set_role() with drbd_change_state() in that code-path,
but the first hunk of that patch forgets to remove the drbd_set_role().
We apparently only ever tested the "two primaries" case.
--- drivers/block/drbd/drbd_receiver.c | 1 - 1 file changed, 1 deletion(-)
drivers/block/drbd/drbd_receiver.c +0 -1
@@ -2225,7 +2225,6 @@ static int drbd_asb_recover_1p(struct drif (hg ==-1 && mdev->state.role ==R_PRIMARY ) {enum drbd_state_rv rv2; -drbd_set_role (mdev,R_SECONDARY ,0 );/* drbd_change_state() does not sleep while in SS_IN_TRANSIENT_STATE, * we might be here in C_WF_REPORT_PARAMS which is transient. * we do not need to wait for the after state change work either. */
Greg Kroah-Hartman
maintainerPATCH 28/33 drivers/rtc/rtc-pcf2123.c: fix error return code in pcf2123_probe()
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wei Yongjun <[email protected]>
commit 35623715818dfa720cccf99cd280dcbb4b78da23 upstream.
Fix to return -ENODEV in the chip not found error handling case instead of 0, as done elsewhere in this function.
--- drivers/rtc/rtc-pcf2123.c | 1 + 1 file changed, 1 insertion(+)
drivers/rtc/rtc-pcf2123.c +1 -0
@@ -263,6 +263,7 @@ static int __devinit pcf2123_probe(strucif (!(rxbuf[0 ] &0x20 )) {dev_err (&spi->dev,"chip not found\n" ); + ret = -ENODEV ; goto kfree_exit; }
Greg Kroah-Hartman
maintainerPATCH 29/33 ACPI / EC: Restart transaction even when the IBF flag set
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lan Tianyu <[email protected]>
commit 28fe5c825f8e15744d04c7c1b8df197950923ecd upstream.
The EC driver works abnormally with IBF flag always set. IBF means "The host has written a byte of data to the command or data port, but the embedded controller has not yet read it". If IBF is set in the EC status and not cleared, this will cause all subsequent EC requests to fail with a timeout error.
Change the EC driver so that it doesn't refuse to restart a transaction if IBF is set in the status. Also increase the number of transaction restarts to 5, as it turns out that 2 is not sufficient in some cases.
This bug happens on several different machines (Asus V1S, Dell Latitude E6530, Samsung R719, Acer Aspire 5930G, Sony Vaio SR19VN and others).
[rjw: Changelog]
References: https://bugzilla.kernel.org/show_bug.cgi?id=14733
References: https://bugzilla.kernel.org/show_bug.cgi?id=15560
References: https://bugzilla.kernel.org/show_bug.cgi?id=15946
References: https://bugzilla.kernel.org/show_bug.cgi?id=42945
References: https://bugzilla.kernel.org/show_bug.cgi?id=48221
--- drivers/acpi/ec.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/acpi/ec.c +1 -3
@@ -217,7 +217,7 @@ static int ec_check_sci_sync(struct acpistatic int ec_poll (struct acpi_ec *ec) {unsigned long flags; -int repeat =2 ;/* number of command restarts */ +int repeat =5 ;/* number of command restarts */ while (repeat--) {unsigned long delay = jiffies +msecs_to_jiffies (ec_delay);
@@ -235,8 +235,6 @@ static int ec_poll(struct acpi_ec *ec) }advance_transaction (ec,acpi_ec_read_status (ec)); }while (time_before (jiffies, delay)); -if (acpi_ec_read_status (ec) &ACPI_EC_FLAG_IBF ) -break ;pr_debug (PREFIX "controller reset, restart transaction\n" );spin_lock_irqsave (&ec->curr_lock, flags);start_transaction (ec);
Greg Kroah-Hartman
maintainerPATCH 30/33 drivers/char/ipmi: memcpy, need additional 2 bytes to avoid memory overflow
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chen Gang <[email protected]>
commit a5f2b3d6a738e7d4180012fe7b541172f8c8dcea upstream.
When calling memcpy, read_data and write_data need additional 2 bytes.
write_data:
for checking: "if (size > IPMI_MAX_MSG_LENGTH)"
for operating: "memcpy(bt->write_data + 3, data + 1, size - 1)"
read_data:
for checking: "if (msg_len < 3 || msg_len > IPMI_MAX_MSG_LENGTH)"
for operating: "memcpy(data + 2, bt->read_data + 4, msg_len - 2)"--- drivers/char/ipmi/ipmi_bt_sm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/char/ipmi/ipmi_bt_sm.c +2 -2
@@ -95,9 +95,9 @@ struct si_sm_data {enum bt_states state;unsigned char seq;/* BT sequence number */ struct si_sm_io *io; -unsigned char write_data[IPMI_MAX_MSG_LENGTH ]; +unsigned char write_data[IPMI_MAX_MSG_LENGTH +2 ];/* +2 for memcpy */ int write_count; -unsigned char read_data[IPMI_MAX_MSG_LENGTH ]; +unsigned char read_data[IPMI_MAX_MSG_LENGTH +2 ];/* +2 for memcpy */ int read_count;int truncated;long timeout;/* microseconds countdown */
Greg Kroah-Hartman
maintainerPATCH 31/33 ipmi: ipmi_devintf: compat_ioctl method fails to take ipmi_mutex
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin LaHaise <[email protected]>
commit 6368087e851e697679af059b4247aca33a69cef3 upstream.
When a 32 bit version of ipmitool is used on a 64 bit kernel, the ipmi_devintf code fails to correctly acquire ipmi_mutex. This results in incomplete data being retrieved in some cases, or other possible failures. Add a wrapper around compat_ipmi_ioctl() to take ipmi_mutex to fix this.
--- drivers/char/ipmi/ipmi_devintf.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
drivers/char/ipmi/ipmi_devintf.c +13 -1
@@ -838,13 +838,25 @@ static long compat_ipmi_ioctl(struct fil return ipmi_ioctl(filep, cmd, arg); } } + +static long unlocked_compat_ipmi_ioctl (struct file *filep,unsigned int cmd, +unsigned long arg) +{ +int ret; + +mutex_lock (&ipmi_mutex); + ret =compat_ipmi_ioctl (filep, cmd, arg); +mutex_unlock (&ipmi_mutex); + +return ret; +}#endif static const struct file_operations ipmi_fops = { .owner =THIS_MODULE , .unlocked_ioctl = ipmi_unlocked_ioctl, #ifdef CONFIG_COMPAT - .compat_ioctl = compat_ipmi_ioctl, + .compat_ioctl = unlocked_compat_ipmi_ioctl, #endif .open = ipmi_open, .release = ipmi_release,
Greg Kroah-Hartman
maintainerPATCH 32/33 drm/radeon: check incoming cliprects pointer
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <[email protected]>
commit fefaedcfb82d2e57c2320acf60604ab03b750cc0 upstream.
The "boxes" parameter points into userspace memory. It should be verified like any other operation against user memory.
--- drivers/gpu/drm/radeon/r300_cmdbuf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/radeon/r300_cmdbuf.c +1 -1
@@ -74,7 +74,7 @@ static int r300_emit_cliprects(drm_radeoOUT_RING (CP_PACKET0 (R300_RE_CLIPRECT_TL_0 , nr *2 -1 ));for (i =0 ; i < nr; ++i) { -if (DRM_COPY_FROM_USER_UNCHECKED +if (DRM_COPY_FROM_USER (&box, &cmdbuf->boxes[n + i],sizeof (box))) {DRM_ERROR ("copy cliprect faulted\n" );return -EFAULT ;
Greg Kroah-Hartman
maintainerPATCH 33/33 usermodehelper: check subprocess_info->path != NULL
In reply to Greg Kroah-Hartman3.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oleg Nesterov <[email protected]>
commit 264b83c07a84223f0efd0d1db9ccc66d6f88288f upstream.
argv_split(empty_or_all_spaces) happily succeeds, it simply returns argc == 0 and argv[0] == NULL. Change call_usermodehelper_exec() to check sub_info->path != NULL to avoid the crash.
This is the minimal fix, todo:
- perhaps we should change argv_split() to return NULL or change the callers.
- kill or justify ->path[0] check
- narrow the scope of helper_lock()
--- kernel/kmod.c | 5 +++++ 1 file changed, 5 insertions(+)
kernel/kmod.c +5 -0
@@ -421,6 +421,11 @@ int call_usermodehelper_exec(struct subpint retval =0 ;helper_lock (); +if (!sub_info->path) { + retval = -EINVAL ; + goto out; + } +if (sub_info->path[0 ] =='\0' ) goto out;
At Fri, 17 May 2013 14:49:44 -0700,
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.0.79 release. There are 33 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun May 19 21:47:48 UTC 2013. Anything received after that time might be too late.
This kernel can be built and boot without any problem. Building a kernel with this kernel also works fine.
- Build Machine: debian wheezy x86_64
CPU: Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz x 4
memory: 8GB
- Test machine: debian wheezy x86_64(KVM guest on the Build Machine)
vCPU: x2
memory: 2GB
Thanks,
Satoru
Greg Kroah-Hartman
maintainerQuoted 14 lines · Satoru Takeuchi
At Fri, 17 May 2013 14:49:44 -0700,
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.0.79 release. There are 33 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun May 19 21:47:48 UTC 2013. Anything received after that time might be too late.
This kernel can be built and boot without any problem. Building a kernel with this kernel also works fine.
Quoted 7 lines
- Build Machine: debian wheezy
x86_64
CPU: Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz x 4
memory: 8GB- Test machine: debian wheezy
x86_64(KVM guest on the Build Machine)
vCPU: x2
memory: 2GB
Wonderful, thanks for testing.
greg k-h
Greg Kroah-Hartman
maintainerQuoted 8 lines · Satoru Takeuchi
At Fri, 17 May 2013 14:49:44 -0700,
Quoted 6 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.0.79 release. There are 33 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Quoted 5 lines
Quoted 2 lines
Responses should be made by Sun May 19 21:47:48 UTC 2013. Anything received after that time might be too late.
This kernel can be built and boot without any problem. Building a kernel with this kernel also works fine.
Wonderful, thanks for testing.
greg k-h