Linux 4.19.235
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.235 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.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/include/asm/spectre.h | 6 +++ arch/arm/kernel/entry-armv.S | 4 +- arch/riscv/kernel/module.c | 21 +++++++++--- drivers/gpio/gpio-ts4900.c | 24 ++++++++++--- drivers/net/ethernet/cadence/macb_main.c | 25 +++++++++++++- drivers/net/ethernet/freescale/gianfar_ethtool.c | 1 drivers/net/ethernet/nxp/lpc_eth.c | 5 ++ drivers/net/ethernet/qlogic/qed/qed_sriov.c | 18 ++++++---- drivers/net/ethernet/qlogic/qed/qed_vf.c | 7 ++++ drivers/net/ethernet/ti/cpts.c | 4 +- drivers/net/ethernet/xilinx/xilinx_emaclite.c | 4 +- drivers/net/phy/dp83822.c | 2 - drivers/net/xen-netback/xenbus.c | 13 ++----- drivers/nfc/port100.c | 2 + drivers/staging/gdm724x/gdm_lte.c | 5 +- drivers/virtio/virtio.c | 40 ++++++++++++----------- fs/btrfs/extent-tree.c | 1 fs/ext4/resize.c | 5 ++ include/linux/mlx5/mlx5_ifc.h | 4 +- include/linux/virtio.h | 1 include/linux/virtio_config.h | 3 + kernel/trace/trace.c | 10 +++-- net/ax25/af_ax25.c | 7 ++++ net/core/net-sysfs.c | 2 - net/sctp/diag.c | 9 +---- tools/testing/selftests/memfd/memfd_test.c | 1 27 files changed, 157 insertions(+), 69 deletions(-)
Clément Léger (1):
net: phy: DP83822: clear MISR2 register to disable interrupts
Dan Carpenter (1):
staging: gdm724x: fix use after free in gdm_lte_rx()
Duoming Zhou (1):
ax25: Fix NULL pointer dereference in ax25_kill_by_device
Emil Renner Berthing (1):
riscv: Fix auipc+jalr relocation range checks
Eric Dumazet (1):
sctp: fix kernel-infoleak for SCTP sockets
Greg Kroah-Hartman (1):
Linux 4.19.235
Jia-Ju Bai (1):
net: qlogic: check the return value of dma_alloc_coherent() in qed_vf_hw_prepare()
Jiasheng Jiang (2):
net: ethernet: ti: cpts: Handle error for clk_enable
net: ethernet: lpc_eth: Handle error for clk_enable
Josh Triplett (1):
ext4: add check to prevent attempting to resize an fs with sparse_super2
Marek Marczykowski-Górecki (2):
Revert "xen-netback: remove 'hotplug-status' once it has served its purpose" Revert "xen-netback: Check for hotplug-status existence before watching"
Mark Featherston (1):
gpio: ts4900: Do not set DAT and OE together
Miaoqian Lin (2):
ethernet: Fix error handling in xemaclite_of_probe
gianfar: ethtool: Fix refcount leak in gfar_get_ts_info
Michael S. Tsirkin (2):
virtio: unexport virtio_finalize_features
virtio: acknowledge all features before access
Mike Kravetz (1):
selftests/memfd: clean up mapping in mfd_fail_write
Mohammad Kabat (1):
net/mlx5: Fix size field in bufferx_reg struct
Pavel Skripkin (1):
NFC: port100: fix use-after-free in port100_send_complete
Qu Wenruo (1):
btrfs: unlock newly allocated extent buffer after error
Randy Dunlap (1):
ARM: Spectre-BHB: provide empty stub for non-config
Robert Hancock (1):
net: macb: Fix lost RX packet wakeup race in NAPI receive
Russell King (Oracle) (1):
ARM: fix Thumb2 regression with Spectre BHB
Sven Schnelle (1):
tracing: Ensure trace buffer is at least 4096 bytes large
Tom Rix (1):
qed: return status of qed_iov_get_link
suresh kumar (1):
net-sysfs: add check for netdevice being present to speed_show
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 234 +SUBLEVEL = 235 EXTRAVERSION = NAME = "People's Front"
arch/arm/include/asm/spectre.h +6 -0
@@ -25,7 +25,13 @@ enum { SPECTRE_V2_METHOD_LOOP8 = BIT(__SPECTRE_V2_METHOD_LOOP8), }; +#ifdef CONFIG_GENERIC_CPU_VULNERABILITIES void spectre_v2_update_state (unsigned int state,unsigned int methods); +#else +static inline void spectre_v2_update_state (unsigned int state, +unsigned int methods) +{} +#endif int spectre_bhb_update_vectors (unsigned int method);
arch/arm/kernel/entry-armv.S +2 -2
@@ -1067,9 +1067,9 @@ vector_bhb_loop8_\name: @ bhb workaround mov r0, #8 -1: b . + 4 +3: b . + 4 subs r0, r0, #1 - bne 1b + bne 3b dsb isb b 2b
arch/riscv/kernel/module.c +16 -5
@@ -21,6 +21,19 @@#include <asm/pgtable.h> #include <asm/sections.h> +/* +* The auipc+jalr instruction pair can reach any PC-relative offset +* in the range [-2^31 - 2^11, 2^31 - 2^11) +*/ +static bool riscv_insn_valid_32bit_offset (ptrdiff_t val) +{ +#ifdef CONFIG_32BIT +return true; +#else +return (-(1L <<31 ) - (1L <<11 )) <= val && val < ((1L <<31 ) - (1L <<11 )); +#endif +} +static int apply_r_riscv_32_rela (struct module *me,u32 *location,Elf_Addr v) {if (v != (u32 )v) {
@@ -103,7 +116,7 @@ static int apply_r_riscv_pcrel_hi20_rela(struct module *me, u32 *location,ptrdiff_t offset = (void *)v - (void *)location;s32 hi20; -if (offset != (s32 )offset) { +if (!riscv_insn_valid_32bit_offset (offset)) {pr_err ("%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n" , me->name, (long long )v, location);
@@ -205,10 +218,9 @@ static int apply_r_riscv_call_plt_rela(struct module *me, u32 *location, Elf_Addr v) {ptrdiff_t offset = (void *)v - (void *)location; -s32 fill_v = offset;u32 hi20, lo12; -if (offset != fill_v) { +if (!riscv_insn_valid_32bit_offset (offset)) {/* Only emit the plt entry if offset over 32-bit range */ if (IS_ENABLED (CONFIG_MODULE_SECTIONS )) { offset =module_emit_plt_entry (me, v);
@@ -232,10 +244,9 @@ static int apply_r_riscv_call_rela(struct module *me, u32 *location, Elf_Addr v) {ptrdiff_t offset = (void *)v - (void *)location; -s32 fill_v = offset;u32 hi20, lo12; -if (offset != fill_v) { +if (!riscv_insn_valid_32bit_offset (offset)) {pr_err ("%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n" , me->name, (long long )v, location);
drivers/gpio/gpio-ts4900.c +19 -5
@@ -1,7 +1,7 @@/* * Digital I/O driver for Technologic Systems I2C FPGA Core * -* Copyright (C) 2015 Technologic Systems +* Copyright (C) 2015, 2018 Technologic Systems * Copyright (C) 2016 Savoir-Faire Linux * * This program is free software; you can redistribute it and/or
@@ -52,19 +52,33 @@ static int ts4900_gpio_direction_input(struct gpio_chip *chip, {struct ts4900_gpio_priv *priv =gpiochip_get_data (chip); -/* -* This will clear the output enable bit, the other bits are -* dontcare when this is cleared +/* Only clear the OE bit here, requires a RMW. Prevents potential issue +* with OE and data getting to the physical pin at different times. */ -return regmap_write (priv->regmap, offset,0 ); +return regmap_update_bits (priv->regmap, offset,TS4900_GPIO_OE ,0 ); }static int ts4900_gpio_direction_output (struct gpio_chip *chip,unsigned int offset,int value) {struct ts4900_gpio_priv *priv =gpiochip_get_data (chip); +unsigned int reg;int ret; +/* If changing from an input to an output, we need to first set the +* proper data bit to what is requested and then set OE bit. This +* prevents a glitch that can occur on the IO line +*/ +regmap_read (priv->regmap, offset, ®); +if (!(reg &TS4900_GPIO_OE )) { +if (value) + reg =TS4900_GPIO_OUT ; +else + reg &= ~TS4900_GPIO_OUT ; + +regmap_write (priv->regmap, offset, reg); + } +if (value) ret =regmap_write (priv->regmap, offset,TS4900_GPIO_OE |TS4900_GPIO_OUT );
drivers/net/ethernet/cadence/macb_main.c +24 -1
@@ -1269,7 +1269,14 @@ static int macb_poll(struct napi_struct *napi, int budget)if (work_done < budget) {napi_complete_done (napi, work_done); -/* Packets received while interrupts were disabled */ +/* RSR bits only seem to propagate to raise interrupts when +* interrupts are enabled at the time, so if bits are already +* set due to packets received while interrupts were disabled, +* they will not cause another interrupt to be generated when +* interrupts are re-enabled. +* Check for this case here. This has been seen to happen +* around 30% of the time under heavy network load. +*/ status =macb_readl (bp,RSR );if (status) {if (bp->caps &MACB_CAPS_ISR_CLEAR_ON_WRITE )
@@ -1277,6 +1284,22 @@ static int macb_poll(struct napi_struct *napi, int budget)napi_reschedule (napi); }else {queue_writel (queue,IER , bp->rx_intr_mask); + +/* In rare cases, packets could have been received in +* the window between the check above and re-enabling +* interrupts. Therefore, a double-check is required +* to avoid losing a wakeup. This can potentially race +* with the interrupt handler doing the same actions +* if an interrupt is raised just after enabling them, +* but this should be harmless. +*/ + status =macb_readl (bp,RSR ); +if (unlikely (status)) { +queue_writel (queue,IDR , bp->rx_intr_mask); +if (bp->caps &MACB_CAPS_ISR_CLEAR_ON_WRITE ) +queue_writel (queue,ISR ,MACB_BIT (RCOMP )); +napi_schedule (napi); + } } }
drivers/net/ethernet/freescale/gianfar_ethtool.c +1 -0
@@ -1528,6 +1528,7 @@ static int gfar_get_ts_info(struct net_device *dev, ptp_node =of_find_compatible_node (NULL ,NULL ,"fsl,etsec-ptp" );if (ptp_node) { ptp_dev =of_find_device_by_node (ptp_node); +of_node_put (ptp_node);if (ptp_dev) ptp =platform_get_drvdata (ptp_dev); }
drivers/net/ethernet/nxp/lpc_eth.c +4 -1
@@ -1512,6 +1512,7 @@ static int lpc_eth_drv_resume(struct platform_device *pdev) {struct net_device *ndev =platform_get_drvdata (pdev);struct netdata_local *pldat; +int ret;if (device_may_wakeup (&pdev->dev))disable_irq_wake (ndev->irq);
@@ -1521,7 +1522,9 @@ static int lpc_eth_drv_resume(struct platform_device *pdev) pldat =netdev_priv (ndev);/* Enable interface clock */ -clk_enable (pldat->clk); + ret =clk_enable (pldat->clk); +if (ret) +return ret;/* Reset and initialize */ __lpc_eth_reset (pldat);
drivers/net/ethernet/qlogic/qed/qed_sriov.c +11 -7
@@ -3800,11 +3800,11 @@ bool qed_iov_mark_vf_flr(struct qed_hwfn *p_hwfn, u32 *p_disabled_vfs)return found; } -static void qed_iov_get_link (struct qed_hwfn *p_hwfn, -u16 vfid, -struct qed_mcp_link_params *p_params, -struct qed_mcp_link_state *p_link, -struct qed_mcp_link_capabilities *p_caps) +static int qed_iov_get_link (struct qed_hwfn *p_hwfn, +u16 vfid, +struct qed_mcp_link_params *p_params, +struct qed_mcp_link_state *p_link, +struct qed_mcp_link_capabilities *p_caps) { struct qed_vf_info *p_vf = qed_iov_get_vf_info(p_hwfn, vfid,
@@ -3812,7 +3812,7 @@ static void qed_iov_get_link(struct qed_hwfn *p_hwfn,struct qed_bulletin_content *p_bulletin;if (!p_vf) -return ; +return -EINVAL ; p_bulletin = p_vf->bulletin.p_virt;
@@ -3822,6 +3822,7 @@ static void qed_iov_get_link(struct qed_hwfn *p_hwfn,__qed_vf_get_link_state (p_hwfn, p_link, p_bulletin);if (p_caps)__qed_vf_get_link_caps (p_hwfn, p_caps, p_bulletin); +return 0 ; } static int
@@ -4676,6 +4677,7 @@ static int qed_get_vf_config(struct qed_dev *cdev,struct qed_public_vf_info *vf_info;struct qed_mcp_link_state link;u32 tx_rate; +int ret;/* Sanitize request */ if (IS_VF (cdev))
@@ -4689,7 +4691,9 @@ static int qed_get_vf_config(struct qed_dev *cdev, vf_info =qed_iov_get_public_vf_info (hwfn, vf_id, true); -qed_iov_get_link (hwfn, vf_id,NULL , &link,NULL ); + ret =qed_iov_get_link (hwfn, vf_id,NULL , &link,NULL ); +if (ret) +return ret;/* Fill information about VF */ ivi->vf = vf_id;
drivers/net/ethernet/qlogic/qed/qed_vf.c +7 -0
@@ -539,6 +539,9 @@ int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn) p_iov->bulletin.size, &p_iov->bulletin.phys, GFP_KERNEL); +if (!p_iov->bulletin.p_virt) + goto free_pf2vf_reply; + DP_VERBOSE(p_hwfn, QED_MSG_IOV, "VF's bulletin Board [%p virt 0x%llx phys 0x%08x bytes]\n", p_iov->bulletin.p_virt,
@@ -578,6 +581,10 @@ int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn)return rc; +free_pf2vf_reply: +dma_free_coherent (&p_hwfn->cdev->pdev->dev, +sizeof (union pfvf_tlvs ), + p_iov->pf2vf_reply, p_iov->pf2vf_reply_phys); free_vf2pf_request: dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(union vfpf_tlvs),
drivers/net/ethernet/ti/cpts.c +3 -1
@@ -445,7 +445,9 @@ int cpts_register(struct cpts *cpts)for (i =0 ; i <CPTS_MAX_EVENTS ; i++)list_add (&cpts->pool_data[i].list, &cpts->pool); -clk_enable (cpts->refclk); + err =clk_enable (cpts->refclk); +if (err) +return err;cpts_write32 (cpts,CPTS_EN , control);cpts_write32 (cpts,TS_PEND_EN , int_enable);
drivers/net/ethernet/xilinx/xilinx_emaclite.c +3 -1
@@ -1173,7 +1173,7 @@ static int xemaclite_of_probe(struct platform_device *ofdev)if (rc) {dev_err (dev,"Cannot register network device, aborting\n" ); - goto error; + goto put_node; } dev_info(dev,
@@ -1181,6 +1181,8 @@ static int xemaclite_of_probe(struct platform_device *ofdev) (unsigned int __force)ndev->mem_start, lp->base_addr, ndev->irq);return 0 ; +put_node: +of_node_put (lp->phy_node); error:free_netdev (ndev);return rc;
drivers/net/phy/dp83822.c +1 -1
@@ -244,7 +244,7 @@ static int dp83822_config_intr(struct phy_device *phydev)if (err <0 )return err; - err =phy_write (phydev,MII_DP83822_MISR1 ,0 ); + err =phy_write (phydev,MII_DP83822_MISR2 ,0 );if (err <0 )return err;
drivers/net/xen-netback/xenbus.c +5 -8
@@ -499,6 +499,7 @@ static void backend_disconnect(struct backend_info *be)unsigned int queue_index;xen_unregister_watchers (vif); +xenbus_rm (XBT_NIL , be->dev->nodename,"hotplug-status" );#ifdef CONFIG_DEBUG_FS xenvif_debugfs_delif (vif);#endif /* CONFIG_DEBUG_FS */
@@ -1043,15 +1044,11 @@ static void connect(struct backend_info *be)xenvif_carrier_on (be->vif);unregister_hotplug_status_watch (be); -if (xenbus_exists (XBT_NIL , dev->nodename,"hotplug-status" )) { - err =xenbus_watch_pathfmt (dev, &be->hotplug_status_watch, -NULL , hotplug_status_changed, -"%s/%s" , dev->nodename, -"hotplug-status" ); -if (err) - goto err; + err =xenbus_watch_pathfmt (dev, &be->hotplug_status_watch,NULL , + hotplug_status_changed, +"%s/%s" , dev->nodename,"hotplug-status" ); +if (!err) be->have_hotplug_status_watch =1 ; - }netif_tx_wake_all_queues (be->vif->dev);
drivers/nfc/port100.c +2 -0
@@ -1618,7 +1618,9 @@ static int port100_probe(struct usb_interface *interface,nfc_digital_free_device (dev->nfc_digital_dev); error: +usb_kill_urb (dev->in_urb);usb_free_urb (dev->in_urb); +usb_kill_urb (dev->out_urb);usb_free_urb (dev->out_urb);usb_put_dev (dev->udev);
drivers/staging/gdm724x/gdm_lte.c +3 -2
@@ -76,14 +76,15 @@ static void tx_complete(void *arg)static int gdm_lte_rx (struct sk_buff *skb,struct nic *nic,int nic_type) { -int ret; +int ret, len; + len = skb->len +ETH_HLEN ; ret =netif_rx_ni (skb);if (ret ==NET_RX_DROP ) { nic->stats.rx_dropped++; }else { nic->stats.rx_packets++; - nic->stats.rx_bytes += skb->len +ETH_HLEN ; + nic->stats.rx_bytes += len; }return 0 ;
drivers/virtio/virtio.c +21 -19
@@ -165,14 +165,11 @@ void virtio_add_status(struct virtio_device *dev, unsigned int status) }EXPORT_SYMBOL_GPL (virtio_add_status); -int virtio_finalize_features (struct virtio_device *dev) +/* Do some validation, then set FEATURES_OK */ +static int virtio_features_ok (struct virtio_device *dev) { -int ret = dev->config->finalize_features (dev);unsigned status; -if (ret) -return ret; -if (!virtio_has_feature (dev,VIRTIO_F_VERSION_1 ))return 0 ;
@@ -185,7 +182,6 @@ int virtio_finalize_features(struct virtio_device *dev) }return 0 ; } -EXPORT_SYMBOL_GPL (virtio_finalize_features);static int virtio_dev_probe (struct device *_d) {
@@ -222,17 +218,6 @@ static int virtio_dev_probe(struct device *_d) driver_features_legacy = driver_features; } -/* -* Some devices detect legacy solely via F_VERSION_1. Write -* F_VERSION_1 to force LE config space accesses before FEATURES_OK for -* these when needed. -*/ -if (drv->validate && !virtio_legacy_is_little_endian () - && device_features &BIT_ULL (VIRTIO_F_VERSION_1 )) { - dev->features =BIT_ULL (VIRTIO_F_VERSION_1 ); - dev->config->finalize_features (dev); - } -if (device_features & (1ULL <<VIRTIO_F_VERSION_1 )) dev->features = driver_features & device_features;else
@@ -243,13 +228,26 @@ static int virtio_dev_probe(struct device *_d)if (device_features & (1ULL << i))__virtio_set_bit (dev, i); + err = dev->config->finalize_features (dev); +if (err) + goto err; +if (drv->validate) { +u64 features = dev->features; + err = drv->validate (dev);if (err) goto err; + +/* Did validation change any features? Then write them again. */ +if (features != dev->features) { + err = dev->config->finalize_features (dev); +if (err) + goto err; + } } - err =virtio_finalize_features (dev); + err =virtio_features_ok (dev);if (err) goto err;
@@ -413,7 +411,11 @@ int virtio_device_restore(struct virtio_device *dev)/* We have a driver! */ virtio_add_status (dev,VIRTIO_CONFIG_S_DRIVER ); - ret =virtio_finalize_features (dev); + ret = dev->config->finalize_features (dev); +if (ret) + goto err; + + ret =virtio_features_ok (dev);if (ret) goto err;
fs/btrfs/extent-tree.c +1 -0
@@ -8327,6 +8327,7 @@ struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans, out_free_delayed:btrfs_free_delayed_extent_op (extent_op); out_free_buf: +btrfs_tree_unlock (buf);free_extent_buffer (buf); out_free_reserved:btrfs_free_reserved_extent (fs_info, ins.objectid, ins.offset,0 );
fs/ext4/resize.c +5 -0
@@ -74,6 +74,11 @@ int ext4_resize_begin(struct super_block *sb)return -EPERM ; } +if (ext4_has_feature_sparse_super2 (sb)) { +ext4_msg (sb,KERN_ERR ,"Online resizing not supported with sparse_super2" ); +return -EOPNOTSUPP ; + } +if (test_and_set_bit_lock (EXT4_FLAGS_RESIZING , &EXT4_SB (sb)->s_ext4_flags)) ret = -EBUSY ;
include/linux/mlx5/mlx5_ifc.h +2 -2
@@ -8287,8 +8287,8 @@ struct mlx5_ifc_bufferx_reg_bits {u8 reserved_at_0[0x6 ];u8 lossy[0x1 ];u8 epsb[0x1 ]; -u8 reserved_at_8[0xc ]; -u8 size[0xc ]; +u8 reserved_at_8[0x8 ]; +u8 size[0x10 ];u8 xoff_threshold[0x10 ];u8 xon_threshold[0x10 ];
include/linux/virtio.h +0 -1
@@ -151,7 +151,6 @@ void virtio_break_device(struct virtio_device *dev);void virtio_config_changed (struct virtio_device *dev);void virtio_config_disable (struct virtio_device *dev);void virtio_config_enable (struct virtio_device *dev); -int virtio_finalize_features (struct virtio_device *dev);#ifdef CONFIG_PM_SLEEP int virtio_device_freeze (struct virtio_device *dev);int virtio_device_restore (struct virtio_device *dev);
include/linux/virtio_config.h +2 -1
@@ -51,8 +51,9 @@ struct irq_affinity;* Returns the first 32 feature bits (all we currently need). * @finalize_features: confirm what device features we'll be using. * vdev: the virtio_device -* This gives the final feature bits for the device: it can change +* This sends the driver feature bits to the device: it can change * the dev->feature bits if it wants. +* Note: despite the name this can be called any number of times. * Returns 0 on success or error status * @bus_name: return the bus name associated with the device * vdev: the virtio_device
kernel/trace/trace.c +6 -4
@@ -1118,10 +1118,12 @@ static int __init set_buf_size(char *str)if (!str)return 0 ; buf_size =memparse (str, &str); -/* nr_entries can not be zero */ -if (buf_size ==0 ) -return 0 ; - trace_buf_size = buf_size; +/* +* nr_entries can not be zero and the startup +* tests require some buffer space. Therefore +* ensure we have at least 4096 bytes of buffer. +*/ + trace_buf_size =max (4096UL , buf_size);return 1 ; }__setup ("trace_buf_size=" , set_buf_size);
net/ax25/af_ax25.c +7 -0
@@ -90,6 +90,13 @@ static void ax25_kill_by_device(struct net_device *dev)ax25_for_each (s, &ax25_list) {if (s->ax25_dev == ax25_dev) { sk = s->sk; +if (!sk) { +spin_unlock_bh (&ax25_list_lock); + s->ax25_dev =NULL ; +ax25_disconnect (s,ENETUNREACH ); +spin_lock_bh (&ax25_list_lock); + goto again; + }sock_hold (sk);spin_unlock_bh (&ax25_list_lock);lock_sock (sk);
net/core/net-sysfs.c +1 -1
@@ -203,7 +203,7 @@ static ssize_t speed_show(struct device *dev,if (!rtnl_trylock ())return restart_syscall (); -if (netif_running (netdev)) { +if (netif_running (netdev) &&netif_device_present (netdev)) {struct ethtool_link_ksettings cmd;if (!__ethtool_get_link_ksettings (netdev, &cmd))
net/sctp/diag.c +3 -6
@@ -76,10 +76,6 @@ static void inet_diag_msg_sctpasoc_fill(struct inet_diag_msg *r, r->idiag_timer =SCTP_EVENT_TIMEOUT_T3_RTX ; r->idiag_retrans = asoc->rtx_data_chunks; r->idiag_expires =jiffies_to_msecs (t3_rtx->expires - jiffies); - }else { - r->idiag_timer =0 ; - r->idiag_retrans =0 ; - r->idiag_expires =0 ; } }
@@ -159,13 +155,14 @@ static int inet_sctp_diag_fill(struct sock *sk, struct sctp_association *asoc, r =nlmsg_data (nlh);BUG_ON (!sk_fullsock (sk)); + r->idiag_timer =0 ; + r->idiag_retrans =0 ; + r->idiag_expires =0 ;if (asoc) {inet_diag_msg_sctpasoc_fill (r, sk, asoc); }else {inet_diag_msg_common_fill (r, sk); r->idiag_state = sk->sk_state; - r->idiag_timer =0 ; - r->idiag_retrans =0 ; }if (inet_diag_msg_attrs_fill (sk, skb, r, ext, user_ns, net_admin))
tools/testing/selftests/memfd/memfd_test.c +1 -0
@@ -386,6 +386,7 @@ static void mfd_fail_write(int fd)printf ("mmap()+mprotect() didn't fail as expected\n" );abort (); } +munmap (p, mfd_def_size); }/* verify PUNCH_HOLE fails */