3.14.24-stable review
Subsystems (4)
Greg Kroah-Hartman
maintainerPATCH 176/203 PCI: Rename sysfs enabled file back to enable
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
commit d8e7d53a2fc14e0830ab728cb84ee19933d3ac8d upstream.
Back in commit 5136b2da770d ("PCI: convert bus code to use dev_groups"), I misstyped the 'enable' sysfs filename as 'enabled', which broke the userspace API. This patch fixes that issue by renaming the file back.
--- drivers/pci/pci-sysfs.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/pci/pci-sysfs.c +7 -7
@@ -186,9 +186,9 @@ static ssize_t modalias_show(struct devi }static DEVICE_ATTR_RO (modalias); -static ssize_t enabled_store (struct device *dev, -struct device_attribute *attr,const char *buf, -size_t count) +static ssize_t enable_store (struct device *dev, +struct device_attribute *attr,const char *buf, +size_t count) {struct pci_dev *pdev =to_pci_dev (dev);unsigned long val;
@@ -212,15 +212,15 @@ static ssize_t enabled_store(struct devireturn result <0 ? result : count; } -static ssize_t enabled_show (struct device *dev, -struct device_attribute *attr,char *buf) +static ssize_t enable_show (struct device *dev, +struct device_attribute *attr,char *buf) {struct pci_dev *pdev; pdev =to_pci_dev (dev);return sprintf (buf,"%u\n" ,atomic_read (&pdev->enable_cnt)); } -static DEVICE_ATTR_RW (enabled); +static DEVICE_ATTR_RW (enable);#ifdef CONFIG_NUMA static ssize_t
@@ -526,7 +526,7 @@ static struct attribute *pci_dev_attrs[]#endif &dev_attr_dma_mask_bits.attr, &dev_attr_consistent_dma_mask_bits.attr, - &dev_attr_enabled.attr, + &dev_attr_enable.attr, &dev_attr_broken_parity_status.attr, &dev_attr_msi_bus.attr, #if defined(CONFIG_PM_RUNTIME) && defined(CONFIG_ACPI)
Greg Kroah-Hartman
maintainerPATCH 177/203 quota: Properly return errors from dquot_writeback_dquots()
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
commit 474d2605d119479e5aa050f738632e63589d4bb5 upstream.
Due to a switched left and right side of an assignment, dquot_writeback_dquots() never returned error. This could result in errors during quota writeback to not be reported to userspace properly. Fix it.
Coverity-id: 1226884
--- fs/quota/dquot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/quota/dquot.c +1 -1
@@ -637,7 +637,7 @@ int dquot_writeback_dquots(struct super_dqstats_inc (DQST_LOOKUPS ); err = sb->dq_op->write_dquot (dquot);if (!ret && err) - err = ret; + ret = err;dqput (dquot);spin_lock (&dq_list_lock); }
Greg Kroah-Hartman
maintainerPATCH 179/203 tty: Fix high cpu load if tty is unreleaseable
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Hurley <[email protected]>
commit 37b164578826406a173ca7c20d9ba7430134d23e upstream.
Kernel oops can cause the tty to be unreleaseable (for example, if n_tty_read() crashes while on the read_wait queue). This will cause tty_release() to endlessly loop without sleeping.
Use a killable sleep timeout which grows by 2n+1 jiffies over the interval [0, 120 secs.) and then jumps to forever (but still killable).
NB: killable just allows for the task to be rewoken manually, not to be terminated.
--- drivers/tty/tty_io.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/tty/tty_io.c +6 -1
@@ -1701,6 +1701,7 @@ int tty_release(struct inode *inode, strint pty_master, tty_closing, o_tty_closing, do_sleep;int idx;char buf[64 ]; +long timeout =0 ;if (tty_paranoia_check (tty, inode, __func__))return 0 ;
@@ -1785,7 +1786,11 @@ int tty_release(struct inode *inode, str __func__, tty_name(tty, buf));tty_unlock_pair (tty, o_tty);mutex_unlock (&tty_mutex); -schedule (); +schedule_timeout_killable (timeout); +if (timeout <120 *HZ ) + timeout =2 * timeout +1 ; +else + timeout =MAX_SCHEDULE_TIMEOUT ; }/*
Greg Kroah-Hartman
maintainerPATCH 180/203 PM / Sleep: fix recovery during resuming from hibernation
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Imre Deak <[email protected]>
commit 94fb823fcb4892614f57e59601bb9d4920f24711 upstream.
If a device's dev_pm_ops::freeze callback fails during the QUIESCE phase, we don't rollback things correctly calling the thaw and complete callbacks. This could leave some devices in a suspended state in case of an error during resuming from hibernation.
--- kernel/power/hibernate.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
kernel/power/hibernate.c +7 -1
@@ -492,8 +492,14 @@ int hibernation_restore(int platform_mod error =dpm_suspend_start (PMSG_QUIESCE );if (!error) { error =resume_target_kernel (platform_mode); -dpm_resume_end (PMSG_RECOVER ); +/* +* The above should either succeed and jump to the new kernel, +* or return with an error. Otherwise things are just +* undefined, so let's be paranoid. +*/ +BUG_ON (!error); } +dpm_resume_end (PMSG_RECOVER );pm_restore_gfp_mask ();ftrace_start ();resume_console ();
Greg Kroah-Hartman
maintainerPATCH 181/203 mac80211: fix typo in starting baserate for rts_cts_rate_idx
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Karl Beldan <[email protected]>
commit c7abf25af0f41be4b50d44c5b185d52eea360cb8 upstream.
It affects non-(V)HT rates and can lead to selecting an rts_cts rate that is not a basic rate or way superior to the reference rate (ATM rates[0] used for the 1st attempt of the protected frame data).
E.g, assuming drivers register growing (bitrate) sorted tables of ieee80211_rate-s, having :
- rates[0].idx == d'2 and basic_rates == b'10100
will select rts_cts idx b'10011 & ~d'(BIT(2)-1), i.e. 1, likewise
- rates[0].idx == d'2 and basic_rates == b'10001
will select rts_cts idx b'10000
The first is not a basic rate and the second is > rates[0].
Also, wrt severity of the addressed misbehavior, ATM we only have one rts_cts_rate_idx rather than one per rate table entry, so this idx might still point to bitrates > rates[1..MAX_RATES].
--- net/mac80211/rate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/mac80211/rate.c +1 -1
@@ -462,7 +462,7 @@ static void rate_fixup_ratelist(struct i*/ if (!(rates[0 ].flags &IEEE80211_TX_RC_MCS )) {u32 basic_rates = vif->bss_conf.basic_rates; -s8 baserate = basic_rates ?ffs (basic_rates -1 ) :0 ; +s8 baserate = basic_rates ?ffs (basic_rates) -1 :0 ; rate = &sband->bitrates[rates[0 ].idx];
Greg Kroah-Hartman
maintainerPATCH 182/203 posix-timers: Fix stack info leak in timer_create()
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mathias Krause <[email protected]>
commit 6891c4509c792209c44ced55a60f13954cb50ef4 upstream.
If userland creates a timer without specifying a sigevent info, we'll create one ourself, using a stack local variable. Particularly will we use the timer ID as sival_int. But as sigev_value is a union containing a pointer and an int, that assignment will only partially initialize sigev_value on systems where the size of a pointer is bigger than the size of an int. On such systems we'll copy the uninitialized stack bytes from the timer_create() call to userland when the timer actually fires and we're going to deliver the signal.
Initialize sigev_value with 0 to plug the stack info leak.
Found in the PaX patch, written by the PaX Team.
--- kernel/posix-timers.c | 1 + 1 file changed, 1 insertion(+)
kernel/posix-timers.c +1 -0
@@ -634,6 +634,7 @@ SYSCALL_DEFINE3(timer_create, const cloc goto out; } }else { +memset (&event.sigev_value,0 ,sizeof (event.sigev_value)); event.sigev_notify =SIGEV_SIGNAL ; event.sigev_signo =SIGALRM ; event.sigev_value.sival_int = new_timer->it_id;
Greg Kroah-Hartman
maintainerPATCH 183/203 x86, apic: Handle a bad TSC more gracefully
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Lutomirski <[email protected]>
commit b47dcbdc5161d3d5756f430191e2840d9b855492 upstream.
If the TSC is unusable or disabled, then this patch fixes:
- Confusion while trying to clear old APIC interrupts.
- Division by zero and incorrect programming of the TSC deadline timer.
This fixes boot if the CPU has a TSC deadline timer but a missing or broken TSC. The failure to boot can be observed with qemu using -cpu qemu64,-tsc,+tsc-deadline
This also happens to me in nested KVM for unknown reasons. With this patch, I can boot cleanly (although without a TSC).
--- arch/x86/kernel/apic/apic.c | 4 ++-- arch/x86/kernel/tsc.c | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-)
arch/x86/kernel/apic/apic.c +2 -2
@@ -1290,7 +1290,7 @@ void setup_local_APIC(void)unsigned int value, queued;int i, j, acked =0 ;unsigned long long tsc =0 , ntsc; -long long max_loops = cpu_khz; +long long max_loops = cpu_khz ? cpu_khz :1000000 ;if (cpu_has_tsc)rdtscll (tsc);
@@ -1387,7 +1387,7 @@ void setup_local_APIC(void)break ; }if (queued) { -if (cpu_has_tsc) { +if (cpu_has_tsc && cpu_khz) {rdtscll (ntsc); max_loops = (cpu_khz <<10 ) - (ntsc - tsc); }else
arch/x86/kernel/tsc.c +4 -1
@@ -1173,14 +1173,17 @@ void __init tsc_init(void) x86_init.timers.tsc_pre_init (); -if (!cpu_has_tsc) +if (!cpu_has_tsc) { +setup_clear_cpu_cap (X86_FEATURE_TSC_DEADLINE_TIMER );return ; + } tsc_khz = x86_platform.calibrate_tsc (); cpu_khz = tsc_khz;if (!tsc_khz) {mark_tsc_unstable ("could not calculate TSC khz" ); +setup_clear_cpu_cap (X86_FEATURE_TSC_DEADLINE_TIMER );return ; }
Greg Kroah-Hartman
maintainerPATCH 184/203 mm: Remove false WARN_ON from pagecache_isize_extended()
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
commit f55fefd1a5a339b1bd08c120b93312d6eb64a9fb upstream.
The WARN_ON checking whether i_mutex is held in pagecache_isize_extended() was wrong because some filesystems (e.g. XFS) use different locks for serialization of truncates / writes. So just remove the check.
--- mm/truncate.c | 1 - 1 file changed, 1 deletion(-)
mm/truncate.c +0 -1
@@ -649,7 +649,6 @@ void pagecache_isize_extended(struct inostruct page *page;pgoff_t index; -WARN_ON (!mutex_is_locked (&inode->i_mutex));WARN_ON (to > inode->i_size);if (from >= to || bsize ==PAGE_CACHE_SIZE )
Greg Kroah-Hartman
maintainerPATCH 185/203 crypto: algif - avoid excessive use of socket buffer in skcipher
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ondrej Kozina <[email protected]>
commit e2cffb5f493a8b431dc87124388ea59b79f0bccb upstream.
On archs with PAGE_SIZE >= 64 KiB the function skcipher_alloc_sgl() fails with -ENOMEM no matter what user space actually requested. This is caused by the fact sock_kmalloc call inside the function tried to allocate more memory than allowed by the default kernel socket buffer size (kernel param net.core.optmem_max).
--- crypto/algif_skcipher.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
crypto/algif_skcipher.c +1 -1
@@ -49,7 +49,7 @@ struct skcipher_ctx {struct ablkcipher_request req; }; -#define MAX_SGL_ENTS ((PAGE_SIZE - sizeof(struct skcipher_sg_list)) / \ +#define MAX_SGL_ENTS ((4096 - sizeof(struct skcipher_sg_list)) / \ sizeof(struct scatterlist) - 1)static inline int skcipher_sndbuf (struct sock *sk)
Greg Kroah-Hartman
maintainerPATCH 186/203 usb: dwc3: gadget: fix set_halt() bug with pending transfers
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Felipe Balbi <[email protected]>
[ Upstream commit 7a60855972f0d3c014093046cb6f013a1ee5bb19 ]
According to our Gadget Framework API documentation, ->set_halt() *must* return -EAGAIN if we have pending transfers (on either direction) or FIFO isn't empty (on TX endpoints).
Fix this bug so that the mass storage gadget can be used without stall=0 parameter.
This patch should be backported to all kernels since v3.2.
--- drivers/usb/dwc3/ep0.c | 4 ++-- drivers/usb/dwc3/gadget.c | 16 ++++++++++++---- drivers/usb/dwc3/gadget.h | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-)
drivers/usb/dwc3/ep0.c +2 -2
@@ -251,7 +251,7 @@ static void dwc3_ep0_stall_and_restart(s/* stall is always issued on EP0 */ dep = dwc->eps[0 ]; -__dwc3_gadget_ep_set_halt (dep,1 ); +__dwc3_gadget_ep_set_halt (dep,1 , false); dep->flags =DWC3_EP_ENABLED ; dwc->delayed_status = false;
@@ -461,7 +461,7 @@ static int dwc3_ep0_handle_feature(strucreturn -EINVAL ;if (set ==0 && (dep->flags &DWC3_EP_WEDGE ))break ; - ret =__dwc3_gadget_ep_set_halt (dep, set); + ret =__dwc3_gadget_ep_set_halt (dep, set, true);if (ret)return -EINVAL ;break ;
drivers/usb/dwc3/gadget.c +12 -4
@@ -587,7 +587,7 @@ static int __dwc3_gadget_ep_disable(stru/* make sure HW endpoint isn't stalled */ if (dep->flags &DWC3_EP_STALL ) -__dwc3_gadget_ep_set_halt (dep,0 ); +__dwc3_gadget_ep_set_halt (dep,0 , false); reg =dwc3_readl (dwc->regs,DWC3_DALEPENA ); reg &= ~DWC3_DALEPENA_EP (dep->number);
@@ -1185,7 +1185,7 @@ out0:return ret; } -int __dwc3_gadget_ep_set_halt (struct dwc3_ep *dep,int value) +int __dwc3_gadget_ep_set_halt (struct dwc3_ep *dep,int value,int protocol) {struct dwc3_gadget_ep_cmd_params params;struct dwc3 *dwc = dep->dwc;
@@ -1194,6 +1194,14 @@ int __dwc3_gadget_ep_set_halt(struct dwcmemset (¶ms,0x00 ,sizeof (params));if (value) { +if (!protocol && ((dep->direction && dep->flags &DWC3_EP_BUSY ) || + (!list_empty (&dep->req_queued) || + !list_empty (&dep->request_list)))) { +dev_dbg (dwc->dev,"%s: pending request, cannot halt\n" , + dep->name); +return -EAGAIN ; + } + ret =dwc3_send_gadget_ep_cmd (dwc, dep->number,DWC3_DEPCMD_SETSTALL , ¶ms);if (ret)
@@ -1233,7 +1241,7 @@ static int dwc3_gadget_ep_set_halt(struc goto out; } - ret =__dwc3_gadget_ep_set_halt (dep, value); + ret =__dwc3_gadget_ep_set_halt (dep, value, false); out:spin_unlock_irqrestore (&dwc->lock, flags);
@@ -1253,7 +1261,7 @@ static int dwc3_gadget_ep_set_wedge(struif (dep->number ==0 || dep->number ==1 )return dwc3_gadget_ep0_set_halt (ep,1 );else -return dwc3_gadget_ep_set_halt (ep,1 ); +return __dwc3_gadget_ep_set_halt (dep,1 , false); }/* -------------------------------------------------------------------------- */
drivers/usb/dwc3/gadget.h +1 -1
@@ -85,7 +85,7 @@ void dwc3_ep0_out_start(struct dwc3 *dwcint dwc3_gadget_ep0_set_halt (struct usb_ep *ep,int value);int dwc3_gadget_ep0_queue (struct usb_ep *ep,struct usb_request *request,gfp_t gfp_flags); -int __dwc3_gadget_ep_set_halt (struct dwc3_ep *dep,int value); +int __dwc3_gadget_ep_set_halt (struct dwc3_ep *dep,int value,int protocol);/** * dwc3_gadget_ep_get_transfer_index - Gets transfer index from HW
Greg Kroah-Hartman
maintainerPATCH 187/203 usb: gadget: function: acm: make f_acm pass USB20CV Chapter9
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Felipe Balbi <[email protected]>
[ Upstream commit 52ec49a5e56a27c5b6f8217708783eff39f24c16 ]
During Halt Endpoint Test, our interrupt endpoint will be disabled, which will clear out ep->desc to NULL. Unless we call config_ep_by_speed() again, we will not be able to enable this endpoint which will make us fail that test.
inside the struct usb_ep on disable)
--- drivers/usb/gadget/f_acm.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/usb/gadget/f_acm.c +4 -3
@@ -430,11 +430,12 @@ static int acm_set_alt(struct usb_functiif (acm->notify->driver_data) {VDBG (cdev,"reset acm control interface %d\n" , intf);usb_ep_disable (acm->notify); - }else { -VDBG (cdev,"init acm ctrl interface %d\n" , intf); + } + +if (!acm->notify->desc)if (config_ep_by_speed (cdev->gadget, f, acm->notify))return -EINVAL ; - } +usb_ep_enable (acm->notify); acm->notify->driver_data = acm;
Greg Kroah-Hartman
maintainerPATCH 188/203 usb: gadget: udc: core: fix kernel oops with soft-connect
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Felipe Balbi <[email protected]>
[ Upstream commit bfa6b18c680450c17512c741ed1d818695747621 ]
Currently, there's no guarantee that udc->driver will be valid when using soft_connect sysfs interface. In fact, we can very easily trigger a NULL pointer dereference by trying to disconnect when a gadget driver isn't loaded.
Fix this bug:
~# echo disconnect > soft_connect
[ 33.685743] Unable to handle kernel NULL pointer dereference at virtual address 00000014 [ 33.694221] pgd = ed0cc000 [ 33.697174] [00000014] *pgd=ae351831, *pte=00000000, *ppte=00000000 [ 33.703766] Internal error: Oops: 17 [#1] SMP ARM [ 33.708697] Modules linked in: xhci_plat_hcd xhci_hcd snd_soc_davinci_mcasp snd_soc_tlv320aic3x snd_soc_edma snd_soc_omap snd_soc_evm snd_soc_core dwc3 snd_compress snd_pcm_dmaengine snd_pcm snd_timer snd lis3lv02d_i2c matrix_keypad lis3lv02d dwc3_omap input_polldev soundcore [ 33.734372] CPU: 0 PID: 1457 Comm: bash Not tainted 3.17.0-09740-ga93416e-dirty #345 [ 33.742457] task: ee71ce00 ti: ee68a000 task.ti: ee68a000 [ 33.748116] PC is at usb_udc_softconn_store+0xa4/0xec [ 33.753416] LR is at mark_held_locks+0x78/0x90 [ 33.758057] pc : [<c04df128>] lr : [<c00896a4>] psr: 20000013 [ 33.758057] sp : ee68bec8 ip : c0c00008 fp : ee68bee4 [ 33.770050] r10: ee6b394c r9 : ee68bf80 r8 : ee6062c0 [ 33.775508] r7 : 00000000 r6 : ee6062c0 r5 : 0000000b r4 : ee739408 [ 33.782346] r3 : 00000000 r2 : 00000000 r1 : ee71d390 r0 : ee664170 [ 33.789168] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user [ 33.796636] Control: 10c5387d Table: ad0cc059 DAC: 00000015 [ 33.802638] Process bash (pid: 1457, stack limit = 0xee68a248) [ 33.808740] Stack: (0xee68bec8 to 0xee68c000) [ 33.813299] bec0: 0000000b c0411284 ee6062c0 00000000 ee68bef4 ee68bee8 [ 33.821862] bee0: c04112ac c04df090 ee68bf14 ee68bef8 c01c2868 c0411290 0000000b ee6b3940 [ 33.830419] bf00: 00000000 00000000 ee68bf4c ee68bf18 c01c1a24 c01c2818 00000000 00000000 [ 33.838990] bf20: ee61b940 ee2f47c0 0000000b 000ce408 ee68bf80 c000f304 ee68a000 00000000 [ 33.847544] bf40: ee68bf7c ee68bf50 c0152dd8 c01c1960 ee68bf7c c0170af8 ee68bf7c ee2f47c0 [ 33.856099] bf60: ee2f47c0 000ce408 0000000b c000f304 ee68bfa4 ee68bf80 c0153330 c0152d34 [ 33.864653] bf80: 00000000 00000000 0000000b 000ce408 b6e7fb50 00000004 00000000 ee68bfa8 [ 33.873204] bfa0: c000f080 c01532e8 0000000b 000ce408 00000001 000ce408 0000000b 00000000 [ 33.881763] bfc0: 0000000b 000ce408 b6e7fb50 00000004 0000000b 00000000 000c5758 00000000 [ 33.890319] bfe0: 00000000 bec2c924 b6de422d b6e1d226 40000030 00000001 75716d2f 00657565 [ 33.898890] [<c04df128>] (usb_udc_softconn_store) from [<c04112ac>] (dev_attr_store+0x28/0x34) [ 33.907920] [<c04112ac>] (dev_attr_store) from [<c01c2868>] (sysfs_kf_write+0x5c/0x60) [ 33.916200] [<c01c2868>] (sysfs_kf_write) from [<c01c1a24>] (kernfs_fop_write+0xd0/0x194) [ 33.924773] [<c01c1a24>] (kernfs_fop_write) from [<c0152dd8>] (vfs_write+0xb0/0x1bc) [ 33.932874] [<c0152dd8>] (vfs_write) from [<c0153330>] (SyS_write+0x54/0xb0) [ 33.940247] [<c0153330>] (SyS_write) from [<c000f080>] (ret_fast_syscall+0x0/0x48) [ 33.948160] Code: e1a01007 e12fff33 e5140004 e5143008 (e5933014) [ 33.954625] ---[ end trace f849bead94eab7ea ]---
--- drivers/usb/gadget/udc-core.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/usb/gadget/udc-core.c +5 -0
@@ -456,6 +456,11 @@ static ssize_t usb_udc_softconn_store(st { struct usb_udc *udc = container_of(dev, struct usb_udc, dev); +if (!udc->driver) { +dev_err (dev,"soft-connect without a gadget driver\n" ); +return -EOPNOTSUPP ; + } +if (sysfs_streq (buf,"connect" )) {usb_gadget_udc_start (udc->gadget, udc->driver);usb_gadget_connect (udc->gadget);
Greg Kroah-Hartman
maintainerPATCH v2 189/203 usb: gadget: f_fs: remove redundant ffs_data_get()
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Robert Baldyga <[email protected]>
[ Upstream commit a3058a5d82e296daaca07411c3738a9ddd79f302 ]
During FunctionFS bind, ffs_data_get() function was called twice (in functionfs_bind() and in ffs_do_functionfs_bind()), while on unbind ffs_data_put() was called once (in functionfs_unbind() function). In result refcount never reached value 0, and ffs memory resources has been never released.
Since ffs_data_get() call in ffs_do_functionfs_bind() is redundant and not neccessary, we remove it to have equal number of gets ans puts, and free allocated memory after refcount reach 0.
interface with backward compatibility)
--- drivers/usb/gadget/f_fs.c | 2 -- 1 file changed, 2 deletions(-)
drivers/usb/gadget/f_fs.c +0 -2
@@ -1995,8 +1995,6 @@ static inline struct f_fs_opts *ffs_do_functionfs_bind(struct usb_function *f, func->conf = c; func->gadget = c->cdev->gadget; -ffs_data_get (func->ffs); -/* * in drivers/usb/gadget/configfs.c:configfs_composite_bind() * configurations are bound in sequence with list_for_each_entry,
Signature · 6 lines
2.1.0.GIT -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Greg Kroah-Hartman
maintainerPATCH 190/203 sched: Use rq->rd in sched_setaffinity() under RCU read lock
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kirill Tkhai <[email protected]>
commit f1e3a0932f3a9554371792a7daaf1e0eb19f66d5 upstream.
Probability of use-after-free isn't zero in this place.
--- kernel/sched/core.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
kernel/sched/core.c +5 -4
@@ -3941,13 +3941,14 @@ long sched_setaffinity(pid_t pid, const* root_domain. */ #ifdef CONFIG_SMP -if (task_has_dl_policy (p)) { -const struct cpumask *span =task_rq (p)->rd->span; - -if (dl_bandwidth_enabled () && !cpumask_subset (span, new_mask)) { +if (task_has_dl_policy (p) &&dl_bandwidth_enabled ()) { +rcu_read_lock (); +if (!cpumask_subset (task_rq (p)->rd->span, new_mask)) { retval = -EBUSY ; +rcu_read_unlock (); goto out_unlock; } +rcu_read_unlock (); }#endif again:
Greg Kroah-Hartman
maintainerPATCH 191/203 drm/vmwgfx: Filter out modes those cannot be supported by the current VRAM size.
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sinclair Yeh <[email protected]>
commit 9a72384d86b26cb8a2b25106677e1197f606668f upstream.
When screen objects are enabled, the bpp is assumed to be 32, otherwise it is set to 16.
v2:
* Use u32 instead of u64 for assumed_bpp.
* Fixed mechanism to check for screen objects
* Limit the back buffer size to VRAM.
--- drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 6 +++++- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-)
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +5 -1
@@ -688,7 +688,11 @@ static int vmw_driver_load(struct drm_de goto out_err0; } -if (unlikely (dev_priv->prim_bb_mem < dev_priv->vram_size)) +/* +* Limit back buffer size to VRAM size. Remove this once +* screen targets are implemented. +*/ +if (dev_priv->prim_bb_mem > dev_priv->vram_size) dev_priv->prim_bb_mem = dev_priv->vram_size;mutex_unlock (&dev_priv->hw_mutex);
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +13 -3
@@ -1954,6 +1954,14 @@ int vmw_du_connector_fill_modes(struct d DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) };int i; +u32 assumed_bpp =2 ; + +/* +* If using screen objects, then assume 32-bpp because that's what the +* SVGA device is assuming +*/ +if (dev_priv->sou_priv) + assumed_bpp =4 ;/* Add preferred mode */ {
@@ -1964,8 +1972,9 @@ int vmw_du_connector_fill_modes(struct d mode->vdisplay = du->pref_height;vmw_guess_mode_timing (mode); -if (vmw_kms_validate_mode_vram (dev_priv, mode->hdisplay *2 , - mode->vdisplay)) { +if (vmw_kms_validate_mode_vram (dev_priv, + mode->hdisplay * assumed_bpp, + mode->vdisplay)) {drm_mode_probed_add (connector, mode); }else {drm_mode_destroy (dev, mode);
@@ -1987,7 +1996,8 @@ int vmw_du_connector_fill_modes(struct d bmode->vdisplay > max_height)continue ; -if (!vmw_kms_validate_mode_vram (dev_priv, bmode->hdisplay *2 , +if (!vmw_kms_validate_mode_vram (dev_priv, + bmode->hdisplay * assumed_bpp, bmode->vdisplay))continue ;
Greg Kroah-Hartman
maintainerPATCH 192/203 drm/radeon/dpm: disable ulv support on SI
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit 6fa455935ab956248b165f150ec6ae9106210077 upstream.
Causes problems on some boards.
bug:
https://bugs.freedesktop.org/show_bug.cgi?id=82889
--- drivers/gpu/drm/radeon/si_dpm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/radeon/si_dpm.c +1 -1
@@ -6200,7 +6200,7 @@ static void si_parse_pplib_clock_info(stif ((rps->class2 &ATOM_PPLIB_CLASSIFICATION2_ULV ) && index ==0 ) {/* XXX disable for A0 tahiti */ - si_pi->ulv.supported = true; + si_pi->ulv.supported = false; si_pi->ulv.pl = *pl; si_pi->ulv.one_pcie_lane_in_ulv = false; si_pi->ulv.volt_change_delay =SISLANDS_ULVVOLTAGECHANGEDELAY_DFLT ;
Greg Kroah-Hartman
maintainerPATCH 193/203 drm/radeon: remove invalid pci id
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit 8c3e434769b1707fd2d24de5a2eb25fedc634c4a upstream.
0x4c6e is a secondary device id so should not be used by the driver.
--- include/drm/drm_pciids.h | 1 - 1 file changed, 1 deletion(-)
include/drm/drm_pciids.h +0 -1
@@ -74,7 +74,6 @@ {0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ {0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ {0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV250|RADEON_IS_MOBILITY}, \ - {0x1002, 0x4C6E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV280|RADEON_IS_MOBILITY}, \ {0x1002, 0x4E44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ {0x1002, 0x4E45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \ {0x1002, 0x4E46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R300}, \
Greg Kroah-Hartman
maintainerPATCH 194/203 rbd: Fix error recovery in rbd_obj_read_sync()
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
commit a8d4205623ae965e36c68629db306ca0695a2771 upstream.
When we fail to allocate page vector in rbd_obj_read_sync() we just basically ignore the problem and continue which will result in an oops later. Fix the problem by returning proper error.
CC: Yehuda Sadeh <[email protected]>
CC: Sage Weil <[email protected]>
CC: [email protected]
Coverity-id: 1226882
--- drivers/block/rbd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/block/rbd.c +1 -1
@@ -3217,7 +3217,7 @@ static int rbd_obj_read_sync(struct rbd_ page_count = (u32 )calc_pages_for (offset, length); pages =ceph_alloc_page_vector (page_count,GFP_KERNEL );if (IS_ERR (pages)) - ret =PTR_ERR (pages); +return PTR_ERR (pages); ret = -ENOMEM ; obj_request = rbd_obj_request_create(object_name, offset, length,
Greg Kroah-Hartman
maintainerPATCH 195/203 acer-wmi: Add acpi_backlight=video quirk for the Acer KAV80
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
commit 183fd8fcd7f8afb7ac5ec68f83194872f9fecc84 upstream.
The acpi-video backlight interface on the Acer KAV80 is broken, and worse it causes the entire machine to slow down significantly after a suspend/resume.
Blacklist it, and use the acer-wmi backlight interface instead. Note that the KAV80 is somewhat unique in that it is the only Acer model where we fall back to acer-wmi after blacklisting, rather then using the native (e.g. intel) backlight driver. This is done because there is no native backlight interface on this model.
--- drivers/platform/x86/acer-wmi.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
drivers/platform/x86/acer-wmi.c +11 -0
@@ -570,6 +570,17 @@ static const struct dmi_system_id video_ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5750"), }, }, + { + /* + * Note no video_set_backlight_video_vendor, we must use the + * acer interface, as there is no native backlight interface. + */ + .ident = "Acer KAV80", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), + DMI_MATCH(DMI_PRODUCT_NAME, "KAV80"), + }, + }, {} };
Greg Kroah-Hartman
maintainerPATCH 196/203 pinctrl: baytrail: show output gpio state correctly on Intel Baytrail
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Cohen <[email protected]>
commit d90c33818967c5e5371961604ad98b4dea4fa3f4 upstream.
Even if a gpio pin is set to output, we still need to set INPUT_EN functionality (by clearing INPUT_EN bit) to be able to read the pin's level.
E.g. without this change, we'll always read low level state from sysfs.
--- drivers/pinctrl/pinctrl-baytrail.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/pinctrl/pinctrl-baytrail.c +1 -1
@@ -263,7 +263,7 @@ static int byt_gpio_direction_output(strspin_lock_irqsave (&vg->lock, flags); reg_val =readl (reg) |BYT_DIR_MASK ; - reg_val &= ~BYT_OUTPUT_EN ; + reg_val &= ~(BYT_OUTPUT_EN |BYT_INPUT_EN );if (value)writel (reg_val |BYT_LEVEL , reg);
Greg Kroah-Hartman
maintainerPATCH 197/203 powerpc: use device_online/offline() instead of cpu_up/down()
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Streetman <[email protected]>
commit 10ccaf178b2b961d8bca252d647ed7ed8aae2a20 upstream.
In powerpc pseries platform dlpar operations, use device_online() and device_offline() instead of cpu_up() and cpu_down().
Calling cpu_up/down() directly does not update the cpu device offline field, which is used to online/offline a cpu from sysfs. Calling device_online/offline() instead keeps the sysfs cpu online value correct. The hotplug lock, which is required to be held when calling device_online/offline(), is already held when dlpar_online/offline_cpu() are called, since they are called only from cpu_probe|release_store().
This patch fixes errors on phyp (PowerVM) systems that have cpu(s) added/removed using dlpar operations; without this patch, the /sys/devices/system/cpu/cpuN/online nodes do not correctly show the online state of added/removed cpus.
--- arch/powerpc/platforms/pseries/dlpar.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/powerpc/platforms/pseries/dlpar.c +2 -2
@@ -380,7 +380,7 @@ static int dlpar_online_cpu(struct devicBUG_ON (get_cpu_current_state (cpu) !=CPU_STATE_OFFLINE );cpu_maps_update_done (); - rc =cpu_up (cpu); + rc =device_online (get_cpu_device (cpu));if (rc) goto out;cpu_maps_update_begin ();
@@ -463,7 +463,7 @@ static int dlpar_offline_cpu(struct deviif (get_cpu_current_state (cpu) ==CPU_STATE_ONLINE ) {set_preferred_offline_state (cpu,CPU_STATE_OFFLINE );cpu_maps_update_done (); - rc =cpu_down (cpu); + rc =device_offline (get_cpu_device (cpu));if (rc) goto out;cpu_maps_update_begin ();
Greg Kroah-Hartman
maintainerPATCH 198/203 regulator: max77693: Fix use of uninitialized regulator config
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Kozlowski <[email protected]>
commit ca0c37a0b489bb14bf3e1549e7a8d0c9a17f4919 upstream.
Driver allocated on stack struct regulator_config but didn't initialize it fully. Few fields (driver_data, ena_gpio) were left untouched. This lead to using random ena_gpio values as GPIOs for max77693 regulators.
On occasion these values could match real GPIO numbers leading to interfering with other drivers and to unsuccessful enable/disable of regulator.
--- drivers/regulator/max77693.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/regulator/max77693.c +1 -1
@@ -232,7 +232,7 @@ static int max77693_pmic_probe(struct plstruct max77693_pmic_dev *max77693_pmic;struct max77693_regulator_data *rdata =NULL ;int num_rdata, i; -struct regulator_config config; +struct regulator_config config = { }; num_rdata =max77693_pmic_init_rdata (&pdev->dev, &rdata);if (!rdata || num_rdata <=0 ) {
Greg Kroah-Hartman
maintainerPATCH 199/203 i2c: at91: dont account as iowait
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wolfram Sang <[email protected]>
commit 11cfbfb098b22d3e57f1f2be217cad20e2d48463 upstream.
iowait is for blkio [1]. I2C shouldn't use it.
[1] https://lkml.org/lkml/2014/11/3/317
--- drivers/i2c/busses/i2c-at91.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/i2c/busses/i2c-at91.c +1 -1
@@ -434,7 +434,7 @@ static int at91_do_twi_transfer(struct a } } - ret =wait_for_completion_io_timeout (&dev->cmd_complete, + ret =wait_for_completion_timeout (&dev->cmd_complete, dev->adapter.timeout);if (ret ==0 ) {dev_err (dev->dev,"controller timed out\n" );
Greg Kroah-Hartman
maintainerPATCH 200/203 sysfs: driver core: Fix glue dir race condition by gdp_mutex
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yijing Wang <[email protected]>
commit e4a60d139060975eb956717e4f63ae348d4d8cc5 upstream.
There is a race condition when removing glue directory. It can be reproduced in following test:
path 1: Add first child devicedevice_add()
get_device_parent()
/*find parent from glue_dirs.list*/
list_for_each_entry(k, &dev->class->p->glue_dirs.list, entry)
if (k->parent == parent_kobj) {
kobj = kobject_get(k);
break;
}
....
class_dir_create_and_add()path2: Remove last child device under glue dir device_del()
cleanup_device_parent()
cleanup_glue_dir()
kobject_put(glue_dir);If path2 has been called cleanup_glue_dir(), but not call kobject_put(glue_dir), the glue dir is still in parent's kset list. Meanwhile, path1 find the glue dir from the glue_dirs.list. Path2 may release glue dir before path1 call kobject_get(). So kernel will report the warning and bug_on.
This is a "classic" problem we have of a kref in a list that can be found while the last instance could be removed at the same time.
This patch reuse gdp_mutex to fix this race condition.
The following calltrace is captured in kernel 3.4, but the latest kernel still has this bug.
-----------------------------------------------------
<4>[ 3965.441471] WARNING: at ...include/linux/kref.h:41 kobject_get+0x33/0x40() <4>[ 3965.441474] Hardware name: Romley <4>[ 3965.441475] Modules linked in: isd_iop(O) isd_xda(O)... ... <4>[ 3965.441605] Call Trace: <4>[ 3965.441611] [<ffffffff8103717a>] warn_slowpath_common+0x7a/0xb0 <4>[ 3965.441615] [<ffffffff810371c5>] warn_slowpath_null+0x15/0x20 <4>[ 3965.441618] [<ffffffff81215963>] kobject_get+0x33/0x40 <4>[ 3965.441624] [<ffffffff812d1e45>] get_device_parent.isra.11+0x135/0x1f0 <4>[ 3965.441627] [<ffffffff812d22d4>] device_add+0xd4/0x6d0 <4>[ 3965.441631] [<ffffffff812d0dbc>] ? dev_set_name+0x3c/0x40 .... <2>[ 3965.441912] kernel BUG at ..../fs/sysfs/group.c:65! <4>[ 3965.441915] invalid opcode: 0000 [#1] SMP ... <4>[ 3965.686743] [<ffffffff811a677e>] sysfs_create_group+0xe/0x10 <4>[ 3965.686748] [<ffffffff810cfb04>] blk_trace_init_sysfs+0x14/0x20 <4>[ 3965.686753] [<ffffffff811fcabb>] blk_register_queue+0x3b/0x120 <4>[ 3965.686756] [<ffffffff812030bc>] add_disk+0x1cc/0x490
....
-------------------------------------------------------
--- drivers/base/core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/base/core.c +3 -1
@@ -741,12 +741,12 @@ class_dir_create_and_add(struct class *creturn &dir->kobj; } +static DEFINE_MUTEX (gdp_mutex);static struct kobject *get_device_parent (struct device *dev,struct device *parent) {if (dev->class) { -static DEFINE_MUTEX (gdp_mutex);struct kobject *kobj =NULL ;struct kobject *parent_kobj;struct kobject *k;
@@ -810,7 +810,9 @@ static void cleanup_glue_dir(struct devi glue_dir->kset != &dev->class->p->glue_dirs) return; +mutex_lock (&gdp_mutex);kobject_put (glue_dir); +mutex_unlock (&gdp_mutex); }static void cleanup_device_parent (struct device *dev)
Greg Kroah-Hartman
maintainerPATCH 201/203 of: Fix overflow bug in string property parsing functions
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Grant Likely <[email protected]>
commit a87fa1d81a9fb5e9adca9820e16008c40ad09f33 upstream.
The string property read helpers will run off the end of the buffer if it is handed a malformed string property. Rework the parsers to make sure that doesn't happen. At the same time add new test cases to make sure the functions behave themselves.
The original implementations of of_property_read_string_index() and of_property_count_strings() both open-coded the same block of parsing code, each with it's own subtly different bugs. The fix here merges functions into a single helper and makes the original functions static inline wrappers around the helper.
One non-bugfix aspect of this patch is the addition of a new wrapper, of_property_read_string_array(). The new wrapper is needed by the device_properties feature that Rafael is working on and planning to merge for v3.19. The implementation is identical both with and without the new static inline wrapper, so it just got left in to reduce the churn on the header file.
--- drivers/of/base.c | 88 +++++++--------------------- drivers/of/selftest.c | 64 ++++++++++++++++++-- drivers/of/testcase-data/tests-phandle.dtsi | 2 include/linux/of.h | 84 ++++++++++++++++++++++---- 4 files changed, 153 insertions(+), 85 deletions(-)
drivers/of/base.c +22 -66
@@ -1117,52 +1117,6 @@ int of_property_read_string(struct devicEXPORT_SYMBOL_GPL (of_property_read_string);/** -* of_property_read_string_index - Find and read a string from a multiple -* strings property. -* @np: device node from which the property value is to be read. -* @propname: name of the property to be searched. -* @index: index of the string in the list of strings -* @out_string: pointer to null terminated return string, modified only if -* return value is 0. -* -* Search for a property in a device tree node and retrieve a null -* terminated string value (pointer to data, not a copy) in the list of strings -* contained in that property. -* Returns 0 on success, -EINVAL if the property does not exist, -ENODATA if -* property does not have a value, and -EILSEQ if the string is not -* null-terminated within the length of the property data. -* -* The out_string pointer is modified only if a valid string can be decoded. -*/ -int of_property_read_string_index (struct device_node *np,const char *propname, -int index,const char **output) -{ -struct property *prop =of_find_property (np, propname,NULL ); -int i =0 ; -size_t l =0 , total =0 ; -const char *p; - -if (!prop) -return -EINVAL ; -if (!prop->value) -return -ENODATA ; -if (strnlen (prop->value, prop->length) >= prop->length) -return -EILSEQ ; - - p = prop->value; - -for (i =0 ; total < prop->length; total += l, p += l) { - l =strlen (p) +1 ; -if (i++ == index) { - *output = p; -return 0 ; - } - } -return -ENODATA ; -} -EXPORT_SYMBOL_GPL (of_property_read_string_index); - -/** * of_property_match_string() - Find string in a list and return index * @np: pointer to node containing string list property * @propname: string list property name
@@ -1188,7 +1142,7 @@ int of_property_match_string(struct devi end = p + prop->length;for (i =0 ; p < end; i++, p += l) { - l =strlen (p) +1 ; + l =strnlen (p, end - p) +1 ;if (p + l > end)return -EILSEQ ;pr_debug ("comparing %s with %s\n" , string, p);
@@ -1200,39 +1154,41 @@ int of_property_match_string(struct deviEXPORT_SYMBOL_GPL (of_property_match_string);/** -* of_property_count_strings - Find and return the number of strings from a -* multiple strings property. +* of_property_read_string_util() - Utility helper for parsing string properties * @np: device node from which the property value is to be read. * @propname: name of the property to be searched. +* @out_strs: output array of string pointers. +* @sz: number of array elements to read. +* @skip: Number of strings to skip over at beginning of list. * -* Search for a property in a device tree node and retrieve the number of null -* terminated string contain in it. Returns the number of strings on -* success, -EINVAL if the property does not exist, -ENODATA if property -* does not have a value, and -EILSEQ if the string is not null-terminated -* within the length of the property data. +* Don't call this function directly. It is a utility helper for the +* of_property_read_string*() family of functions. */ -int of_property_count_strings (struct device_node *np,const char *propname) +int of_property_read_string_helper (struct device_node *np,const char *propname, +const char **out_strs,size_t sz,int skip) {struct property *prop =of_find_property (np, propname,NULL ); -int i =0 ; -size_t l =0 , total =0 ; -const char *p; +int l =0 , i =0 ; +const char *p, *end;if (!prop)return -EINVAL ;if (!prop->value)return -ENODATA ; -if (strnlen (prop->value, prop->length) >= prop->length) -return -EILSEQ ; - p = prop->value; + end = p + prop->length; -for (i =0 ; total < prop->length; total += l, p += l, i++) - l =strlen (p) +1 ; - -return i; +for (i =0 ; p < end && (!out_strs || i < skip + sz); i++, p += l) { + l =strnlen (p, end - p) +1 ; +if (p + l > end) +return -EILSEQ ; +if (out_strs && i >= skip) + *out_strs++ = p; + } + i -= skip; +return i <=0 ? -ENODATA : i; } -EXPORT_SYMBOL_GPL (of_property_count_strings); +EXPORT_SYMBOL_GPL (of_property_read_string_helper);void of_print_phandle_args (const char *msg,const struct of_phandle_args *args) {
drivers/of/selftest.c +59 -5
80 lines not on this page · raw message
drivers/of/testcase-data/tests-phandle.dtsi +2 -0
@@ -32,7 +32,9 @@ phandle-list-bad-args = <&provider2 1 0>, <&provider3 0>; empty-property; + string-property = "foobar"; unterminated-string = [40 41 42 43]; + unterminated-string-list = "first", "second", [40 41 42 43]; }; }; };
include/linux/of.h +70 -14
105 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 202/203 Btrfs: fix kfree on list_head in btrfs_lookup_csums_range error cleanup
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Mason <[email protected]>
commit 6e5aafb27419f32575b27ef9d6a31e5d54661aca upstream.
If we hit any errors in btrfs_lookup_csums_range, we'll loop through all the csums we allocate and free them. But the code was using list_entry incorrectly, and ended up trying to free the on-stack list_head instead.
This bug came from commit 0678b6185
btrfs: Don't BUG_ON kzalloc error in btrfs_lookup_csums_range()
--- fs/btrfs/file-item.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/btrfs/file-item.c +1 -1
@@ -423,7 +423,7 @@ int btrfs_lookup_csums_range(struct btrf ret =0 ; fail:while (ret <0 && !list_empty (&tmplist)) { - sums = list_entry(&tmplist, struct btrfs_ordered_sum, list); + sums = list_entry(tmplist.next, struct btrfs_ordered_sum, list);list_del (&sums->list);kfree (sums); }
Greg Kroah-Hartman
maintainerPATCH 203/203 mm: page_alloc: fix zone allocation fairness on UP
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johannes Weiner <[email protected]>
commit abe5f972912d086c080be4bde67750630b6fb38b upstream.
The zone allocation batches can easily underflow due to higher-order allocations or spills to remote nodes. On SMP that's fine, because underflows are expected from concurrency and dealt with by returning 0. But on UP, zone_page_state will just return a wrapped unsigned long, which will get past the <= 0 check and then consider the zone eligible until its watermarks are hit.
Commit 3a025760fc15 ("mm: page_alloc: spill to remote nodes before waking kswapd") already made the counter-resetting use atomic_long_read() to accomodate underflows from remote spills, but it didn't go all the way with it.
Make it clear that these batches are expected to go negative regardless of concurrency, and use atomic_long_read() everywhere.
--- mm/page_alloc.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
mm/page_alloc.c +3 -4
@@ -1957,7 +1957,7 @@ zonelist_scan:if (alloc_flags &ALLOC_FAIR ) {if (!zone_local (preferred_zone, zone))continue ; -if (zone_page_state (zone,NR_ALLOC_BATCH ) <=0 ) +if (atomic_long_read (&zone->vm_stat[NR_ALLOC_BATCH ]) <=0 )continue ; }/*
@@ -5670,9 +5670,8 @@ static void __setup_per_zone_wmarks(void zone->watermark[WMARK_HIGH ] =min_wmark_pages (zone) + (tmp >>1 );__mod_zone_page_state (zone,NR_ALLOC_BATCH , -high_wmark_pages (zone) - -low_wmark_pages (zone) - -zone_page_state (zone,NR_ALLOC_BATCH )); +high_wmark_pages (zone) -low_wmark_pages (zone) - +atomic_long_read (&zone->vm_stat[NR_ALLOC_BATCH ]));setup_zone_migrate_reserve (zone);spin_unlock_irqrestore (&zone->lock, flags);
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.14.24 release. There are 203 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 Fri Nov 14 01:15:14 UTC 2014. Anything received after that time might be too late.
Build results:
total: 137 pass: 134 fail: 3
Failed builds:
powerpc:allmodconfig (binutils 2.23)
powerpc:allmodconfig (binutils 2.24)
xtensa:allmodconfig
Qemu tests:
total: 30 pass: 30 fail: 0
Builds fail due to
drivers/of/selftest.c: In function 'of_selftest':drivers/of/selftest.c:436:2: error: implicit declaration of function 'of_selftest_property_match_string' [-Werror=implicit-function-declaration]
of_selftest_property_match_string();
^drivers/of/selftest.c: At top level:drivers/of/selftest.c:135:20: warning: 'of_selftest_property_string' defined but not used [-Wunused-function]
static void __init of_selftest_property_string(void)
^
as mentioned earlier.
Details are available at http://server.roeck-us.net:8010/builders.
Guenter
Greg Kroah-Hartman
maintainerQuoted 29 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.14.24 release. There are 203 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 Fri Nov 14 01:15:14 UTC 2014. Anything received after that time might be too late.
Build results:
total: 137 pass: 134 fail: 3Failed builds:
powerpc:allmodconfig (binutils 2.23)
powerpc:allmodconfig (binutils 2.24)
xtensa:allmodconfigQemu tests:
total: 30 pass: 30 fail: 0Builds fail due to
drivers/of/selftest.c: In function 'of_selftest':drivers/of/selftest.c:436:2: error: implicit declaration of function 'of_selftest_property_match_string' [-Werror=implicit-function-declaration]
of_selftest_property_match_string();
^drivers/of/selftest.c: At top level:drivers/of/selftest.c:135:20: warning: 'of_selftest_property_string' defined but not used [-Wunused-function]
static void__initof_selftest_property_string(void)
Quoted 3 lines
^as mentioned earlier.
I've now fixed this one, if you want to pull the latest stable-git tree.
thanks,
greg k-h
Quoted 32 lines · Greg Kroah-Hartman
Quoted 31 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.14.24 release. There are 203 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 Fri Nov 14 01:15:14 UTC 2014. Anything received after that time might be too late.
Build results:
total: 137 pass: 134 fail: 3Failed builds:
powerpc:allmodconfig (binutils 2.23)
powerpc:allmodconfig (binutils 2.24)
xtensa:allmodconfigQemu tests:
total: 30 pass: 30 fail: 0Builds fail due to
drivers/of/selftest.c: In function 'of_selftest':drivers/of/selftest.c:436:2: error: implicit declaration of function 'of_selftest_property_match_string' [-Werror=implicit-function-declaration]
of_selftest_property_match_string();
^drivers/of/selftest.c: At top level:drivers/of/selftest.c:135:20: warning: 'of_selftest_property_string' defined but not used [-Wunused-function]
static void__initof_selftest_property_string(void)^
Quoted 4 lines
Quoted 1 line
as mentioned earlier.
I've now fixed this one, if you want to pull the latest stable-git tree.
Confirmed.
Thanks,
Guenter
Quoted 1 line · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.14.24 release.
Us usual: patched, built, running fine on three different machines with Gentoo ~amd64 userland as server, desktop, laptop. No funnies so far.
thanks!
-h
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.14.24 release. There are 203 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 Fri Nov 14 01:15:14 UTC 2014. Anything received after that time might be too late.
Quoted 8 lines
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v3.0/stable-review/patch-3.14.24-rc1.gzand the diffstat can be found below.
thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
-- Shuah
Signature · 4 lines
Shuah Khan Sr. Linux Kernel Developer Samsung Research America (Silicon Valley) [email protected] | (970) 217-8978