Linux 4.14.302
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.14.302 kernel.
All users of the 4.14 kernel series must upgrade.
The updated 4.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.14.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/rk3036-evb.dts | 2 arch/arm/boot/dts/rk3188-radxarock.dts | 2 arch/arm/boot/dts/rk3188.dtsi | 1 arch/arm/boot/dts/rk3288-evb-act8846.dts | 2 arch/arm/boot/dts/rk3288-firefly.dtsi | 2 arch/arm/boot/dts/rk3288-miqi.dts | 2 arch/arm/boot/dts/rk3288-rock2-square.dts | 2 arch/arm/boot/dts/rk3xxx.dtsi | 7 arch/arm/include/asm/perf_event.h | 2 arch/arm/include/asm/pgtable-nommu.h | 6 arch/arm/include/asm/pgtable.h | 16 - arch/arm/mm/nommu.c | 19 + arch/s390/kvm/vsie.c | 4 drivers/gpio/gpio-amd8111.c | 4 drivers/hid/hid-core.c | 3 drivers/hid/hid-lg4ff.c | 6 drivers/media/v4l2-core/v4l2-dv-timings.c | 20 + drivers/net/ethernet/aeroflex/greth.c | 1 drivers/net/ethernet/hisilicon/hisi_femac.c | 2 drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 2 drivers/net/ethernet/intel/e1000e/netdev.c | 4 drivers/net/ethernet/intel/igb/igb_ethtool.c | 2 drivers/net/ethernet/marvell/mvneta.c | 2 drivers/net/ethernet/microchip/encx24j600-regmap.c | 4 drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 8 drivers/net/ieee802154/ca8210.c | 2 drivers/net/ieee802154/cc2520.c | 2 drivers/net/plip/plip.c | 4 drivers/net/usb/qmi_wwan.c | 1 drivers/net/xen-netback/common.h | 14 - drivers/net/xen-netback/interface.c | 22 - drivers/net/xen-netback/netback.c | 229 +++++++++--------- drivers/net/xen-netback/rx.c | 10 drivers/regulator/twl6030-regulator.c | 15 - include/linux/cgroup.h | 1 kernel/cgroup/cgroup-internal.h | 1 mm/memcontrol.c | 15 + net/bluetooth/6lowpan.c | 1 net/ipv6/ip6_output.c | 5 net/mac802154/iface.c | 1 net/nfc/nci/ntf.c | 6 net/tipc/link.c | 4 sound/core/seq/seq_memory.c | 11 sound/soc/soc-pcm.c | 2 tools/testing/selftests/rcutorture/bin/kvm.sh | 8 tools/testing/selftests/rcutorture/bin/mkinitrd.sh | 60 ++++ 47 files changed, 349 insertions(+), 192 deletions(-)
Akihiko Odaki (2):
e1000e: Fix TX dispatch condition
igb: Allocate MSI-X vector when testing
Anastasia Belova (1):
HID: hid-lg4ff: Add check for empty lbuf
Andreas Kemnade (1):
regulator: twl6030: fix get status of twl6032 regulators
Connor Shu (1):
rcutorture: Automatically create initrd directory
Dan Carpenter (2):
net: mvneta: Prevent out of bounds read in mvneta_config_rss()
net: mvneta: Fix an out of bounds check
Davide Tronchin (1):
net: usb: qmi_wwan: add u-blox 0x1342 composition
Eric Dumazet (1):
ipv6: avoid use-after-free in ip6_fragment()
Giulio Benetti (1):
ARM: 9266/1: mm: fix no-MMU ZERO_PAGE() implementation
Greg Kroah-Hartman (1):
Linux 4.14.302
Hans Verkuil (1):
media: v4l2-dv-timings.c: fix too strict blanking sanity checks
Hauke Mehrtens (1):
ca8210: Fix crash by zero initializing data
Jisheng Zhang (1):
net: stmmac: fix "snps,axi-config" node property parsing
Johan Jonker (2):
ARM: dts: rockchip: fix ir-receiver node names
ARM: dts: rockchip: disable arm_global_timer on rk3066 and rk3188
Juergen Gross (3):
xen/netback: do some code cleanup
xen/netback: don't call kfree_skb() with interrupts disabled xen/netback: fix build warning
Kees Cook (2):
ALSA: seq: Fix function prototype mismatch in snd_seq_expand_var_event
NFC: nci: Bounds check struct nfc_target arrays
Liu Jian (2):
net: hisilicon: Fix potential use-after-free in hisi_femac_rx()
net: hisilicon: Fix potential use-after-free in hix5hd2_rx()
Ross Lagerwall (1):
xen/netback: Ensure protocol headers don't fall in the non-linear area
Sebastian Reichel (1):
arm: dts: rockchip: fix node name for hym8563 rtc
Srinivasa Rao Mandadapu (1):
ASoC: soc-pcm: Add NULL check in BE reparenting
Tejun Heo (1):
memcg: fix possible use-after-free in memcg_write_event_control()
Thomas Huth (1):
KVM: s390: vsie: Fix the initialization of the epoch extension (epdx) field
Tomislav Novak (1):
ARM: 9251/1: perf: Fix stacktraces for tracepoint events in THUMB2 kernels
Valentina Goncharenko (2):
net: encx24j600: Add parentheses to fix precedence
net: encx24j600: Fix invalid logic in reading of MISTAT register
Wang ShaoBo (1):
Bluetooth: 6LoWPAN: add missing hci_dev_put() in get_l2cap_conn()
Wei Yongjun (1):
mac802154: fix missing INIT_LIST_HEAD in ieee802154_if_add()
Xiongfeng Wang (1):
gpio: amd8111: Fix PCI device reference count leak
Yang Yingliang (1):
net: plip: don't call kfree_skb/dev_kfree_skb() under spin_lock_irq()
YueHaibing (1):
tipc: Fix potential OOB in tipc_link_proto_rcv()
Zhang Changzhong (1):
ethernet: aeroflex: fix potential skb leak in greth_init_rings()
ZhangPeng (1):
HID: core: fix shift-out-of-bounds in hid_report_raw_event
Ziyang Xuan (1):
ieee802154: cc2520: Fix error return code in cc2520_hw_init()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 301 +SUBLEVEL = 302 EXTRAVERSION = NAME = Petit Gorille
arch/arm/boot/dts/rk3036-evb.dts +1 -1
@@ -69,7 +69,7 @@ &i2c1 { status = "okay"; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>;
arch/arm/boot/dts/rk3188-radxarock.dts +1 -1
@@ -104,7 +104,7 @@ #sound-dai-cells = <0>; }; - ir_recv: gpio-ir-receiver { + ir_recv: ir-receiver { compatible = "gpio-ir-receiver"; gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>; pinctrl-names = "default";
arch/arm/boot/dts/rk3188.dtsi +0 -1
@@ -546,7 +546,6 @@ &global_timer { interrupts = <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>; - status = "disabled"; }; &local_timer {
arch/arm/boot/dts/rk3288-evb-act8846.dts +1 -1
@@ -91,7 +91,7 @@ vin-supply = <&vcc_sys>; }; - hym8563@51 { + rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>;
arch/arm/boot/dts/rk3288-firefly.dtsi +1 -1
@@ -270,7 +270,7 @@ vin-supply = <&vcc_sys>; }; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>;
arch/arm/boot/dts/rk3288-miqi.dts +1 -1
@@ -183,7 +183,7 @@ vin-supply = <&vcc_sys>; }; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>;
arch/arm/boot/dts/rk3288-rock2-square.dts +1 -1
@@ -177,7 +177,7 @@ }; &i2c0 { - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>;
arch/arm/boot/dts/rk3xxx.dtsi +7 -0
@@ -134,6 +134,13 @@ reg = <0x1013c200 0x20>; interrupts = <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>; clocks = <&cru CORE_PERI>; + status = "disabled"; + /* The clock source and the sched_clock provided by the arm_global_timer + * on Rockchip rk3066a/rk3188 are quite unstable because their rates + * depend on the CPU frequency. + * Keep the arm_global_timer disabled in order to have the + * DW_APB_TIMER (rk3066a) or ROCKCHIP_TIMER (rk3188) selected by default. + */ }; local_timer: local-timer@1013c600 {
arch/arm/include/asm/perf_event.h +1 -1
@@ -21,7 +21,7 @@ extern unsigned long perf_misc_flags(struct pt_regs *regs);#define perf_arch_fetch_caller_regs (regs, __ip) { \ (regs)->ARM_pc = (__ip); \ - (regs)->ARM_fp = (unsigned long) __builtin_frame_address(0); \ + frame_pointer((regs)) = (unsigned long) __builtin_frame_address(0); \ (regs)->ARM_sp = current_stack_pointer; \ (regs)->ARM_cpsr = SVC_MODE; \ }
arch/arm/include/asm/pgtable-nommu.h +0 -6
@@ -54,12 +54,6 @@typedef pte_t *pte_addr_t ; -/* -* ZERO_PAGE is a global shared page that is always zero: used -* for zero-mapped memory areas etc.. -*/ -#define ZERO_PAGE (vaddr) (virt_to_page(0)) -/* * Mark the prot value as uncacheable and unbufferable. */
arch/arm/include/asm/pgtable.h +9 -7
@@ -13,6 +13,15 @@#include <linux/const.h> #include <asm/proc-fns.h> +#ifndef __ASSEMBLY__ +/* +* ZERO_PAGE is a global shared page that is always zero: used +* for zero-mapped memory areas etc.. +*/ +extern struct page *empty_zero_page; +#define ZERO_PAGE (vaddr) (empty_zero_page) +#endif +#ifndef CONFIG_MMU #include <asm-generic/4level-fixup.h>
@@ -166,13 +175,6 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,#define __S111 __PAGE_SHARED_EXEC#ifndef __ASSEMBLY__ -/* -* ZERO_PAGE is a global shared page that is always zero: used -* for zero-mapped memory areas etc.. -*/ -extern struct page *empty_zero_page; -#define ZERO_PAGE (vaddr) (empty_zero_page) -extern pgd_t swapper_pg_dir[PTRS_PER_PGD ];
arch/arm/mm/nommu.c +19 -0
@@ -25,6 +25,13 @@unsigned long vectors_base; +/* +* empty_zero_page is a special page that is used for +* zero-initialized data and COW. +*/ +struct page *empty_zero_page; +EXPORT_SYMBOL (empty_zero_page); +#ifdef CONFIG_ARM_MPU struct mpu_rgn_info mpu_rgn_info;
@@ -366,9 +373,21 @@ void __init adjust_lowmem_bounds(void)*/ void __init paging_init (const struct machine_desc *mdesc) { +void *zero_page; +early_trap_init ((void *)vectors_base);mpu_setup (); + +/* allocate the zero page. */ + zero_page =memblock_alloc (PAGE_SIZE ,PAGE_SIZE ); +if (!zero_page) +panic ("%s: Failed to allocate %lu bytes align=0x%lx\n" , + __func__,PAGE_SIZE ,PAGE_SIZE ); +bootmem_init (); + + empty_zero_page =virt_to_page (zero_page); +flush_dcache_page (empty_zero_page); }/*
arch/s390/kvm/vsie.c +3 -1
@@ -373,8 +373,10 @@ static int shadow_scb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)if (test_kvm_cpu_feat (vcpu->kvm,KVM_S390_VM_CPU_FEAT_CEI )) scb_s->eca |= scb_o->eca &ECA_CEI ;/* Epoch Extension */ -if (test_kvm_facility (vcpu->kvm,139 )) +if (test_kvm_facility (vcpu->kvm,139 )) { scb_s->ecd |= scb_o->ecd &ECD_MEF ; + scb_s->epdx = scb_o->epdx; + }prepare_ibc (vcpu, vsie_page); rc =shadow_crycb (vcpu, vsie_page);
drivers/gpio/gpio-amd8111.c +4 -0
@@ -231,7 +231,10 @@ static int __init amd_gpio_init(void)ioport_unmap (gp.pm); goto out; } +return 0 ; + out: +pci_dev_put (pdev);return err; }
@@ -239,6 +242,7 @@ static void __exit amd_gpio_exit(void) {gpiochip_remove (&gp.chip);ioport_unmap (gp.pm); +pci_dev_put (gp.pdev); }module_init (amd_gpio_init);
drivers/hid/hid-core.c +3 -0
@@ -1132,6 +1132,9 @@ static s32 snto32(__u32 value, unsigned n)if (!value || !n)return 0 ; +if (n >32 ) + n =32 ; +switch (n) {case 8 :return ((__s8 )value);case 16 :return ((__s16 )value);
drivers/hid/hid-lg4ff.c +6 -0
@@ -880,6 +880,12 @@ static ssize_t lg4ff_alternate_modes_store(struct device *dev, struct device_attreturn -ENOMEM ; i =strlen (lbuf); + +if (i ==0 ) { +kfree (lbuf); +return -EINVAL ; + } +if (lbuf[i-1 ] =='\n' ) {if (i ==1 ) {kfree (lbuf);
drivers/media/v4l2-core/v4l2-dv-timings.c +14 -6
@@ -156,6 +156,8 @@ bool v4l2_valid_dv_timings(const struct v4l2_dv_timings *t,const struct v4l2_bt_timings *bt = &t->bt;const struct v4l2_bt_timings_cap *cap = &dvcap->bt;u32 caps = cap->capabilities; +const u32 max_vert =10240 ; +u32 max_hor =3 * bt->width;if (t->type !=V4L2_DV_BT_656_1120 )return false;
@@ -177,14 +179,20 @@ bool v4l2_valid_dv_timings(const struct v4l2_dv_timings *t,if (!bt->interlaced && (bt->il_vbackporch || bt->il_vsync || bt->il_vfrontporch))return false; -if (bt->hfrontporch >2 * bt->width || - bt->hsync >1024 || bt->hbackporch >1024 ) +/* +* Some video receivers cannot properly separate the frontporch, +* backporch and sync values, and instead they only have the total +* blanking. That can be assigned to any of these three fields. +* So just check that none of these are way out of range. +*/ +if (bt->hfrontporch > max_hor || + bt->hsync > max_hor || bt->hbackporch > max_hor)return false; -if (bt->vfrontporch >4096 || - bt->vsync >128 || bt->vbackporch >4096 ) +if (bt->vfrontporch > max_vert || + bt->vsync > max_vert || bt->vbackporch > max_vert)return false; -if (bt->interlaced && (bt->il_vfrontporch >4096 || - bt->il_vsync >128 || bt->il_vbackporch >4096 )) +if (bt->interlaced && (bt->il_vfrontporch > max_vert || + bt->il_vsync > max_vert || bt->il_vbackporch > max_vert))return false;return fnc ==NULL ||fnc (t, fnc_handle); }
drivers/net/ethernet/aeroflex/greth.c +1 -0
@@ -262,6 +262,7 @@ static int greth_init_rings(struct greth_private *greth)if (dma_mapping_error (greth->dev, dma_addr)) {if (netif_msg_ifup (greth))dev_err (greth->dev,"Could not create initial DMA mapping\n" ); +dev_kfree_skb (skb); goto cleanup; } greth->rx_skbuff[i] = skb;
drivers/net/ethernet/hisilicon/hisi_femac.c +1 -1
@@ -295,7 +295,7 @@ static int hisi_femac_rx(struct net_device *dev, int limit) skb->protocol =eth_type_trans (skb, dev);napi_gro_receive (&priv->napi, skb); dev->stats.rx_packets++; - dev->stats.rx_bytes += skb->len; + dev->stats.rx_bytes += len; next: pos = (pos +1 ) % rxq->num;if (rx_pkts_num >= limit)
drivers/net/ethernet/hisilicon/hix5hd2_gmac.c +1 -1
@@ -554,7 +554,7 @@ static int hix5hd2_rx(struct net_device *dev, int limit) skb->protocol =eth_type_trans (skb, dev);napi_gro_receive (&priv->napi, skb); dev->stats.rx_packets++; - dev->stats.rx_bytes += skb->len; + dev->stats.rx_bytes += len; next: pos =dma_ring_incr (pos,RX_DESC_NUM ); }
drivers/net/ethernet/intel/e1000e/netdev.c +2 -2
@@ -5897,9 +5897,9 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,e1000_tx_queue (tx_ring, tx_flags, count);/* Make sure there is space in the ring for the next send. */ e1000_maybe_stop_tx (tx_ring, - (MAX_SKB_FRAGS * + ((MAX_SKB_FRAGS +1 ) *DIV_ROUND_UP (PAGE_SIZE , - adapter->tx_fifo_limit) +2 )); + adapter->tx_fifo_limit) +4 ));if (!skb->xmit_more ||netif_xmit_stopped (netdev_get_tx_queue (netdev,0 ))) {
drivers/net/ethernet/intel/igb/igb_ethtool.c +2 -0
@@ -1419,6 +1419,8 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data) *data =1 ;return -1 ; } +wr32 (E1000_IVAR_MISC ,E1000_IVAR_VALID <<8 ); +wr32 (E1000_EIMS ,BIT (0 )); }else if (adapter->flags &IGB_FLAG_HAS_MSI ) { shared_int = false; if (request_irq(irq,
drivers/net/ethernet/marvell/mvneta.c +1 -1
@@ -3362,7 +3362,7 @@ static void mvneta_percpu_elect(struct mvneta_port *pp)/* Use the cpu associated to the rxq when it is online, in all * the other cases, use the cpu 0 which can't be offline. */ -if (cpu_online (pp->rxq_def)) +if (pp->rxq_def < nr_cpu_ids &&cpu_online (pp->rxq_def)) elected_cpu = pp->rxq_def; max_cpu =num_present_cpus ();
drivers/net/ethernet/microchip/encx24j600-regmap.c +2 -2
@@ -367,7 +367,7 @@ static int regmap_encx24j600_phy_reg_read(void *context, unsigned int reg, goto err_out;usleep_range (26 ,100 ); -while ((ret =regmap_read (ctx->regmap,MISTAT , &mistat) !=0 ) && +while (((ret =regmap_read (ctx->regmap,MISTAT , &mistat)) ==0 ) && (mistat &BUSY ))cpu_relax ();
@@ -405,7 +405,7 @@ static int regmap_encx24j600_phy_reg_write(void *context, unsigned int reg, goto err_out;usleep_range (26 ,100 ); -while ((ret =regmap_read (ctx->regmap,MISTAT , &mistat) !=0 ) && +while (((ret =regmap_read (ctx->regmap,MISTAT , &mistat)) ==0 ) && (mistat &BUSY ))cpu_relax ();
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +4 -4
@@ -115,10 +115,10 @@ static struct stmmac_axi *stmmac_axi_setup(struct platform_device *pdev) axi->axi_lpi_en =of_property_read_bool (np,"snps,lpi_en" ); axi->axi_xit_frm =of_property_read_bool (np,"snps,xit_frm" ); - axi->axi_kbbe =of_property_read_bool (np,"snps,axi_kbbe" ); - axi->axi_fb =of_property_read_bool (np,"snps,axi_fb" ); - axi->axi_mb =of_property_read_bool (np,"snps,axi_mb" ); - axi->axi_rb =of_property_read_bool (np,"snps,axi_rb" ); + axi->axi_kbbe =of_property_read_bool (np,"snps,kbbe" ); + axi->axi_fb =of_property_read_bool (np,"snps,fb" ); + axi->axi_mb =of_property_read_bool (np,"snps,mb" ); + axi->axi_rb =of_property_read_bool (np,"snps,rb" );if (of_property_read_u32 (np,"snps,wr_osr_lmt" , &axi->axi_wr_osr_lmt)) axi->axi_wr_osr_lmt =1 ;
drivers/net/ieee802154/ca8210.c +1 -1
@@ -926,7 +926,7 @@ static int ca8210_spi_transfer(dev_dbg (&spi->dev,"ca8210_spi_transfer called\n" ); - cas_ctl =kmalloc (sizeof (*cas_ctl),GFP_ATOMIC ); + cas_ctl =kzalloc (sizeof (*cas_ctl),GFP_ATOMIC );if (!cas_ctl)return -ENOMEM ;
drivers/net/ieee802154/cc2520.c +1 -1
@@ -979,7 +979,7 @@ static int cc2520_hw_init(struct cc2520_private *priv)if (timeout-- <=0 ) {dev_err (&priv->spi->dev,"oscillator start failed!\n" ); -return ret; +return -ETIMEDOUT ; }udelay (1 ); }while (!(status &CC2520_STATUS_XOSC32M_STABLE ));
drivers/net/plip/plip.c +2 -2
@@ -448,12 +448,12 @@ plip_bh_timeout_error(struct net_device *dev, struct net_local *nl, } rcv->state =PLIP_PK_DONE ;if (rcv->skb) { -kfree_skb (rcv->skb); +dev_kfree_skb_irq (rcv->skb); rcv->skb =NULL ; } snd->state =PLIP_PK_DONE ;if (snd->skb) { -dev_kfree_skb (snd->skb); +dev_consume_skb_irq (snd->skb); snd->skb =NULL ; }spin_unlock_irq (&nl->lock);
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1366,6 +1366,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x0489, 0xe0b4, 0)}, /* Foxconn T77W968 LTE */ {QMI_FIXED_INTF(0x0489, 0xe0b5, 0)}, /* Foxconn T77W968 LTE with eSIM support*/ {QMI_FIXED_INTF(0x2692, 0x9025, 4)}, /* Cellient MPL200 (rebranded Qualcomm 05c6:9025) */ + {QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 *//* 4. Gobi 1000 devices */ {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
drivers/net/xen-netback/common.h +1 -13
@@ -48,7 +48,6 @@#include <linux/debugfs.h> typedef unsigned int pending_ring_idx_t ; -#define INVALID_PENDING_RING_IDX (~0U)struct pending_tx_info {struct xen_netif_tx_request req;/* tx request */
@@ -82,8 +81,6 @@ struct xenvif_rx_meta {/* Discriminate from any valid pending_idx value. */ #define INVALID_PENDING_IDX 0xFFFF -#define MAX_BUFFER_OFFSET XEN_PAGE_SIZE -#define MAX_PENDING_REQS XEN_NETIF_TX_RING_SIZE/* The maximum number of frags is derived from the size of a grant (same
@@ -345,11 +342,6 @@ void xenvif_free(struct xenvif *vif);int xenvif_xenbus_init (void );void xenvif_xenbus_fini (void ); -int xenvif_schedulable (struct xenvif *vif); - -int xenvif_queue_stopped (struct xenvif_queue *queue); -void xenvif_wake_queue (struct xenvif_queue *queue); -/* (Un)Map communication rings. */ void xenvif_unmap_frontend_data_rings (struct xenvif_queue *queue); int xenvif_map_frontend_data_rings(struct xenvif_queue *queue,
@@ -372,17 +364,13 @@ int xenvif_dealloc_kthread(void *data);irqreturn_t xenvif_ctrl_irq_fn (int irq,void *data);bool xenvif_have_rx_work (struct xenvif_queue *queue,bool test_kthread); -void xenvif_rx_action (struct xenvif_queue *queue); -void xenvif_rx_queue_tail (struct xenvif_queue *queue,struct sk_buff *skb); +bool xenvif_rx_queue_tail (struct xenvif_queue *queue,struct sk_buff *skb);void xenvif_carrier_on (struct xenvif *vif);/* Callback from stack when TX packet can be released */ void xenvif_zerocopy_callback (struct ubuf_info *ubuf,bool zerocopy_success); -/* Unmap a pending page and release it back to the guest */ -void xenvif_idx_unmap (struct xenvif_queue *queue,u16 pending_idx); -static inline pending_ring_idx_t nr_pending_reqs (struct xenvif_queue *queue) { return MAX_PENDING_REQS -
drivers/net/xen-netback/interface.c +5 -17
@@ -70,7 +70,7 @@ void xenvif_skb_zerocopy_complete(struct xenvif_queue *queue)wake_up (&queue->dealloc_wq); } -int xenvif_schedulable (struct xenvif *vif) +static int xenvif_schedulable (struct xenvif *vif) {return netif_running (vif->dev) && test_bit(VIF_STATUS_CONNECTED, &vif->status) &&
@@ -178,20 +178,6 @@ irqreturn_t xenvif_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; } -int xenvif_queue_stopped (struct xenvif_queue *queue) -{ -struct net_device *dev = queue->vif->dev; -unsigned int id = queue->id; -return netif_tx_queue_stopped (netdev_get_tx_queue (dev, id)); -} - -void xenvif_wake_queue (struct xenvif_queue *queue) -{ -struct net_device *dev = queue->vif->dev; -unsigned int id = queue->id; -netif_tx_wake_queue (netdev_get_tx_queue (dev, id)); -} -static u16 xenvif_select_queue (struct net_device *dev,struct sk_buff *skb,void *accel_priv,select_queue_fallback_t fallback)
@@ -268,14 +254,16 @@ xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev)if (vif->hash.alg ==XEN_NETIF_CTRL_HASH_ALGORITHM_NONE )skb_clear_hash (skb); -xenvif_rx_queue_tail (queue, skb); +if (!xenvif_rx_queue_tail (queue, skb)) + goto drop; +xenvif_kick_thread (queue);return NETDEV_TX_OK ; drop: vif->dev->stats.tx_dropped++; -dev_kfree_skb (skb); +dev_kfree_skb_any (skb);return NETDEV_TX_OK ; }
drivers/net/xen-netback/netback.c +127 -102
353 lines not on this page · raw message
drivers/net/xen-netback/rx.c +6 -4
@@ -82,9 +82,10 @@ static bool xenvif_rx_ring_slots_available(struct xenvif_queue *queue)return false; } -void xenvif_rx_queue_tail (struct xenvif_queue *queue,struct sk_buff *skb) +bool xenvif_rx_queue_tail (struct xenvif_queue *queue,struct sk_buff *skb) {unsigned long flags; +bool ret = true;spin_lock_irqsave (&queue->rx_queue.lock, flags);
@@ -92,8 +93,7 @@ void xenvif_rx_queue_tail(struct xenvif_queue *queue, struct sk_buff *skb)struct net_device *dev = queue->vif->dev;netif_tx_stop_queue (netdev_get_tx_queue (dev, queue->id)); -kfree_skb (skb); - queue->vif->dev->stats.rx_dropped++; + ret = false; }else {if (skb_queue_empty (&queue->rx_queue))xenvif_update_needed_slots (queue, skb);
@@ -104,6 +104,8 @@ void xenvif_rx_queue_tail(struct xenvif_queue *queue, struct sk_buff *skb) }spin_unlock_irqrestore (&queue->rx_queue.lock, flags); + +return ret; }static struct sk_buff *xenvif_rx_dequeue (struct xenvif_queue *queue)
@@ -473,7 +475,7 @@ void xenvif_rx_skb(struct xenvif_queue *queue)#define RX_BATCH_SIZE 64 -void xenvif_rx_action (struct xenvif_queue *queue) +static void xenvif_rx_action (struct xenvif_queue *queue) {struct sk_buff_head completed_skbs;unsigned int work_done =0 ;
drivers/regulator/twl6030-regulator.c +11 -4
@@ -71,6 +71,7 @@ struct twlreg_info {#define TWL6030_CFG_STATE_SLEEP 0x03#define TWL6030_CFG_STATE_GRP_SHIFT 5#define TWL6030_CFG_STATE_APP_SHIFT 2 +#define TWL6030_CFG_STATE_MASK 0x03#define TWL6030_CFG_STATE_APP_MASK (0x03 << TWL6030_CFG_STATE_APP_SHIFT)#define TWL6030_CFG_STATE_APP (v) (((v) & TWL6030_CFG_STATE_APP_MASK) >>\ TWL6030_CFG_STATE_APP_SHIFT)
@@ -131,13 +132,14 @@ static int twl6030reg_is_enabled(struct regulator_dev *rdev)if (grp <0 )return grp; grp &=P1_GRP_6030 ; + val =twlreg_read (info,TWL_MODULE_PM_RECEIVER ,VREG_STATE ); + val =TWL6030_CFG_STATE_APP (val); }else { + val =twlreg_read (info,TWL_MODULE_PM_RECEIVER ,VREG_STATE ); + val &=TWL6030_CFG_STATE_MASK ; grp =1 ; } - val =twlreg_read (info,TWL_MODULE_PM_RECEIVER ,VREG_STATE ); - val =TWL6030_CFG_STATE_APP (val); -return grp && (val ==TWL6030_CFG_STATE_ON ); }
@@ -190,7 +192,12 @@ static int twl6030reg_get_status(struct regulator_dev *rdev) val =twlreg_read (info,TWL_MODULE_PM_RECEIVER ,VREG_STATE ); -switch (TWL6030_CFG_STATE_APP (val)) { +if (info->features &TWL6032_SUBCLASS ) + val &=TWL6030_CFG_STATE_MASK ; +else + val =TWL6030_CFG_STATE_APP (val); + +switch (val) {case TWL6030_CFG_STATE_ON :return REGULATOR_STATUS_NORMAL ;
include/linux/cgroup.h +1 -0
@@ -68,6 +68,7 @@ struct css_task_iter {struct list_head iters_node;/* css_set->task_iters */ }; +extern struct file_system_type cgroup_fs_type;extern struct cgroup_root cgrp_dfl_root;extern struct css_set init_css_set;
kernel/cgroup/cgroup-internal.h +0 -1
@@ -122,7 +122,6 @@ extern struct mutex cgroup_mutex;extern spinlock_t css_set_lock;extern struct cgroup_subsys *cgroup_subsys[];extern struct list_head cgroup_roots; -extern struct file_system_type cgroup_fs_type;/* iterate across the hierarchies */ #define for_each_root (root) \
mm/memcontrol.c +13 -2
@@ -3878,6 +3878,7 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,unsigned int efd, cfd;struct fd efile;struct fd cfile; +struct dentry *cdentry;const char *name;char *endp;int ret;
@@ -3928,6 +3929,16 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,if (ret <0 ) goto out_put_cfile; +/* +* The control file must be a regular cgroup1 file. As a regular cgroup +* file can't be renamed, it's safe to access its name afterwards. +*/ + cdentry = cfile.file->f_path.dentry; +if (cdentry->d_sb->s_type != &cgroup_fs_type || !d_is_reg (cdentry)) { + ret = -EINVAL ; + goto out_put_cfile; + } +/* * Determine the event callbacks and set them in @event. This used * to be done via struct cftype but cgroup core no longer knows
@@ -3936,7 +3947,7 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,* * DO NOT ADD NEW FILES. */ - name = cfile.file->f_path.dentry->d_name.name; + name = cdentry->d_name.name;if (!strcmp (name,"memory.usage_in_bytes" )) { event->register_event = mem_cgroup_usage_register_event;
@@ -3960,7 +3971,7 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,* automatically removed on cgroup destruction but the removal is * asynchronous, so take an extra ref on @css. */ - cfile_css =css_tryget_online_from_dir (cfile.file->f_path.dentry->d_parent, + cfile_css =css_tryget_online_from_dir (cdentry->d_parent, &memory_cgrp_subsys); ret = -EINVAL ;if (IS_ERR (cfile_css))
net/bluetooth/6lowpan.c +1 -0
@@ -1014,6 +1014,7 @@ static int get_l2cap_conn(char *buf, bdaddr_t *addr, u8 *addr_type,hci_dev_lock (hdev); hcon =hci_conn_hash_lookup_le (hdev, addr, *addr_type);hci_dev_unlock (hdev); +hci_dev_put (hdev);if (!hcon)return -ENOENT ;
net/ipv6/ip6_output.c +5 -0
@@ -756,6 +756,9 @@ int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,ipv6_hdr (skb)->payload_len =htons (first_len -sizeof (struct ipv6hdr )); +/* We prevent @rt from being freed. */ +rcu_read_lock (); +for (;;) {/* Prepare header of the next frame, * before previous one went down. */
@@ -798,6 +801,7 @@ int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,if (err ==0 ) {IP6_INC_STATS (net,ip6_dst_idev (&rt->dst),IPSTATS_MIB_FRAGOKS ); +rcu_read_unlock ();return 0 ; }
@@ -805,6 +809,7 @@ int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,IP6_INC_STATS (net,ip6_dst_idev (&rt->dst),IPSTATS_MIB_FRAGFAILS ); +rcu_read_unlock ();return err; slow_path_clean:
net/mac802154/iface.c +1 -0
@@ -669,6 +669,7 @@ ieee802154_if_add(struct ieee802154_local *local, const char *name, sdata->dev = ndev; sdata->wpan_dev.wpan_phy = local->hw.phy; sdata->local = local; +INIT_LIST_HEAD (&sdata->wpan_dev.list);/* setup type-dependent data */ ret =ieee802154_setup_sdata (sdata, type);
net/nfc/nci/ntf.c +6 -0
@@ -230,6 +230,8 @@ static int nci_add_new_protocol(struct nci_dev *ndev, target->sens_res = nfca_poll->sens_res; target->sel_res = nfca_poll->sel_res; target->nfcid1_len = nfca_poll->nfcid1_len; +if (target->nfcid1_len >ARRAY_SIZE (target->nfcid1)) +return -EPROTO ;if (target->nfcid1_len >0 ) {memcpy (target->nfcid1, nfca_poll->nfcid1, target->nfcid1_len);
@@ -238,6 +240,8 @@ static int nci_add_new_protocol(struct nci_dev *ndev, nfcb_poll = (struct rf_tech_specific_params_nfcb_poll *)params; target->sensb_res_len = nfcb_poll->sensb_res_len; +if (target->sensb_res_len >ARRAY_SIZE (target->sensb_res)) +return -EPROTO ;if (target->sensb_res_len >0 ) {memcpy (target->sensb_res, nfcb_poll->sensb_res, target->sensb_res_len);
@@ -246,6 +250,8 @@ static int nci_add_new_protocol(struct nci_dev *ndev, nfcf_poll = (struct rf_tech_specific_params_nfcf_poll *)params; target->sensf_res_len = nfcf_poll->sensf_res_len; +if (target->sensf_res_len >ARRAY_SIZE (target->sensf_res)) +return -EPROTO ;if (target->sensf_res_len >0 ) {memcpy (target->sensf_res, nfcf_poll->sensf_res, target->sensf_res_len);
net/tipc/link.c +3 -1
@@ -1477,7 +1477,9 @@ static int tipc_link_proto_rcv(struct tipc_link *l, struct sk_buff *skb,if (tipc_own_addr (l->net) >msg_prevnode (hdr)) l->net_plane =msg_net_plane (hdr); -skb_linearize (skb); +if (skb_linearize (skb)) + goto exit; + hdr =buf_msg (skb); data =msg_data (hdr);
sound/core/seq/seq_memory.c +7 -4
@@ -126,15 +126,19 @@ EXPORT_SYMBOL(snd_seq_dump_var_event);* expand the variable length event to linear buffer space. */ -static int seq_copy_in_kernel (char **bufptr,const void *src,int size) +static int seq_copy_in_kernel (void *ptr,void *src,int size) { +char **bufptr = ptr; +memcpy (*bufptr, src, size); *bufptr += size;return 0 ; } -static int seq_copy_in_user (char __user **bufptr,const void *src,int size) +static int seq_copy_in_user (void *ptr,void *src,int size) { +char __user **bufptr = ptr; +if (copy_to_user (*bufptr, src, size))return -EFAULT ; *bufptr += size;
@@ -163,8 +167,7 @@ int snd_seq_expand_var_event(const struct snd_seq_event *event, int count, charreturn newlen; } err =snd_seq_dump_var_event (event, - in_kernel ? (snd_seq_dump_func_t )seq_copy_in_kernel : - (snd_seq_dump_func_t )seq_copy_in_user, + in_kernel ? seq_copy_in_kernel : seq_copy_in_user, &buf);return err <0 ? err : newlen; }
sound/soc/soc-pcm.c +2 -0
@@ -1168,6 +1168,8 @@ static void dpcm_be_reparent(struct snd_soc_pcm_runtime *fe,return ; be_substream =snd_soc_dpcm_get_substream (be, stream); +if (!be_substream) +return ;list_for_each_entry (dpcm, &be->dpcm[stream].fe_clients, list_fe) {if (dpcm->fe == fe)
tools/testing/selftests/rcutorture/bin/kvm.sh +8 -0
@@ -182,6 +182,14 @@ do shift done +if test -z "$TORTURE_INITRD" || tools/testing/selftests/rcutorture/bin/mkinitrd.sh +then + : +else + echo No initrd and unable to create one, aborting test >&2 + exit 1 +fi + CONFIGFRAG=${KVM}/configs/${TORTURE_SUITE}; export CONFIGFRAG if test -z "$configs"
tools/testing/selftests/rcutorture/bin/mkinitrd.sh new file +60 -0
60 lines not on this page · raw message