Linux 4.14.231
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.14.231 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/armada-385-turris-omnia.dts | 1 arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi | 2 arch/arm64/include/asm/kvm_arm.h | 1 arch/arm64/kernel/cpufeature.c | 1 arch/arm64/kvm/debug.c | 2 arch/ia64/include/asm/ptrace.h | 8 arch/parisc/include/asm/cmpxchg.h | 2 arch/s390/kernel/cpcmd.c | 6 block/bio.c | 2 drivers/char/agp/Kconfig | 2 drivers/clk/clk.c | 47 +- drivers/clk/socfpga/clk-gate.c | 2 drivers/gpu/drm/imx/imx-ldb.c | 10 drivers/i2c/i2c-core-base.c | 7 drivers/infiniband/hw/cxgb4/cm.c | 3 drivers/net/can/usb/peak_usb/pcan_usb_core.c | 6 drivers/net/ethernet/amd/xgbe/xgbe.h | 6 drivers/net/ethernet/freescale/gianfar.c | 6 drivers/net/ieee802154/atusb.c | 1 drivers/net/phy/bcm-phy-lib.c | 11 drivers/net/tun.c | 48 +++ drivers/regulator/bd9571mwv-regulator.c | 4 drivers/soc/fsl/qbman/qman.c | 2 drivers/usb/usbip/stub_dev.c | 11 drivers/usb/usbip/usbip_common.h | 3 drivers/usb/usbip/usbip_event.c | 2 drivers/usb/usbip/vhci_hcd.c | 1 drivers/usb/usbip/vhci_sysfs.c | 30 + drivers/usb/usbip/vudc_sysfs.c | 42 ++ drivers/xen/events/events_base.c | 14 drivers/xen/events/events_internal.h | 2 fs/cifs/connect.c | 1 fs/direct-io.c | 5 fs/gfs2/super.c | 10 fs/ocfs2/aops.c | 11 fs/ocfs2/file.c | 8 include/linux/mlx5/mlx5_ifc.h | 6 include/linux/virtio_net.h | 2 include/net/red.h | 4 include/uapi/linux/ncsi.h | 115 +++++++ kernel/workqueue.c | 2 net/batman-adv/translation-table.c | 2 net/ieee802154/nl-mac.c | 7 net/ieee802154/nl802154.c | 23 + net/ipv4/netfilter/arp_tables.c | 2 net/ipv4/netfilter/ip_tables.c | 2 net/ipv6/netfilter/ip6_tables.c | 2 net/ipv6/route.c | 8 net/mac802154/llsec.c | 2 net/ncsi/Makefile | 2 net/ncsi/internal.h | 35 +- net/ncsi/ncsi-aen.c | 15 net/ncsi/ncsi-manage.c | 342 ++++++++------------- net/ncsi/ncsi-netlink.c | 415 ++++++++++++++++++++++++++ net/ncsi/ncsi-netlink.h | 20 + net/ncsi/ncsi-rsp.c | 215 +++++-------- net/netfilter/x_tables.c | 10 net/nfc/llcp_sock.c | 10 net/sched/sch_teql.c | 3 net/tipc/socket.c | 2 net/wireless/sme.c | 2 sound/drivers/aloop.c | 11 sound/soc/codecs/wm8960.c | 8 sound/soc/intel/atom/sst-mfld-platform-pcm.c | 6 sound/soc/sunxi/sun4i-codec.c | 5 tools/perf/util/map.c | 7 67 files changed, 1131 insertions(+), 476 deletions(-)
Alexander Aring (8):
net: ieee802154: nl-mac: fix check on panid
net: ieee802154: fix nl802154 del llsec key
net: ieee802154: fix nl802154 del llsec dev
net: ieee802154: fix nl802154 add llsec key
net: ieee802154: fix nl802154 del llsec devkey
net: ieee802154: forbid monitor for set llsec params
net: ieee802154: forbid monitor for del llsec seclevel
net: ieee802154: stop dump llsec params for monitors
Alexander Gordeev (1):
s390/cpcmd: fix inline assembly register clobbering
Arnaldo Carvalho de Melo (1):
perf map: Tighten snprintf() string precision to pass gcc check on some 32-bit arches
Arnd Bergmann (2):
soc/fsl: qbman: fix conflicting alignment attributes drm/imx: imx-ldb: fix out of bounds array access warning
Bastian Germann (1):
ASoC: sunxi: sun4i-codec: fill ASoC card owner
Bob Peterson (1):
gfs2: report "already frozen/thawed" errors
Claudiu Manoil (1):
gianfar: Handle error code at MAC address change
Du Cheng (1):
cfg80211: remove WARN_ON() in cfg80211_sme_connect
Eric Dumazet (2):
net: ensure mac header is set in virtio_net_hdr_to_skb()
sch_red: fix off-by-one checks in red_check_params()
Florian Fainelli (1):
net: phy: broadcom: Only advertise EEE for supported modes
Florian Westphal (1):
netfilter: x_tables: fix compat match/target pad out-of-bound write
Gao Xiang (1):
parisc: avoid a warning on u8 cast for cmpxchg on u8 pointers
Geert Uytterhoeven (1):
regulator: bd9571mwv: Fix AVS and DVFS voltage range
Greg Kroah-Hartman (2):
Revert "cifs: Set CIFS_MOUNT_USE_PREFIX_PATH flag on setting cifs_sb->prepath."
Linux 4.14.231Hans de Goede (1):
ASoC: intel: atom: Stop advertising non working S24LE support
Helge Deller (1):
parisc: parisc-agp requires SBA IOMMU driver
Jack Qiu (1):
fs: direct-io: fix missing sdio->boundary
Jonas Holmberg (1):
ALSA: aloop: Fix initialization of controls
Juergen Gross (1):
xen/events: fix setting irq affinity
Krzysztof Kozlowski (1):
clk: socfpga: fix iomem pointer cast on 64-bit
Luca Fancellu (1):
xen/evtchn: Change irq_info lock to raw_spinlock_t
Lukasz Bartosik (2):
clk: fix invalid usage of list cursor in register
clk: fix invalid usage of list cursor in unregister
Lv Yunlong (1):
net:tipc: Fix a double free in tipc_sk_mcast_rcv
Marek Behún (1):
ARM: dts: turris-omnia: configure LED[2]/INTn pin as interrupt pin
Milton Miller (1):
net/ncsi: Avoid channel_monitor hrtimer deadlock
Muhammad Usama Anjum (1):
net: ipv6: check for validity before dereferencing cfg->fc_nlinfo.nlh
Pavel Skripkin (3):
drivers: net: fix memory leak in atusb_probe
drivers: net: fix memory leak in peak_usb_create_dev
net: mac802154: Fix general protection fault
Pavel Tikhomirov (1):
net: sched: sch_teql: fix null-pointer dereference
Phillip Potter (1):
net: tun: set tun->dev->addr_len during TUNSETLINK processing
Potnuri Bharat Teja (1):
RDMA/cxgb4: check for ipv6 address properly while destroying listener
Raed Salem (1):
net/mlx5: Fix placement of log_max_flow_counter
Samuel Mendoza-Jonas (5):
net/ncsi: Improve general state logging net/ncsi: Don't return error on normal response net/ncsi: Add generic netlink family net/ncsi: Refactor MAC, VLAN filters net/ncsi: Avoid GFP_KERNEL in response handler
Sergei Trofimovich (1):
ia64: fix user_stack_pointer() for ptrace()
Shengjiu Wang (1):
ASoC: wm8960: Fix wrong bclk and lrclk with pll enabled for some chips
Shuah Khan (4):
usbip: add sysfs_lock to synchronize sysfs code paths
usbip: stub-dev synchronize sysfs code paths
usbip: synchronize event handler with sysfs code paths
usbip: fix vudc usbip_sockfd_store races leading to gpf
Shyam Sundar S K (1):
amd-xgbe: Update DMA coherency values
Stefan Riedmueller (1):
ARM: dts: imx6: pbab01: Set vmmc supply for both SD interfaces
Suzuki K Poulose (2):
KVM: arm64: Hide system instruction access to Trace registers
KVM: arm64: Disable guest access to trace filter controls
Tetsuo Handa (1):
batman-adv: initialize "struct batadv_tvlv_tt_vlan_data"->reserved field
Wei Yongjun (1):
net/ncsi: Make local function ncsi_get_filter() static
Wengang Wang (1):
ocfs2: fix deadlock between setattr and dio_end_io_write
Wolfram Sang (1):
i2c: turn recovery error on init to debug
Xiaoming Ni (4):
nfc: fix refcount leak in llcp_sock_bind()
nfc: fix refcount leak in llcp_sock_connect()
nfc: fix memory leak in llcp_sock_connect()
nfc: Avoid endless loops caused by repeated llcp_sock_connect()
Yufen Yu (1):
block: only update parent bi_status when bio fail
Zqiang (1):
workqueue: Move the position of debug_work_activate() in __queue_work()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 230 +SUBLEVEL = 231 EXTRAVERSION = NAME = Petit Gorille
arch/arm/boot/dts/armada-385-turris-omnia.dts +1 -0
@@ -269,6 +269,7 @@ status = "okay"; compatible = "ethernet-phy-id0141.0DD1", "ethernet-phy-ieee802.3-c22"; reg = <1>; + marvell,reg-init = <3 18 0 0x4985>; /* irq is connected to &pcawan pin 7 */ };
arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi +2 -0
@@ -423,6 +423,7 @@ pinctrl-0 = <&pinctrl_usdhc2>; cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; wp-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>; + vmmc-supply = <&vdd_sd1_reg>; status = "disabled"; };
@@ -432,5 +433,6 @@ &pinctrl_usdhc3_cdwp>; cd-gpios = <&gpio1 27 GPIO_ACTIVE_LOW>; wp-gpios = <&gpio1 29 GPIO_ACTIVE_HIGH>; + vmmc-supply = <&vdd_sd0_reg>; status = "disabled"; };
arch/arm64/include/asm/kvm_arm.h +1 -0
@@ -191,6 +191,7 @@#define CPTR_EL2_DEFAULT 0x000033ff/* Hyp Debug Configuration Register bits */ +#define MDCR_EL2_TTRF (1 << 19)#define MDCR_EL2_TPMS (1 << 14)#define MDCR_EL2_E2PB_MASK (UL(0x3))#define MDCR_EL2_E2PB_SHIFT (UL(12))
arch/arm64/kernel/cpufeature.c +0 -1
@@ -230,7 +230,6 @@ static const struct arm64_ftr_bits ftr_id_aa64dfr0[] = {* of support. */ S_ARM64_FTR_BITS (FTR_HIDDEN ,FTR_NONSTRICT ,FTR_EXACT ,ID_AA64DFR0_PMUVER_SHIFT ,4 ,0 ), -ARM64_FTR_BITS (FTR_HIDDEN ,FTR_STRICT ,FTR_EXACT ,ID_AA64DFR0_TRACEVER_SHIFT ,4 ,0 ),ARM64_FTR_BITS (FTR_HIDDEN ,FTR_STRICT ,FTR_EXACT ,ID_AA64DFR0_DEBUGVER_SHIFT ,4 ,0x6 ), ARM64_FTR_END, };
arch/arm64/kvm/debug.c +2 -0
@@ -96,6 +96,7 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)* - Debug ROM Address (MDCR_EL2_TDRA) * - OS related registers (MDCR_EL2_TDOSA) * - Statistical profiler (MDCR_EL2_TPMS/MDCR_EL2_E2PB) +* - Self-hosted Trace Filter controls (MDCR_EL2_TTRF) * * Additionally, KVM only traps guest accesses to the debug registers if * the guest is not actively using them (see the KVM_ARM64_DEBUG_DIRTY
@@ -118,6 +119,7 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) vcpu->arch.mdcr_el2 =__this_cpu_read (mdcr_el2) &MDCR_EL2_HPMN_MASK ; vcpu->arch.mdcr_el2 |= (MDCR_EL2_TPM |MDCR_EL2_TPMS | +MDCR_EL2_TTRF |MDCR_EL2_TPMCR |MDCR_EL2_TDRA |MDCR_EL2_TDOSA );
arch/ia64/include/asm/ptrace.h +1 -7
@@ -54,8 +54,7 @@static inline unsigned long user_stack_pointer (struct pt_regs *regs) { -/* FIXME: should this be bspstore + nr_dirty regs? */ -return regs->ar_bspstore; +return regs->r12; }static inline int is_syscall_success (struct pt_regs *regs)
@@ -79,11 +78,6 @@ static inline long regs_return_value(struct pt_regs *regs)unsigned long __ip =instruction_pointer (regs); \ (__ip & ~3UL ) + ((__ip &3UL ) <<2 ); \ }) -/* -* Why not default? Because user_stack_pointer() on ia64 gives register -* stack backing store instead... -*/ -#define current_user_stack_pointer () (current_pt_regs()->r12)/* given a pointer to a task_struct, return the user's pt_regs */ # define task_pt_regs (t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)
arch/parisc/include/asm/cmpxchg.h +1 -1
@@ -72,7 +72,7 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)#endif case 4 :return __cmpxchg_u32 ((unsigned int *)ptr, (unsigned int )old, (unsigned int )new_); -case 1 :return __cmpxchg_u8 ((u8 *)ptr, (u8 )old, (u8 )new_); +case 1 :return __cmpxchg_u8 ((u8 *)ptr, old &0xff , new_ &0xff ); }__cmpxchg_called_with_bad_pointer ();return old;
arch/s390/kernel/cpcmd.c +4 -2
@@ -37,10 +37,12 @@ static int diag8_noresponse(int cmdlen)static int diag8_response (int cmdlen,char *response,int *rlen) { +unsigned long _cmdlen = cmdlen |0x40000000L ; +unsigned long _rlen = *rlen; register unsigned long reg2 asm ("2") = (addr_t) cpcmd_buf; register unsigned long reg3 asm ("3") = (addr_t) response; - register unsigned long reg4 asm ("4") = cmdlen | 0x40000000L; - register unsigned long reg5 asm ("5") = *rlen; + register unsigned long reg4 asm ("4") = _cmdlen; + register unsigned long reg5 asm ("5") = _rlen; asmvolatile ( " diag %2,%0,0x8\n"
block/bio.c +1 -1
@@ -312,7 +312,7 @@ static struct bio *__bio_chain_endio(struct bio *bio) {struct bio *parent = bio->bi_private; -if (!parent->bi_status) +if (bio->bi_status && !parent->bi_status) parent->bi_status = bio->bi_status;bio_put (bio);return parent;
drivers/char/agp/Kconfig +1 -1
@@ -125,7 +125,7 @@ config AGP_HP_ZX1 config AGP_PARISC tristate "HP Quicksilver AGP support" - depends on AGP && PARISC && 64BIT + depends on AGP && PARISC && 64BIT && IOMMU_SBA help This option gives you AGP GART support for the HP Quicksilver AGP bus adapter on HP PA-RISC machines (Ok, just on the C8000
drivers/clk/clk.c +21 -26
73 lines not on this page · raw message
drivers/clk/socfpga/clk-gate.c +1 -1
@@ -107,7 +107,7 @@ static unsigned long socfpga_clk_recalc_rate(struct clk_hw *hwclk, val =readl (socfpgaclk->div_reg) >> socfpgaclk->shift; val &=GENMASK (socfpgaclk->width -1 ,0 );/* Check for GPIO_DB_CLK by its offset */ -if ((int ) socfpgaclk->div_reg &SOCFPGA_GPIO_DB_CLK_OFFSET ) +if ((uintptr_t ) socfpgaclk->div_reg &SOCFPGA_GPIO_DB_CLK_OFFSET ) div = val +1 ;else div = (1 << val);
drivers/gpu/drm/imx/imx-ldb.c +10 -0
@@ -206,6 +206,11 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder)int dual = ldb->ldb_ctrl &LDB_SPLIT_MODE_EN ;int mux =drm_of_encoder_active_port_id (imx_ldb_ch->child, encoder); +if (mux <0 || mux >=ARRAY_SIZE (ldb->clk_sel)) { +dev_warn (ldb->dev,"%s: invalid mux %d\n" , __func__, mux); +return ; + } +drm_panel_prepare (imx_ldb_ch->panel);if (dual) {
@@ -264,6 +269,11 @@ imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder,int mux =drm_of_encoder_active_port_id (imx_ldb_ch->child, encoder);u32 bus_format = imx_ldb_ch->bus_format; +if (mux <0 || mux >=ARRAY_SIZE (ldb->clk_sel)) { +dev_warn (ldb->dev,"%s: invalid mux %d\n" , __func__, mux); +return ; + } +if (mode->clock >170000 ) {dev_warn (ldb->dev,"%s: mode exceeds 170 MHz pixel clock\n" , __func__);
drivers/i2c/i2c-core-base.c +4 -3
@@ -262,13 +262,14 @@ EXPORT_SYMBOL_GPL(i2c_recover_bus);static void i2c_init_recovery (struct i2c_adapter *adap) {struct i2c_bus_recovery_info *bri = adap->bus_recovery_info; -char *err_str; +char *err_str, *err_level =KERN_ERR ;if (!bri)return ;if (!bri->recover_bus) { - err_str ="no recover_bus() found" ; + err_str ="no suitable method provided" ; + err_level =KERN_DEBUG ; goto err; }
@@ -296,7 +297,7 @@ static void i2c_init_recovery(struct i2c_adapter *adap)return ; err: -dev_err (&adap->dev,"Not using recovery: %s\n" , err_str); +dev_printk (err_level, &adap->dev,"Not using recovery: %s\n" , err_str); adap->bus_recovery_info =NULL ; }
drivers/infiniband/hw/cxgb4/cm.c +2 -1
@@ -3498,7 +3498,8 @@ int c4iw_destroy_listen(struct iw_cm_id *cm_id)c4iw_init_wr_wait (&ep->com.wr_wait); err =cxgb4_remove_server ( ep->com.dev->rdev.lldi.ports[0 ], ep->stid, - ep->com.dev->rdev.lldi.rxq_ids[0 ], true); + ep->com.dev->rdev.lldi.rxq_ids[0 ], + ep->com.local_addr.ss_family ==AF_INET6 );if (err) goto done; err = c4iw_wait_for_reply(&ep->com.dev->rdev, &ep->com.wr_wait,
drivers/net/can/usb/peak_usb/pcan_usb_core.c +5 -1
@@ -882,7 +882,7 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,if (dev->adapter->dev_set_bus) { err = dev->adapter->dev_set_bus (dev,0 );if (err) - goto lbl_unregister_candev; + goto adap_dev_free; }/* get device number early */
@@ -894,6 +894,10 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,return 0 ; +adap_dev_free: +if (dev->adapter->dev_free) + dev->adapter->dev_free (dev); + lbl_unregister_candev:unregister_candev (netdev);
drivers/net/ethernet/amd/xgbe/xgbe.h +3 -3
@@ -176,9 +176,9 @@#define XGBE_DMA_SYS_AWCR 0x30303030/* DMA cache settings - PCI device */ -#define XGBE_DMA_PCI_ARCR 0x00000003 -#define XGBE_DMA_PCI_AWCR 0x13131313 -#define XGBE_DMA_PCI_AWARCR 0x00000313 +#define XGBE_DMA_PCI_ARCR 0x000f0f0f +#define XGBE_DMA_PCI_AWCR 0x0f0f0f0f +#define XGBE_DMA_PCI_AWARCR 0x00000f0f/* DMA channel interrupt modes */ #define XGBE_IRQ_MODE_EDGE 0
drivers/net/ethernet/freescale/gianfar.c +5 -1
@@ -485,7 +485,11 @@ static struct net_device_stats *gfar_get_stats(struct net_device *dev)static int gfar_set_mac_addr (struct net_device *dev,void *p) { -eth_mac_addr (dev, p); +int ret; + + ret =eth_mac_addr (dev, p); +if (ret) +return ret;gfar_set_mac_for_addr (dev,0 , dev->dev_addr);
drivers/net/ieee802154/atusb.c +1 -0
@@ -346,6 +346,7 @@ static int atusb_alloc_urbs(struct atusb *atusb, int n)return -ENOMEM ; }usb_anchor_urb (urb, &atusb->idle_urbs); +usb_free_urb (urb); n--; }return 0 ;
drivers/net/phy/bcm-phy-lib.c +8 -3
@@ -198,7 +198,7 @@ EXPORT_SYMBOL_GPL(bcm_phy_enable_apd);int bcm_phy_set_eee (struct phy_device *phydev,bool enable) { -int val; +int val, mask =0 ;/* Enable EEE at PHY level */ val =phy_read_mmd (phydev,MDIO_MMD_AN ,BRCM_CL45VEN_EEE_CONTROL );
@@ -217,10 +217,15 @@ int bcm_phy_set_eee(struct phy_device *phydev, bool enable)if (val <0 )return val; +if (phydev->supported & SUPPORTED_1000baseT_Full) + mask |=MDIO_EEE_1000T ; +if (phydev->supported & SUPPORTED_100baseT_Full) + mask |=MDIO_EEE_100TX ; +if (enable) - val |= (MDIO_EEE_100TX |MDIO_EEE_1000T ); + val |= mask;else - val &= ~(MDIO_EEE_100TX |MDIO_EEE_1000T ); + val &= ~mask;phy_write_mmd (phydev,MDIO_MMD_AN ,BCM_CL45VEN_EEE_ADV , (u32 )val);
drivers/net/tun.c +48 -0
66 lines not on this page · raw message
drivers/regulator/bd9571mwv-regulator.c +2 -2
@@ -119,7 +119,7 @@ static struct regulator_ops vid_ops = {static struct regulator_desc regulators[] = {BD9571MWV_REG ("VD09" ,"vd09" ,VD09 , avs_ops,0 ,0x7f , -0x80 ,600000 ,10000 ,0x3c ), +0x6f ,600000 ,10000 ,0x3c ),BD9571MWV_REG ("VD18" ,"vd18" ,VD18 , vid_ops,BD9571MWV_VD18_VID ,0xf ,16 ,1625000 ,25000 ,0 ), BD9571MWV_REG("VD25", "vd25", VD25, vid_ops, BD9571MWV_VD25_VID, 0xf,
@@ -128,7 +128,7 @@ static struct regulator_desc regulators[] = { 11, 2800000, 100000, 0),BD9571MWV_REG ("DVFS" ,"dvfs" ,DVFS , reg_ops,BD9571MWV_DVFS_MONIVDAC ,0x7f , - 0x80, 600000, 10000, 0x3c), + 0x6f, 600000, 10000, 0x3c), };static int bd9571mwv_regulator_probe (struct platform_device *pdev)
drivers/soc/fsl/qbman/qman.c +1 -1
@@ -146,7 +146,7 @@ struct qm_eqcr_entry {__be32 tag;struct qm_fd fd;u8 __reserved3[32 ]; -} __packed; +} __packed__aligned(8) ;#define QM_EQCR_VERB_VBIT 0x80#define QM_EQCR_VERB_CMD_MASK 0x61/* but only one value; */ #define QM_EQCR_VERB_CMD_ENQUEUE 0x01
drivers/usb/usbip/stub_dev.c +9 -2
@@ -77,6 +77,7 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,dev_info (dev,"stub up\n" ); +mutex_lock (&sdev->ud.sysfs_lock);spin_lock_irq (&sdev->ud.lock);if (sdev->ud.status !=SDEV_ST_AVAILABLE ) {
@@ -101,13 +102,13 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr, tcp_rx =kthread_create (stub_rx_loop, &sdev->ud,"stub_rx" );if (IS_ERR (tcp_rx)) {sockfd_put (socket); -return -EINVAL ; + goto unlock_mutex; } tcp_tx =kthread_create (stub_tx_loop, &sdev->ud,"stub_tx" );if (IS_ERR (tcp_tx)) {kthread_stop (tcp_rx);sockfd_put (socket); -return -EINVAL ; + goto unlock_mutex; }/* get task structs now */
@@ -126,6 +127,8 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,wake_up_process (sdev->ud.tcp_rx);wake_up_process (sdev->ud.tcp_tx); +mutex_unlock (&sdev->ud.sysfs_lock); + }else {dev_info (dev,"stub down\n" );
@@ -136,6 +139,7 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,spin_unlock_irq (&sdev->ud.lock);usbip_event_add (&sdev->ud,SDEV_EVENT_DOWN ); +mutex_unlock (&sdev->ud.sysfs_lock); }return count;
@@ -144,6 +148,8 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,sockfd_put (socket); err:spin_unlock_irq (&sdev->ud.lock); +unlock_mutex: +mutex_unlock (&sdev->ud.sysfs_lock);return -EINVAL ; } static DEVICE_ATTR(usbip_sockfd, S_IWUSR, NULL, store_sockfd);
@@ -309,6 +315,7 @@ static struct stub_device *stub_device_alloc(struct usb_device *udev) sdev->ud.side =USBIP_STUB ; sdev->ud.status =SDEV_ST_AVAILABLE ;spin_lock_init (&sdev->ud.lock); +mutex_init (&sdev->ud.sysfs_lock); sdev->ud.tcp_socket =NULL ; sdev->ud.sockfd =-1 ;
drivers/usb/usbip/usbip_common.h +3 -0
@@ -277,6 +277,9 @@ struct usbip_device {/* lock for status */ spinlock_t lock; +/* mutex for synchronizing sysfs store paths */ +struct mutex sysfs_lock; +int sockfd;struct socket *tcp_socket;
drivers/usb/usbip/usbip_event.c +2 -0
@@ -84,6 +84,7 @@ static void event_handler(struct work_struct *work)while ((ud =get_event ()) !=NULL ) {usbip_dbg_eh ("pending event %lx\n" , ud->event); +mutex_lock (&ud->sysfs_lock);/* * NOTE: shutdown must come first. * Shutdown the device.
@@ -104,6 +105,7 @@ static void event_handler(struct work_struct *work) ud->eh_ops.unusable (ud);unset_event (ud,USBIP_EH_UNUSABLE ); } +mutex_unlock (&ud->sysfs_lock);wake_up (&ud->eh_waitq); }
drivers/usb/usbip/vhci_hcd.c +1 -0
@@ -1115,6 +1115,7 @@ static void vhci_device_init(struct vhci_device *vdev) vdev->ud.side =USBIP_VHCI ; vdev->ud.status =VDEV_ST_NULL ;spin_lock_init (&vdev->ud.lock); +mutex_init (&vdev->ud.sysfs_lock);INIT_LIST_HEAD (&vdev->priv_rx);INIT_LIST_HEAD (&vdev->priv_tx);
drivers/usb/usbip/vhci_sysfs.c +25 -5
@@ -199,6 +199,8 @@ static int vhci_port_disconnect(struct vhci_hcd *vhci_hcd, __u32 rhport)usbip_dbg_vhci_sysfs ("enter\n" ); +mutex_lock (&vdev->ud.sysfs_lock); +/* lock */ spin_lock_irqsave (&vhci->lock, flags);spin_lock (&vdev->ud.lock);
@@ -209,6 +211,7 @@ static int vhci_port_disconnect(struct vhci_hcd *vhci_hcd, __u32 rhport)/* unlock */ spin_unlock (&vdev->ud.lock);spin_unlock_irqrestore (&vhci->lock, flags); +mutex_unlock (&vdev->ud.sysfs_lock);return -EINVAL ; }
@@ -219,6 +222,8 @@ static int vhci_port_disconnect(struct vhci_hcd *vhci_hcd, __u32 rhport)usbip_event_add (&vdev->ud,VDEV_EVENT_DOWN ); +mutex_unlock (&vdev->ud.sysfs_lock); +return 0 ; }
@@ -363,30 +368,36 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,else vdev = &vhci->vhci_hcd_hs->vdev[rhport]; +mutex_lock (&vdev->ud.sysfs_lock); +/* Extract socket from fd. */ socket =sockfd_lookup (sockfd, &err);if (!socket) {dev_err (dev,"failed to lookup sock" ); -return -EINVAL ; + err = -EINVAL ; + goto unlock_mutex; }if (socket->type !=SOCK_STREAM ) {dev_err (dev,"Expecting SOCK_STREAM - found %d" , socket->type);sockfd_put (socket); -return -EINVAL ; + err = -EINVAL ; + goto unlock_mutex; }/* create threads before locking */ tcp_rx =kthread_create (vhci_rx_loop, &vdev->ud,"vhci_rx" );if (IS_ERR (tcp_rx)) {sockfd_put (socket); -return -EINVAL ; + err = -EINVAL ; + goto unlock_mutex; } tcp_tx =kthread_create (vhci_tx_loop, &vdev->ud,"vhci_tx" );if (IS_ERR (tcp_tx)) {kthread_stop (tcp_rx);sockfd_put (socket); -return -EINVAL ; + err = -EINVAL ; + goto unlock_mutex; }/* get task structs now */
@@ -411,7 +422,8 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,* Will be retried from userspace * if there's another free port. */ -return -EBUSY ; + err = -EBUSY ; + goto unlock_mutex; } dev_info(dev, "pdev(%u) rhport(%u) sockfd(%d)\n",
@@ -436,7 +448,15 @@ static ssize_t store_attach(struct device *dev, struct device_attribute *attr,rh_port_connect (vdev, speed); +dev_info (dev,"Device attached\n" ); + +mutex_unlock (&vdev->ud.sysfs_lock); +return count; + +unlock_mutex: +mutex_unlock (&vdev->ud.sysfs_lock); +return err; } static DEVICE_ATTR(attach, S_IWUSR, NULL, store_attach);
drivers/usb/usbip/vudc_sysfs.c +34 -8
72 lines not on this page · raw message
drivers/xen/events/events_base.c +7 -7
@@ -221,7 +221,7 @@ static int xen_irq_info_common_setup(struct irq_info *info, info->evtchn = evtchn; info->cpu = cpu; info->mask_reason =EVT_MASK_REASON_EXPLICIT ; -spin_lock_init (&info->lock); +raw_spin_lock_init (&info->lock); ret =set_evtchn_to_irq (evtchn, irq);if (ret <0 )
@@ -373,28 +373,28 @@ static void do_mask(struct irq_info *info, u8 reason) {unsigned long flags; -spin_lock_irqsave (&info->lock, flags); +raw_spin_lock_irqsave (&info->lock, flags);if (!info->mask_reason)mask_evtchn (info->evtchn); info->mask_reason |= reason; -spin_unlock_irqrestore (&info->lock, flags); +raw_spin_unlock_irqrestore (&info->lock, flags); }static void do_unmask (struct irq_info *info,u8 reason) {unsigned long flags; -spin_lock_irqsave (&info->lock, flags); +raw_spin_lock_irqsave (&info->lock, flags); info->mask_reason &= ~reason;if (!info->mask_reason)unmask_evtchn (info->evtchn); -spin_unlock_irqrestore (&info->lock, flags); +raw_spin_unlock_irqrestore (&info->lock, flags); }#ifdef CONFIG_X86
@@ -1782,7 +1782,7 @@ static void lateeoi_ack_dynirq(struct irq_data *data)if (VALID_EVTCHN (evtchn)) {do_mask (info,EVT_MASK_REASON_EOI_PENDING ); -event_handler_exit (info); +ack_dynirq (data); } }
@@ -1793,7 +1793,7 @@ static void lateeoi_mask_ack_dynirq(struct irq_data *data)if (VALID_EVTCHN (evtchn)) {do_mask (info,EVT_MASK_REASON_EXPLICIT ); -event_handler_exit (info); +ack_dynirq (data); } }
drivers/xen/events/events_internal.h +1 -1
@@ -47,7 +47,7 @@ struct irq_info {unsigned short eoi_cpu;/* EOI must happen on this cpu */ unsigned int irq_epoch;/* If eoi_cpu valid: irq_epoch of event */ u64 eoi_time;/* Time in jiffies when to EOI. */ -spinlock_t lock; +raw_spinlock_t lock;union {unsigned short virq;
fs/cifs/connect.c +0 -1
@@ -3607,7 +3607,6 @@ int cifs_setup_cifs_sb(struct smb_vol *pvolume_info, cifs_sb->prepath =kstrdup (pvolume_info->prepath,GFP_KERNEL );if (cifs_sb->prepath ==NULL )return -ENOMEM ; - cifs_sb->mnt_cifs_flags |=CIFS_MOUNT_USE_PREFIX_PATH ; }return 0 ;
fs/direct-io.c +3 -2
@@ -857,6 +857,7 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page, struct buffer_head *map_bh) {int ret =0 ; +int boundary = sdio->boundary;/* dio_send_cur_page may clear it */ if (dio->op ==REQ_OP_WRITE ) {/*
@@ -895,10 +896,10 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page, sdio->cur_page_fs_offset = sdio->block_in_file << sdio->blkbits; out:/* -* If sdio->boundary then we want to schedule the IO now to +* If boundary then we want to schedule the IO now to * avoid metadata seeks. */ -if (sdio->boundary) { +if (boundary) { ret =dio_send_cur_page (dio, sdio, map_bh);if (sdio->bio)dio_bio_submit (dio, sdio);
fs/gfs2/super.c +6 -4
@@ -989,11 +989,13 @@ void gfs2_freeze_func(struct work_struct *work)static int gfs2_freeze (struct super_block *sb) {struct gfs2_sbd *sdp = sb->s_fs_info; -int error =0 ; +int error;mutex_lock (&sdp->sd_freeze_mutex); -if (atomic_read (&sdp->sd_freeze_state) !=SFS_UNFROZEN ) +if (atomic_read (&sdp->sd_freeze_state) !=SFS_UNFROZEN ) { + error = -EBUSY ; goto out; + }if (test_bit (SDF_SHUTDOWN , &sdp->sd_flags)) { error = -EINVAL ;
@@ -1035,10 +1037,10 @@ static int gfs2_unfreeze(struct super_block *sb)struct gfs2_sbd *sdp = sb->s_fs_info;mutex_lock (&sdp->sd_freeze_mutex); -if (atomic_read (&sdp->sd_freeze_state) !=SFS_FROZEN || +if (atomic_read (&sdp->sd_freeze_state) !=SFS_FROZEN || !gfs2_holder_initialized (&sdp->sd_freeze_gh)) {mutex_unlock (&sdp->sd_freeze_mutex); -return 0 ; +return -EINVAL ; }gfs2_glock_dq_uninit (&sdp->sd_freeze_gh);
fs/ocfs2/aops.c +1 -10
@@ -2309,7 +2309,7 @@ static int ocfs2_dio_end_io_write(struct inode *inode,struct ocfs2_alloc_context *meta_ac =NULL ;handle_t *handle =NULL ;loff_t end = offset + bytes; -int ret =0 , credits =0 , locked =0 ; +int ret =0 , credits =0 ;ocfs2_init_dealloc_ctxt (&dealloc);
@@ -2320,13 +2320,6 @@ static int ocfs2_dio_end_io_write(struct inode *inode, !dwc->dw_orphaned) goto out; -/* ocfs2_file_write_iter will get i_mutex, so we need not lock if we -* are in that context. */ -if (dwc->dw_writer_pid !=task_pid_nr (current)) { -inode_lock (inode); - locked =1 ; - } - ret =ocfs2_inode_lock (inode, &di_bh,1 );if (ret <0 ) {mlog_errno (ret);
@@ -2401,8 +2394,6 @@ static int ocfs2_dio_end_io_write(struct inode *inode,if (meta_ac)ocfs2_free_alloc_context (meta_ac);ocfs2_run_deallocs (osb, &dealloc); -if (locked) -inode_unlock (inode);ocfs2_dio_free_write_ctx (inode, dwc);return ret;
fs/ocfs2/file.c +6 -2
@@ -1250,22 +1250,24 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr) goto bail_unlock; } } +down_write (&OCFS2_I (inode)->ip_alloc_sem); handle =ocfs2_start_trans (osb,OCFS2_INODE_UPDATE_CREDITS +2 *ocfs2_quota_trans_credits (sb));if (IS_ERR (handle)) { status =PTR_ERR (handle);mlog_errno (status); - goto bail_unlock; + goto bail_unlock_alloc; } status =__dquot_transfer (inode, transfer_to);if (status <0 ) goto bail_commit; }else { +down_write (&OCFS2_I (inode)->ip_alloc_sem); handle =ocfs2_start_trans (osb,OCFS2_INODE_UPDATE_CREDITS );if (IS_ERR (handle)) { status =PTR_ERR (handle);mlog_errno (status); - goto bail_unlock; + goto bail_unlock_alloc; } }
@@ -1278,6 +1280,8 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr) bail_commit:ocfs2_commit_trans (osb, handle); +bail_unlock_alloc: +up_write (&OCFS2_I (inode)->ip_alloc_sem); bail_unlock:if (status && inode_locked) {ocfs2_inode_unlock_tracker (inode,1 , &oh, had_lock);
include/linux/mlx5/mlx5_ifc.h +3 -3
@@ -324,11 +324,11 @@ struct mlx5_ifc_flow_table_prop_layout_bits {u8 reserved_at_60[0x18 ];u8 log_max_ft_num[0x8 ]; -u8 reserved_at_80[0x18 ]; +u8 reserved_at_80[0x10 ]; +u8 log_max_flow_counter[0x8 ];u8 log_max_destination[0x8 ]; -u8 log_max_flow_counter[0x8 ]; -u8 reserved_at_a8[0x10 ]; +u8 reserved_at_a0[0x18 ];u8 log_max_flow[0x8 ];u8 reserved_at_c0[0x40 ];
include/linux/virtio_net.h +2 -0
@@ -62,6 +62,8 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,return -EINVAL ; } +skb_reset_mac_header (skb); +if (hdr->flags &VIRTIO_NET_HDR_F_NEEDS_CSUM ) {u16 start =__virtio16_to_cpu (little_endian, hdr->csum_start);u16 off =__virtio16_to_cpu (little_endian, hdr->csum_offset);
include/net/red.h +2 -2
@@ -171,9 +171,9 @@ static inline void red_set_vars(struct red_vars *v)static inline bool red_check_params (u32 qth_min,u32 qth_max,u8 Wlog,u8 Scell_log,u8 *stab) { -if (fls (qth_min) + Wlog >32 ) +if (fls (qth_min) + Wlog >=32 )return false; -if (fls (qth_max) + Wlog >32 ) +if (fls (qth_max) + Wlog >=32 )return false;if (Scell_log >=32 )return false;
include/uapi/linux/ncsi.h new file +115 -0
115 lines not on this page · raw message
kernel/workqueue.c +1 -1
@@ -1379,7 +1379,6 @@ static void __queue_work(int cpu, struct workqueue_struct *wq,*/ WARN_ON_ONCE (!irqs_disabled ()); -debug_work_activate (work);/* if draining, only works from the same workqueue are allowed */ if (unlikely(wq->flags & __WQ_DRAINING) &&
@@ -1462,6 +1461,7 @@ static void __queue_work(int cpu, struct workqueue_struct *wq, worklist = &pwq->delayed_works; } +debug_work_activate (work);insert_work (pwq, work, worklist, work_flags);spin_unlock (&pwq->pool->lock);
net/batman-adv/translation-table.c +2 -0
@@ -902,6 +902,7 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node,hlist_for_each_entry_rcu (vlan, &orig_node->vlan_list, list) { tt_vlan->vid =htons (vlan->vid); tt_vlan->crc =htonl (vlan->tt.crc); + tt_vlan->reserved =0 ; tt_vlan++; }
@@ -985,6 +986,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv, tt_vlan->vid =htons (vlan->vid); tt_vlan->crc =htonl (vlan->tt.crc); + tt_vlan->reserved =0 ; tt_vlan++; }
net/ieee802154/nl-mac.c +4 -3
@@ -559,9 +559,7 @@ ieee802154_llsec_parse_key_id(struct genl_info *info, desc->mode =nla_get_u8 (info->attrs[IEEE802154_ATTR_LLSEC_KEY_MODE ]);if (desc->mode ==IEEE802154_SCF_KEY_IMPLICIT ) { -if (!info->attrs[IEEE802154_ATTR_PAN_ID ] && - !(info->attrs[IEEE802154_ATTR_SHORT_ADDR ] || - info->attrs[IEEE802154_ATTR_HW_ADDR ])) +if (!info->attrs[IEEE802154_ATTR_PAN_ID ])return -EINVAL ; desc->device_addr.pan_id =nla_get_shortaddr (info->attrs[IEEE802154_ATTR_PAN_ID ]);
@@ -570,6 +568,9 @@ ieee802154_llsec_parse_key_id(struct genl_info *info, desc->device_addr.mode =IEEE802154_ADDR_SHORT ; desc->device_addr.short_addr =nla_get_shortaddr (info->attrs[IEEE802154_ATTR_SHORT_ADDR ]); }else { +if (!info->attrs[IEEE802154_ATTR_HW_ADDR ]) +return -EINVAL ; + desc->device_addr.mode =IEEE802154_ADDR_LONG ; desc->device_addr.extended_addr =nla_get_hwaddr (info->attrs[IEEE802154_ATTR_HW_ADDR ]); }
net/ieee802154/nl802154.c +19 -4
@@ -836,8 +836,13 @@ nl802154_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flags, goto nla_put_failure;#ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL +if (wpan_dev->iftype ==NL802154_IFTYPE_MONITOR ) + goto out; +if (nl802154_get_llsec_params (msg, rdev, wpan_dev) <0 ) goto nla_put_failure; + +out:#endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */ genlmsg_end (msg, hdr);
@@ -1402,6 +1407,9 @@ static int nl802154_set_llsec_params(struct sk_buff *skb,u32 changed =0 ;int ret; +if (wpan_dev->iftype ==NL802154_IFTYPE_MONITOR ) +return -EOPNOTSUPP ; +if (info->attrs[NL802154_ATTR_SEC_ENABLED ]) {u8 enabled;
@@ -1562,7 +1570,8 @@ static int nl802154_add_llsec_key(struct sk_buff *skb, struct genl_info *info)struct ieee802154_llsec_key_id id = { };u32 commands[NL802154_CMD_FRAME_NR_IDS /32 ] = { }; -if (nla_parse_nested (attrs,NL802154_KEY_ATTR_MAX , +if (!info->attrs[NL802154_ATTR_SEC_KEY ] || +nla_parse_nested (attrs,NL802154_KEY_ATTR_MAX , info->attrs[NL802154_ATTR_SEC_KEY ], nl802154_key_policy, info->extack))return -EINVAL ;
@@ -1612,7 +1621,8 @@ static int nl802154_del_llsec_key(struct sk_buff *skb, struct genl_info *info)struct nlattr *attrs[NL802154_KEY_ATTR_MAX +1 ];struct ieee802154_llsec_key_id id; -if (nla_parse_nested (attrs,NL802154_KEY_ATTR_MAX , +if (!info->attrs[NL802154_ATTR_SEC_KEY ] || +nla_parse_nested (attrs,NL802154_KEY_ATTR_MAX , info->attrs[NL802154_ATTR_SEC_KEY ], nl802154_key_policy, info->extack))return -EINVAL ;
@@ -1780,7 +1790,8 @@ static int nl802154_del_llsec_dev(struct sk_buff *skb, struct genl_info *info)struct nlattr *attrs[NL802154_DEV_ATTR_MAX +1 ];__le64 extended_addr; -if (nla_parse_nested (attrs,NL802154_DEV_ATTR_MAX , +if (!info->attrs[NL802154_ATTR_SEC_DEVICE ] || +nla_parse_nested (attrs,NL802154_DEV_ATTR_MAX , info->attrs[NL802154_ATTR_SEC_DEVICE ], nl802154_dev_policy, info->extack))return -EINVAL ;
@@ -1940,7 +1951,8 @@ static int nl802154_del_llsec_devkey(struct sk_buff *skb, struct genl_info *infostruct ieee802154_llsec_device_key key;__le64 extended_addr; -if (nla_parse_nested (attrs,NL802154_DEVKEY_ATTR_MAX , +if (!info->attrs[NL802154_ATTR_SEC_DEVKEY ] || +nla_parse_nested (attrs,NL802154_DEVKEY_ATTR_MAX , info->attrs[NL802154_ATTR_SEC_DEVKEY ], nl802154_devkey_policy, info->extack))return -EINVAL ;
@@ -2115,6 +2127,9 @@ static int nl802154_del_llsec_seclevel(struct sk_buff *skb,struct wpan_dev *wpan_dev = dev->ieee802154_ptr;struct ieee802154_llsec_seclevel sl; +if (wpan_dev->iftype ==NL802154_IFTYPE_MONITOR ) +return -EOPNOTSUPP ; +if (!info->attrs[NL802154_ATTR_SEC_LEVEL ] ||llsec_parse_seclevel (info->attrs[NL802154_ATTR_SEC_LEVEL ], &sl) <0 )
net/ipv4/netfilter/arp_tables.c +2 -0
@@ -1196,6 +1196,8 @@ static int translate_compat_table(struct net *net,if (!newinfo) goto out_unlock; +memset (newinfo->entries,0 , size); + newinfo->number = compatr->num_entries;for (i =0 ; i <NF_ARP_NUMHOOKS ; i++) { newinfo->hook_entry[i] = compatr->hook_entry[i];
net/ipv4/netfilter/ip_tables.c +2 -0
@@ -1432,6 +1432,8 @@ translate_compat_table(struct net *net,if (!newinfo) goto out_unlock; +memset (newinfo->entries,0 , size); + newinfo->number = compatr->num_entries;for (i =0 ; i <NF_INET_NUMHOOKS ; i++) { newinfo->hook_entry[i] = compatr->hook_entry[i];
net/ipv6/netfilter/ip6_tables.c +2 -0
@@ -1449,6 +1449,8 @@ translate_compat_table(struct net *net,if (!newinfo) goto out_unlock; +memset (newinfo->entries,0 , size); + newinfo->number = compatr->num_entries;for (i =0 ; i <NF_INET_NUMHOOKS ; i++) { newinfo->hook_entry[i] = compatr->hook_entry[i];
net/ipv6/route.c +5 -3
@@ -3283,9 +3283,11 @@ static int ip6_route_multipath_add(struct fib6_config *cfg,* nexthops have been replaced by first new, the rest should * be added to it. */ - cfg->fc_nlinfo.nlh->nlmsg_flags &= ~(NLM_F_EXCL | -NLM_F_REPLACE ); - cfg->fc_nlinfo.nlh->nlmsg_flags |=NLM_F_CREATE ; +if (cfg->fc_nlinfo.nlh) { + cfg->fc_nlinfo.nlh->nlmsg_flags &= ~(NLM_F_EXCL | +NLM_F_REPLACE ); + cfg->fc_nlinfo.nlh->nlmsg_flags |=NLM_F_CREATE ; + } nhn++; }
net/mac802154/llsec.c +1 -1
@@ -160,7 +160,7 @@ llsec_key_alloc(const struct ieee802154_llsec_key *template)crypto_free_skcipher (key->tfm0); err_tfm:for (i =0 ; i <ARRAY_SIZE (key->tfm); i++) -if (key->tfm[i]) +if (!IS_ERR_OR_NULL (key->tfm[i]))crypto_free_aead (key->tfm[i]);kzfree (key);
net/ncsi/Makefile +1 -1
@@ -1,4 +1,4 @@ # # Makefile for NCSI API # -obj-$(CONFIG_NET_NCSI) += ncsi-cmd.o ncsi-rsp.o ncsi-aen.o ncsi-manage.o +obj-$(CONFIG_NET_NCSI) += ncsi-cmd.o ncsi-rsp.o ncsi-aen.o ncsi-manage.o ncsi-netlink.o
net/ncsi/internal.h +17 -18
@@ -68,15 +68,6 @@ enum {NCSI_MODE_MAX }; -enum { -NCSI_FILTER_BASE =0 , -NCSI_FILTER_VLAN =0 , -NCSI_FILTER_UC , -NCSI_FILTER_MC , -NCSI_FILTER_MIXED , -NCSI_FILTER_MAX -}; -struct ncsi_channel_version {u32 version;/* Supported BCD encoded NCSI version */ u32 alpha2;/* Supported BCD encoded NCSI version */
@@ -98,11 +89,18 @@ struct ncsi_channel_mode {u32 data[8 ];/* Data entries */ }; -struct ncsi_channel_filter { -u32 index;/* Index of channel filters */ -u32 total;/* Total entries in the filter table */ -u64 bitmap;/* Bitmap of valid entries */ -u32 data[];/* Data for the valid entries */ +struct ncsi_channel_mac_filter { +u8 n_uc; +u8 n_mc; +u8 n_mixed; +u64 bitmap; +unsigned char *addrs; +}; + +struct ncsi_channel_vlan_filter { +u8 n_vids; +u64 bitmap; +u16 *vids; };struct ncsi_channel_stats {
@@ -186,7 +184,9 @@ struct ncsi_channel {struct ncsi_channel_version version;struct ncsi_channel_cap caps[NCSI_CAP_MAX ];struct ncsi_channel_mode modes[NCSI_MODE_MAX ]; -struct ncsi_channel_filter *filters[NCSI_FILTER_MAX ]; +/* Filtering Settings */ +struct ncsi_channel_mac_filter mac_filter; +struct ncsi_channel_vlan_filter vlan_filter;struct ncsi_channel_stats stats;struct {struct timer_list timer;
@@ -276,6 +276,8 @@ struct ncsi_dev_priv {unsigned int package_num;/* Number of packages */ struct list_head packages;/* List of packages */ struct ncsi_channel *hot_channel;/* Channel was ever active */ +struct ncsi_package *force_package;/* Force a specific package */ +struct ncsi_channel *force_channel;/* Force a specific channel */ struct ncsi_request requests[256 ];/* Request table */ unsigned int request_id;/* Last used request ID */ #define NCSI_REQ_START_IDX 1
@@ -318,9 +320,6 @@ extern spinlock_t ncsi_dev_lock;list_for_each_entry_rcu (nc, &np->channels, node)/* Resources */ -int ncsi_find_filter(struct ncsi_channel *nc, int table, void *data); -int ncsi_add_filter (struct ncsi_channel *nc,int table,void *data); -int ncsi_remove_filter (struct ncsi_channel *nc,int table,int index); void ncsi_start_channel_monitor(struct ncsi_channel *nc);void ncsi_stop_channel_monitor (struct ncsi_channel *nc); struct ncsi_channel *ncsi_find_channel(struct ncsi_package *np,
net/ncsi/ncsi-aen.c +14 -1
@@ -73,6 +73,9 @@ static int ncsi_aen_handler_lsc(struct ncsi_dev_priv *ndp, ncm->data[2 ] = data; ncm->data[4 ] =ntohl (lsc->oem_status); +netdev_info (ndp->ndev.dev,"NCSI: LSC AEN - channel %u state %s\n" , + nc->id, data &0x1 ?"up" :"down" ); + chained = !list_empty (&nc->link); state = nc->state;spin_unlock_irqrestore (&nc->lock, flags);
@@ -145,6 +148,8 @@ static int ncsi_aen_handler_hncdsc(struct ncsi_dev_priv *ndp, ncm = &nc->modes[NCSI_MODE_LINK ]; hncdsc = (struct ncsi_aen_hncdsc_pkt *)h; ncm->data[3 ] =ntohl (hncdsc->status); +netdev_info (ndp->ndev.dev,"NCSI: HNCDSC AEN - channel %u state %s\n" , + nc->id, ncm->data[3 ] &0x3 ?"up" :"down" );if (!list_empty (&nc->link) || nc->state !=NCSI_CHANNEL_ACTIVE ) {spin_unlock_irqrestore (&nc->lock, flags);
@@ -212,10 +217,18 @@ int ncsi_aen_handler(struct ncsi_dev_priv *ndp, struct sk_buff *skb) } ret =ncsi_validate_aen_pkt (h, nah->payload); -if (ret) +if (ret) { +netdev_warn (ndp->ndev.dev, +"NCSI: 'bad' packet ignored for AEN type 0x%x\n" , + h->type); goto out; + } ret = nah->handler (ndp, h); +if (ret) +netdev_err (ndp->ndev.dev, +"NCSI: Handler for AEN type 0x%x returned %d\n" , + h->type, ret); out:consume_skb (skb);return ret;
net/ncsi/ncsi-manage.c +143 -199
586 lines not on this page · raw message
net/ncsi/ncsi-netlink.c new file +415 -0
415 lines not on this page · raw message
net/ncsi/ncsi-netlink.h new file +20 -0
@@ -0,0 +1,20 @@ +/* +* Copyright Samuel Mendoza-Jonas, IBM Corporation 2018. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +*/ + +#ifndef __NCSI_NETLINK_H__ +#define __NCSI_NETLINK_H__ + +#include <linux/netdevice.h> + +#include "internal.h" + +int ncsi_init_netlink (struct net_device *dev); +int ncsi_unregister_netlink (struct net_device *dev); + +#endif /* __NCSI_NETLINK_H__ */
net/ncsi/ncsi-rsp.c +94 -121
371 lines not on this page · raw message
net/netfilter/x_tables.c +2 -8
@@ -638,7 +638,7 @@ void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr, {const struct xt_match *match = m->u.kernel.match;struct compat_xt_entry_match *cm = (struct compat_xt_entry_match *)m; -int pad, off =xt_compat_match_offset (match); +int off =xt_compat_match_offset (match);u_int16_t msize = cm->u.user.match_size;char name[sizeof (m->u.user.name)];
@@ -648,9 +648,6 @@ void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr, match->compat_from_user (m->data, cm->data); else memcpy(m->data, cm->data, msize - sizeof(*cm)); - pad =XT_ALIGN (match->matchsize) - match->matchsize; -if (pad >0 ) -memset (m->data + match->matchsize,0 , pad); msize += off; m->u.user.match_size = msize;
@@ -993,7 +990,7 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr, {const struct xt_target *target = t->u.kernel.target;struct compat_xt_entry_target *ct = (struct compat_xt_entry_target *)t; -int pad, off =xt_compat_target_offset (target); +int off =xt_compat_target_offset (target);u_int16_t tsize = ct->u.user.target_size;char name[sizeof (t->u.user.name)];
@@ -1003,9 +1000,6 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr, target->compat_from_user (t->data, ct->data); else memcpy(t->data, ct->data, tsize - sizeof(*ct)); - pad =XT_ALIGN (target->targetsize) - target->targetsize; -if (pad >0 ) -memset (t->data + target->targetsize,0 , pad); tsize += off; t->u.user.target_size = tsize;
net/nfc/llcp_sock.c +10 -0
@@ -120,11 +120,13 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) llcp_sock->service_name_len, GFP_KERNEL);if (!llcp_sock->service_name) { +nfc_llcp_local_put (llcp_sock->local); ret = -ENOMEM ; goto put_dev; } llcp_sock->ssap =nfc_llcp_get_sdp_ssap (local, llcp_sock);if (llcp_sock->ssap ==LLCP_SAP_MAX ) { +nfc_llcp_local_put (llcp_sock->local);kfree (llcp_sock->service_name); llcp_sock->service_name =NULL ; ret = -EADDRINUSE ;
@@ -684,6 +686,10 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr, ret = -EISCONN ; goto error; } +if (sk->sk_state ==LLCP_CONNECTING ) { + ret = -EINPROGRESS ; + goto error; + } dev =nfc_get_device (addr->dev_idx);if (dev ==NULL ) {
@@ -715,6 +721,7 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr, llcp_sock->local =nfc_llcp_local_get (local); llcp_sock->ssap =nfc_llcp_get_local_ssap (local);if (llcp_sock->ssap ==LLCP_SAP_MAX ) { +nfc_llcp_local_put (llcp_sock->local); ret = -ENOMEM ; goto put_dev; }
@@ -752,8 +759,11 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr, sock_unlink:nfc_llcp_put_ssap (local, llcp_sock->ssap); +nfc_llcp_local_put (llcp_sock->local);nfc_llcp_sock_unlink (&local->connecting_sockets, sk); +kfree (llcp_sock->service_name); + llcp_sock->service_name =NULL ; put_dev:nfc_put_device (dev);
net/sched/sch_teql.c +3 -0
@@ -138,6 +138,9 @@ teql_destroy(struct Qdisc *sch)struct teql_sched_data *dat =qdisc_priv (sch);struct teql_master *master = dat->m; +if (!master) +return ; + prev = master->slaves;if (prev) { do {
net/tipc/socket.c +1 -1
@@ -840,7 +840,7 @@ void tipc_sk_mcast_rcv(struct net *net, struct sk_buff_head *arrvq,spin_lock_bh (&inputq->lock);if (skb_peek (arrvq) == skb) {skb_queue_splice_tail_init (&tmpq, inputq); -kfree_skb (__skb_dequeue (arrvq)); +__skb_dequeue (arrvq); }spin_unlock_bh (&inputq->lock);__skb_queue_purge (&tmpq);
net/wireless/sme.c +1 -1
@@ -530,7 +530,7 @@ static int cfg80211_sme_connect(struct wireless_dev *wdev,cfg80211_sme_free (wdev); } -if (WARN_ON (wdev->conn)) +if (wdev->conn)return -EINPROGRESS ; wdev->conn =kzalloc (sizeof (*wdev->conn),GFP_KERNEL );
sound/drivers/aloop.c +8 -3
@@ -1062,6 +1062,14 @@ static int loopback_mixer_new(struct loopback *loopback, int notify)return -ENOMEM ; kctl->id.device = dev; kctl->id.subdevice = substr; + +/* Add the control before copying the id so that +* the numid field of the id is set in the copy. +*/ + err =snd_ctl_add (card, kctl); +if (err <0 ) +return err; +switch (idx) {case ACTIVE_IDX : setup->active_id = kctl->id;
@@ -1078,9 +1086,6 @@ static int loopback_mixer_new(struct loopback *loopback, int notify)default :break ; } - err =snd_ctl_add (card, kctl); -if (err <0 ) -return err; } } }
sound/soc/codecs/wm8960.c +7 -1
@@ -710,7 +710,13 @@ int wm8960_configure_pll(struct snd_soc_codec *codec, int freq_in, best_freq_out = -EINVAL ; *sysclk_idx = *dac_idx = *bclk_idx =-1 ; -for (i =0 ; i <ARRAY_SIZE (sysclk_divs); ++i) { +/* +* From Datasheet, the PLL performs best when f2 is between +* 90MHz and 100MHz, the desired sysclk output is 11.2896MHz +* or 12.288MHz, then sysclkdiv = 2 is the best choice. +* So search sysclk_divs from 2 to 1 other than from 1 to 2. +*/ +for (i =ARRAY_SIZE (sysclk_divs) -1 ; i >=0 ; --i) {if (sysclk_divs[i] ==-1 )continue ;for (j =0 ; j <ARRAY_SIZE (dac_divs); ++j) {
sound/soc/intel/atom/sst-mfld-platform-pcm.c +3 -3
@@ -508,14 +508,14 @@ static struct snd_soc_dai_driver sst_platform_dai[] = { .channels_min = SST_STEREO, .channels_max = SST_STEREO, .rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, + .formats = SNDRV_PCM_FMTBIT_S16_LE, }, .capture = { .stream_name = "Headset Capture", .channels_min = 1, .channels_max = 2, .rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, + .formats = SNDRV_PCM_FMTBIT_S16_LE, }, }, {
@@ -526,7 +526,7 @@ static struct snd_soc_dai_driver sst_platform_dai[] = { .channels_min = SST_STEREO, .channels_max = SST_STEREO, .rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000, - .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE, + .formats = SNDRV_PCM_FMTBIT_S16_LE, }, }, {
sound/soc/sunxi/sun4i-codec.c +5 -0
@@ -1199,6 +1199,7 @@ static struct snd_soc_card *sun4i_codec_create_card(struct device *dev)return ERR_PTR (-ENOMEM ); card->dev = dev; + card->owner =THIS_MODULE ; card->name ="sun4i-codec" ; card->dapm_widgets = sun4i_codec_card_dapm_widgets; card->num_dapm_widgets =ARRAY_SIZE (sun4i_codec_card_dapm_widgets);
@@ -1231,6 +1232,7 @@ static struct snd_soc_card *sun6i_codec_create_card(struct device *dev)return ERR_PTR (-ENOMEM ); card->dev = dev; + card->owner =THIS_MODULE ; card->name ="A31 Audio Codec" ; card->dapm_widgets = sun6i_codec_card_dapm_widgets; card->num_dapm_widgets =ARRAY_SIZE (sun6i_codec_card_dapm_widgets);
@@ -1284,6 +1286,7 @@ static struct snd_soc_card *sun8i_a23_codec_create_card(struct device *dev)return ERR_PTR (-ENOMEM ); card->dev = dev; + card->owner =THIS_MODULE ; card->name ="A23 Audio Codec" ; card->dapm_widgets = sun6i_codec_card_dapm_widgets; card->num_dapm_widgets =ARRAY_SIZE (sun6i_codec_card_dapm_widgets);
@@ -1322,6 +1325,7 @@ static struct snd_soc_card *sun8i_h3_codec_create_card(struct device *dev)return ERR_PTR (-ENOMEM ); card->dev = dev; + card->owner =THIS_MODULE ; card->name ="H3 Audio Codec" ; card->dapm_widgets = sun6i_codec_card_dapm_widgets; card->num_dapm_widgets =ARRAY_SIZE (sun6i_codec_card_dapm_widgets);
@@ -1360,6 +1364,7 @@ static struct snd_soc_card *sun8i_v3s_codec_create_card(struct device *dev)return ERR_PTR (-ENOMEM ); card->dev = dev; + card->owner =THIS_MODULE ; card->name ="V3s Audio Codec" ; card->dapm_widgets = sun6i_codec_card_dapm_widgets; card->num_dapm_widgets =ARRAY_SIZE (sun6i_codec_card_dapm_widgets);
tools/perf/util/map.c +3 -4
@@ -93,8 +93,7 @@ static inline bool replace_android_lib(const char *filename, char *newfilename)if (!strncmp (filename,"/system/lib/" ,12 )) {char *ndk, *app;const char *arch; -size_t ndk_length; -size_t app_length; +int ndk_length, app_length; ndk =getenv ("NDK_ROOT" ); app =getenv ("APP_PLATFORM" );
@@ -122,8 +121,8 @@ static inline bool replace_android_lib(const char *filename, char *newfilename)if (new_length >PATH_MAX )return false;snprintf (newfilename, new_length, -"%s/platforms/%s/arch-%s/usr/lib/%s" , - ndk, app, arch, libname); +"%.*s/platforms/%.*s/arch-%s/usr/lib/%s" , + ndk_length, ndk, app_length, app, arch, libname);return true; }