Linux 4.19.111
Greg KH
maintainerI'm announcing the release of the 4.19.111 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
------------
Documentation/filesystems/porting | 7 ++ Makefile | 2 arch/arc/include/asm/linkage.h | 2 arch/x86/kernel/cpu/mcheck/mce_intel.c | 9 +-- arch/x86/kvm/emulate.c | 1 drivers/block/virtio_blk.c | 8 +- drivers/firmware/efi/efivars.c | 32 ++++++++--- drivers/firmware/efi/runtime-wrappers.c | 53 +++---------------- drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 3 - drivers/gpu/drm/i915/gvt/vgpu.c | 12 +++- drivers/i2c/busses/i2c-gpio.c | 2 drivers/i2c/i2c-core-acpi.c | 10 +++ drivers/iommu/dma-iommu.c | 16 ++--- drivers/iommu/dmar.c | 21 +++++-- drivers/iommu/intel-iommu.c | 13 ++-- drivers/macintosh/windfarm_ad7417_sensor.c | 7 ++ drivers/macintosh/windfarm_fcu_controls.c | 7 ++ drivers/macintosh/windfarm_lm75_sensor.c | 16 +++++ drivers/macintosh/windfarm_lm87_sensor.c | 7 ++ drivers/macintosh/windfarm_max6690_sensor.c | 7 ++ drivers/macintosh/windfarm_smu_sat.c | 7 ++ drivers/net/bonding/bond_alb.c | 20 +++---- drivers/net/can/dev.c | 1 drivers/net/ethernet/broadcom/bcmsysport.c | 2 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 4 - drivers/net/ethernet/freescale/fec_main.c | 6 +- drivers/net/ethernet/sfc/efx.c | 1 drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c | 3 - drivers/net/ipvlan/ipvlan_core.c | 19 +++--- drivers/net/ipvlan/ipvlan_main.c | 5 - drivers/net/macsec.c | 12 ++-- drivers/net/macvlan.c | 2 drivers/net/phy/phy_device.c | 18 +++--- drivers/net/slip/slhc.c | 14 +++-- drivers/net/team/team.c | 2 drivers/net/usb/r8152.c | 8 ++ drivers/net/wireless/intel/iwlwifi/mvm/nvm.c | 3 - drivers/net/wireless/mediatek/mt76/dma.c | 9 ++- drivers/pinctrl/core.c | 1 drivers/pinctrl/meson/pinctrl-meson-gxl.c | 4 - fs/cifs/dir.c | 1 fs/gfs2/inode.c | 2 fs/open.c | 3 - include/linux/cgroup.h | 1 include/linux/efi.h | 36 ++++++++++++ include/linux/inet_diag.h | 18 ++++-- include/linux/phy.h | 2 include/net/fib_rules.h | 1 kernel/cgroup/cgroup.c | 37 +++++++++---- kernel/workqueue.c | 14 ++--- mm/memcontrol.c | 14 ----- net/batman-adv/bat_iv_ogm.c | 4 + net/batman-adv/bat_v_ogm.c | 42 ++++++++++++--- net/batman-adv/types.h | 4 + net/core/devlink.c | 33 +++++++---- net/core/netclassid_cgroup.c | 47 +++++++++++++--- net/core/sock.c | 5 + net/ieee802154/nl_policy.c | 6 ++ net/ipv4/gre_demux.c | 12 +++- net/ipv4/inet_connection_sock.c | 20 +++++++ net/ipv4/inet_diag.c | 44 +++++++-------- net/ipv4/raw_diag.c | 5 + net/ipv4/udp_diag.c | 5 + net/ipv6/addrconf.c | 49 +++++++++++++---- net/ipv6/ipv6_sockglue.c | 10 ++- net/netfilter/nf_conntrack_standalone.c | 2 net/netfilter/nf_synproxy_core.c | 2 net/netfilter/nfnetlink_cthelper.c | 2 net/netfilter/nft_payload.c | 1 net/netfilter/nft_tunnel.c | 2 net/netfilter/x_tables.c | 6 +- net/netfilter/xt_recent.c | 2 net/netlink/af_netlink.c | 2 net/nfc/hci/core.c | 19 +++++- net/nfc/netlink.c | 4 + net/packet/af_packet.c | 13 ++-- net/sched/sch_fq.c | 1 net/sctp/diag.c | 8 -- net/smc/smc_ib.c | 3 + net/tipc/netlink.c | 3 - net/wireless/nl80211.c | 5 + tools/perf/bench/futex-wake.c | 4 - tools/testing/ktest/ktest.pl | 2 tools/testing/selftests/net/fib_tests.sh | 34 +++++++++++- 84 files changed, 624 insertions(+), 282 deletions(-)
Al Viro (2):
cifs_atomic_open(): fix double-put on late allocation failure gfs2_atomic_open(): fix O_EXCL|O_CREAT handling on cold dcache
Charles Keepax (1):
pinctrl: core: Remove extra kref_get which blocks hogs being freed
Colin Ian King (2):
net: systemport: fix index check to avoid an array out of bounds access drm/amd/display: remove duplicated assignment to grph_obj_type
Dan Carpenter (1):
net: nfc: fix bounds checking bugs on "pipe"
Dan Moulding (1):
iwlwifi: mvm: Do not require PHY_SKU NVM section for 3168 devices
Daniel Drake (1):
iommu/vt-d: Ignore devices with out-of-spec domain number
David S. Miller (1):
phy: Revert toggling reset changes.
Dmitry Bogdanov (1):
net: macsec: update SCI upon MAC address change.
Dmitry Yakunin (2):
cgroup, netclassid: periodically release file_lock on classid updating
inet_diag: return classid for all socket types
Edward Cree (1):
sfc: detach from cb_page in efx_copy_channel()
Eric Dumazet (6):
gre: fix uninit-value in __iptunnel_pull_header
ipvlan: do not use cond_resched_rcu() in ipvlan_process_multicast()
net: memcg: fix lockdep splat in inet_csk_accept() bonding/alb: make sure arp header is pulled before accessing it
slip: make slhc_compress() more robust against malicious packets
ipv6: restrict IPV6_ADDRFORM operation
Eugeniy Paltsev (1):
ARC: define __ALIGN_STR and __ALIGN symbols for ARC
Felix Fietkau (1):
mt76: fix array overflow on receiving too many fragments for a packet
Florian Fainelli (1):
net: phy: Avoid multiple suspends
Greg Kroah-Hartman (1):
Linux 4.19.111
Halil Pasic (1):
virtio-blk: fix hw_queue stopped on arbitrary error
Hamish Martin (1):
i2c: gpio: suppress error on probe defer
Hangbin Liu (5):
ipv6/addrconf: call ipv6_mc_up() for non-Ethernet interface net/ipv6: use configured metric when add peer route selftests/net/fib_tests: update addr_metric_test for peer route testing net/ipv6: need update peer route when modify metric net/ipv6: remove the old peer route if change it to a new one
Hans de Goede (2):
iommu/vt-d: quirk_ioat_snb_local_iommu: replace WARN_TAINT with pr_warn + add_taint iommu/vt-d: dmar: replace WARN_TAINT with pr_warn + add_taint
Heiner Kallweit (1):
net: phy: fix MDIO bus PM PHY resuming
Hillf Danton (1):
workqueue: don't use wq_select_unbound_cpu() for bound works
Jakub Kicinski (21):
devlink: validate length of param values
fib: add missing attribute validation for tun_id
nl802154: add missing attribute validation
nl802154: add missing attribute validation for dev_type
can: add missing attribute validation for termination
macsec: add missing attribute validation for port
net: fq: add missing attribute validation for orphan mask
team: add missing attribute validation for port ifindex
team: add missing attribute validation for array index
nfc: add missing attribute validation for SE API
nfc: add missing attribute validation for deactivate target
nfc: add missing attribute validation for vendor subcommand
tipc: add missing attribute validation for MTU property
devlink: validate length of region addr/len
net: fec: validate the new settings in fec_enet_set_coalesce()
nl80211: add missing attribute validation for critical protocol indication
nl80211: add missing attribute validation for beacon report scanning
nl80211: add missing attribute validation for channel switch
netfilter: cthelper: add missing attribute validation for cthelper
netfilter: nft_payload: add missing attribute validation for payload csum flags
netfilter: nft_tunnel: add missing attribute validation for tunnels
Jiri Wiesner (1):
ipvlan: do not add hardware address of master to its unicast filter list
Karsten Graul (2):
net/smc: check for valid ib_client_data net/smc: cancel event worker during device removal
Mahesh Bandewar (3):
ipvlan: add cond_resched_rcu() while processing muticast backlog
ipvlan: don't deref eth hdr before checking it's set
macvlan: add cond_resched() during multicast processing
Marc Zyngier (1):
iommu/dma: Fix MSI reservation allocation
Michal Koutný (1):
cgroup: Iterate tasks that did not finish do_exit()
Nicolas Belin (1):
pinctrl: meson-gxl: fix GPIOX sdio pins
Pablo Neira Ayuso (1):
netlink: Use netlink header as base to calculate bad attribute offset
Remi Pommarel (1):
net: stmmac: dwmac1000: Disable ACS if enhanced descs are not used
Sai Praneeth (1):
efi: Make efi_rts_work accessible to efi page fault handler
Shakeel Butt (2):
cgroup: memcg: net: do not associate sock with unrelated cgroup
net: memcg: late association of sock to memcg
Steven Rostedt (VMware) (1):
ktest: Add timeout for ssh sync testing
Sven Eckelmann (2):
batman-adv: Don't schedule OGM for disabled interface
batman-adv: Avoid free/alloc race when handling OGM2 buffer
Tommi Rantala (1):
perf bench futex-wake: Restore thread count default to online CPU count
Tony Luck (1):
x86/mce: Fix logic and comments around MSR_PPIN_CTL
Vasily Averin (5):
cgroup: cgroup_procs_next should increase position index
netfilter: nf_conntrack: ct_cpu_seq_next should increase position index
netfilter: synproxy: synproxy_cpu_seq_next should increase position index
netfilter: xt_recent: recent_seq_next should increase position index
netfilter: x_tables: xt_mttg_seq_next should increase position index
Vasundhara Volam (1):
bnxt_en: reinitialize IRQs when MTU is modified
Vitaly Kuznetsov (1):
KVM: x86: clear stale x86_emulate_ctxt->intercept value
Vladis Dronov (2):
efi: Fix a race and a buffer overflow while reading efivars via sysfs
efi: Add a sanity check to efivar_store_raw()
Willem de Bruijn (1):
net/packet: tpacket_rcv: do not increment ring index on drop
Wolfram Sang (2):
macintosh: windfarm: fix MODINFO regression
i2c: acpi: put device when verifying client fails
Yonghyun Hwang (1):
iommu/vt-d: Fix a bug in intel_iommu_iova_to_phys() for huge page
You-Sheng Yang (1):
r8152: check disconnect status after long sleep
Zhenyu Wang (1):
drm/i915/gvt: Fix unnecessary schedule timer when no vGPU exits
Zhenzhong Duan (1):
iommu/vt-d: Fix the wrong printing in RHSA parsing
Greg KH
maintainerDocumentation/filesystems/porting +7 -0
@@ -627,3 +627,10 @@ in your dentry operations instead. DCACHE_RCUACCESS is gone; having an RCU delay on dentry freeing is the default. DCACHE_NORCU opts out, and only d_alloc_pseudo() has any business doing so. +-- +[mandatory] + + [should've been added in 2016] stale comment in finish_open() + nonwithstanding, failure exits in ->atomic_open() instances should + *NOT* fput() the file, no matter what. Everything is handled by the + caller.
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 110 +SUBLEVEL = 111 EXTRAVERSION = NAME = "People's Front"
arch/arc/include/asm/linkage.h +2 -0
@@ -14,6 +14,8 @@#ifdef __ASSEMBLY__#define ASM_NL `/* use '`' to mark new line in macro */ +#define __ALIGN .align 4 +#define __ALIGN_STR __stringify(__ALIGN)/* annotation for data we want in DCCM - if enabled in .config */ .macro ARCFP_DATA nm
arch/x86/kernel/cpu/mcheck/mce_intel.c +5 -4
@@ -489,17 +489,18 @@ static void intel_ppin_init(struct cpuinfo_x86 *c)return ;if ((val &3UL ) ==1UL ) { -/* PPIN available but disabled: */ +/* PPIN locked in disabled mode */ return ; } -/* If PPIN is disabled, but not locked, try to enable: */ -if (!(val &3UL )) { +/* If PPIN is disabled, try to enable */ +if (!(val &2UL )) {wrmsrl_safe (MSR_PPIN_CTL , val |2UL );rdmsrl_safe (MSR_PPIN_CTL , &val); } -if ((val &3UL ) ==2UL ) +/* Is the enable bit set? */ +if (val &2UL )set_cpu_cap (c,X86_FEATURE_INTEL_PPIN ); } }
arch/x86/kvm/emulate.c +1 -0
@@ -5112,6 +5112,7 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len) ctxt->fetch.ptr = ctxt->fetch.data; ctxt->fetch.end = ctxt->fetch.data + insn_len; ctxt->opcode_len =1 ; + ctxt->intercept = x86_intercept_none;if (insn_len >0 )memcpy (ctxt->fetch.data, insn, insn_len);else {
drivers/block/virtio_blk.c +5 -3
@@ -271,10 +271,12 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx, err =virtblk_add_req (vblk->vqs[qid].vq, vbr, vbr->sg, num);if (err) {virtqueue_kick (vblk->vqs[qid].vq); -blk_mq_stop_hw_queue (hctx); +/* Don't stop the queue if -ENOMEM: we may have failed to +* bounce the buffer due to global resource outage. +*/ +if (err == -ENOSPC ) +blk_mq_stop_hw_queue (hctx);spin_unlock_irqrestore (&vblk->vqs[qid].lock, flags); -/* Out of mem doesn't actually happen, since we fall back -* to direct descriptors */ if (err == -ENOMEM || err == -ENOSPC )return BLK_STS_DEV_RESOURCE ;return BLK_STS_IOERR ;
drivers/firmware/efi/efivars.c +23 -9
@@ -139,13 +139,16 @@ static ssize_t efivar_attr_read(struct efivar_entry *entry, char *buf) { struct efi_variable *var = &entry->var; +unsigned long size =sizeof (var->Data);char *str = buf; +int ret;if (!entry || !buf)return -EINVAL ; - var->DataSize =1024 ; -if (efivar_entry_get (entry, &var->Attributes, &var->DataSize, var->Data)) + ret =efivar_entry_get (entry, &var->Attributes, &size, var->Data); + var->DataSize = size; +if (ret)return -EIO ;if (var->Attributes &EFI_VARIABLE_NON_VOLATILE )
@@ -172,13 +175,16 @@ static ssize_t efivar_size_read(struct efivar_entry *entry, char *buf) { struct efi_variable *var = &entry->var; +unsigned long size =sizeof (var->Data);char *str = buf; +int ret;if (!entry || !buf)return -EINVAL ; - var->DataSize =1024 ; -if (efivar_entry_get (entry, &var->Attributes, &var->DataSize, var->Data)) + ret =efivar_entry_get (entry, &var->Attributes, &size, var->Data); + var->DataSize = size; +if (ret)return -EIO ; str +=sprintf (str,"0x%lx\n" , var->DataSize);
@@ -189,12 +195,15 @@ static ssize_t efivar_data_read(struct efivar_entry *entry, char *buf) { struct efi_variable *var = &entry->var; +unsigned long size =sizeof (var->Data); +int ret;if (!entry || !buf)return -EINVAL ; - var->DataSize =1024 ; -if (efivar_entry_get (entry, &var->Attributes, &var->DataSize, var->Data)) + ret =efivar_entry_get (entry, &var->Attributes, &size, var->Data); + var->DataSize = size; +if (ret)return -EIO ;memcpy (buf, var->Data, var->DataSize);
@@ -263,6 +272,9 @@ efivar_store_raw(struct efivar_entry *entry, const char *buf, size_t count)u8 *data;int err; +if (!entry || !buf) +return -EINVAL ; +if (is_compat ()) {struct compat_efi_variable *compat;
@@ -314,14 +326,16 @@ efivar_show_raw(struct efivar_entry *entry, char *buf) {struct efi_variable *var = &entry->var;struct compat_efi_variable *compat; +unsigned long datasize =sizeof (var->Data);size_t size; +int ret;if (!entry || !buf)return 0 ; - var->DataSize =1024 ; -if (efivar_entry_get (entry, &entry->var.Attributes, - &entry->var.DataSize, entry->var.Data)) + ret =efivar_entry_get (entry, &var->Attributes, &datasize, var->Data); + var->DataSize = datasize; +if (ret)return -EIO ;if (is_compat ()) {
drivers/firmware/efi/runtime-wrappers.c +9 -44
81 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c +1 -2
@@ -364,8 +364,7 @@ bool amdgpu_atombios_get_connector_info_from_object_table(struct amdgpu_device * router.ddc_valid = false; router.cd_valid = false;for (j =0 ; j < ((le16_to_cpu (path->usSize) -8 ) /2 ); j++) { -uint8_t grph_obj_type= - grph_obj_type = +uint8_t grph_obj_type = (le16_to_cpu (path->usGraphicObjIds[j]) &OBJECT_TYPE_MASK ) >>OBJECT_TYPE_SHIFT ;
drivers/gpu/drm/i915/gvt/vgpu.c +9 -3
@@ -272,10 +272,17 @@ void intel_gvt_destroy_vgpu(struct intel_vgpu *vgpu) {struct intel_gvt *gvt = vgpu->gvt; -mutex_lock (&vgpu->vgpu_lock); -WARN (vgpu->active,"vGPU is still active!\n" ); +/* +* remove idr first so later clean can judge if need to stop +* service if no active vgpu. +*/ +mutex_lock (&gvt->lock); +idr_remove (&gvt->vgpu_idr, vgpu->id); +mutex_unlock (&gvt->lock); + +mutex_lock (&vgpu->vgpu_lock);intel_gvt_debugfs_remove_vgpu (vgpu);intel_vgpu_clean_sched_policy (vgpu);intel_vgpu_clean_submission (vgpu);
@@ -290,7 +297,6 @@ void intel_gvt_destroy_vgpu(struct intel_vgpu *vgpu)mutex_unlock (&vgpu->vgpu_lock);mutex_lock (&gvt->lock); -idr_remove (&gvt->vgpu_idr, vgpu->id);if (idr_is_empty (&gvt->vgpu_idr))intel_gvt_clean_irq (gvt);intel_gvt_update_vgpu_types (gvt);
drivers/i2c/busses/i2c-gpio.c +1 -1
@@ -248,7 +248,7 @@ static struct gpio_desc *i2c_gpio_get_desc(struct device *dev,if (ret == -ENOENT ) retdesc =ERR_PTR (-EPROBE_DEFER ); -if (ret != -EPROBE_DEFER ) +if (PTR_ERR (retdesc) != -EPROBE_DEFER )dev_err (dev,"error trying to get descriptor: %d\n" , ret);return retdesc;
drivers/i2c/i2c-core-acpi.c +9 -1
@@ -352,10 +352,18 @@ static struct i2c_adapter *i2c_acpi_find_adapter_by_handle(acpi_handle handle)static struct i2c_client *i2c_acpi_find_client_by_adev (struct acpi_device *adev) {struct device *dev; +struct i2c_client *client; dev =bus_find_device (&i2c_bus_type,NULL , adev, i2c_acpi_find_match_device); -return dev ?i2c_verify_client (dev) :NULL ; +if (!dev) +return NULL ; + + client =i2c_verify_client (dev); +if (!client) +put_device (dev); + +return client; } static int i2c_acpi_notify(struct notifier_block *nb, unsigned long value,
drivers/iommu/dma-iommu.c +8 -8
@@ -190,15 +190,15 @@ static int cookie_init_hw_msi_region(struct iommu_dma_cookie *cookie, start -=iova_offset (iovad, start); num_pages =iova_align (iovad, end - start) >>iova_shift (iovad); - msi_page =kcalloc (num_pages,sizeof (*msi_page),GFP_KERNEL ); -if (!msi_page) -return -ENOMEM ; -for (i =0 ; i < num_pages; i++) { - msi_page[i].phys = start; - msi_page[i].iova = start; -INIT_LIST_HEAD (&msi_page[i].list); -list_add (&msi_page[i].list, &cookie->msi_page_list); + msi_page =kmalloc (sizeof (*msi_page),GFP_KERNEL ); +if (!msi_page) +return -ENOMEM ; + + msi_page->phys = start; + msi_page->iova = start; +INIT_LIST_HEAD (&msi_page->list); +list_add (&msi_page->list, &cookie->msi_page_list); start += iovad->granule; }
drivers/iommu/dmar.c +15 -6
@@ -39,6 +39,7 @@#include <linux/dmi.h> #include <linux/slab.h> #include <linux/iommu.h> +#include <linux/limits.h> #include <asm/irq_remapping.h> #include <asm/iommu_table.h>
@@ -139,6 +140,13 @@ dmar_alloc_pci_notify_info(struct pci_dev *dev, unsigned long event)BUG_ON (dev->is_virtfn); +/* +* Ignore devices that have a domain number higher than what can +* be looked up in DMAR, e.g. VMD subdevices with domain 0x10000 +*/ +if (pci_domain_nr (dev->bus) >U16_MAX ) +return NULL ; +/* Only generate path[] for device addition event */ if (event ==BUS_NOTIFY_ADD_DEVICE )for (tmp = dev; tmp; tmp = tmp->bus->self)
@@ -451,12 +459,13 @@ static int __init dmar_parse_one_andd(struct acpi_dmar_header *header,/* Check for NUL termination within the designated length */ if (strnlen (andd->device_name, header->length -8 ) == header->length -8 ) { -WARN_TAINT (1 ,TAINT_FIRMWARE_WORKAROUND , +pr_warn (FW_BUG "Your BIOS is broken; ANDD object name is not NUL-terminated\n" "BIOS vendor: %s; Ver: %s; Product Version: %s\n" ,dmi_get_system_info (DMI_BIOS_VENDOR ),dmi_get_system_info (DMI_BIOS_VERSION ),dmi_get_system_info (DMI_PRODUCT_VERSION )); +add_taint (TAINT_FIRMWARE_WORKAROUND ,LOCKDEP_STILL_OK );return -EINVAL ; } pr_info("ANDD device: %x name: %s\n", andd->device_number,
@@ -482,14 +491,14 @@ static int dmar_parse_one_rhsa(struct acpi_dmar_header *header, void *arg)return 0 ; } } -WARN_TAINT ( -1 ,TAINT_FIRMWARE_WORKAROUND , +pr_warn (FW_BUG "Your BIOS is broken; RHSA refers to non-existent DMAR unit at %llx\n" "BIOS vendor: %s; Ver: %s; Product Version: %s\n" , - drhd->reg_base_addr, + rhsa->base_address,dmi_get_system_info (DMI_BIOS_VENDOR ),dmi_get_system_info (DMI_BIOS_VERSION ),dmi_get_system_info (DMI_PRODUCT_VERSION )); +add_taint (TAINT_FIRMWARE_WORKAROUND ,LOCKDEP_STILL_OK );return 0 ; }
@@ -838,14 +847,14 @@ int __init dmar_table_init(void)static void warn_invalid_dmar (u64 addr,const char *message) { -WARN_TAINT_ONCE ( -1 ,TAINT_FIRMWARE_WORKAROUND , +pr_warn_once (FW_BUG "Your BIOS is broken; DMAR reported at address %llx%s!\n" "BIOS vendor: %s; Ver: %s; Product Version: %s\n" , addr, message,dmi_get_system_info (DMI_BIOS_VENDOR ),dmi_get_system_info (DMI_BIOS_VERSION ),dmi_get_system_info (DMI_PRODUCT_VERSION )); +add_taint (TAINT_FIRMWARE_WORKAROUND ,LOCKDEP_STILL_OK ); } static int __ref
drivers/iommu/intel-iommu.c +8 -5
@@ -3998,10 +3998,11 @@ static void quirk_ioat_snb_local_iommu(struct pci_dev *pdev)/* we know that the this iommu should be at offset 0xa000 from vtbar */ drhd =dmar_find_matched_drhd_unit (pdev); -if (WARN_TAINT_ONCE (!drhd || drhd->reg_base_addr - vtbar !=0xa000 , -TAINT_FIRMWARE_WORKAROUND , -"BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n" )) +if (!drhd || drhd->reg_base_addr - vtbar !=0xa000 ) { +pr_warn_once (FW_BUG "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n" ); +add_taint (TAINT_FIRMWARE_WORKAROUND ,LOCKDEP_STILL_OK ); pdev->dev.archdata.iommu =DUMMY_DEVICE_DOMAIN_INFO ; + } }DECLARE_PCI_FIXUP_ENABLE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_IOAT_SNB , quirk_ioat_snb_local_iommu);
@@ -5143,8 +5144,10 @@ static phys_addr_t intel_iommu_iova_to_phys(struct iommu_domain *domain,u64 phys =0 ; pte =pfn_to_dma_pte (dmar_domain, iova >>VTD_PAGE_SHIFT , &level); -if (pte) - phys =dma_pte_addr (pte); +if (pte &&dma_pte_present (pte)) + phys =dma_pte_addr (pte) + + (iova & (BIT_MASK (level_to_offset_bits (level) + +VTD_PAGE_SHIFT ) -1 ));return phys; }
drivers/macintosh/windfarm_ad7417_sensor.c +7 -0
@@ -313,9 +313,16 @@ static const struct i2c_device_id wf_ad7417_id[] = { };MODULE_DEVICE_TABLE (i2c, wf_ad7417_id); +static const struct of_device_id wf_ad7417_of_id[] = { + { .compatible ="ad7417" , }, + { } +}; +MODULE_DEVICE_TABLE (of, wf_ad7417_of_id); +static struct i2c_driver wf_ad7417_driver = { .driver = { .name ="wf_ad7417" , + .of_match_table = wf_ad7417_of_id, }, .probe = wf_ad7417_probe, .remove = wf_ad7417_remove,
drivers/macintosh/windfarm_fcu_controls.c +7 -0
@@ -583,9 +583,16 @@ static const struct i2c_device_id wf_fcu_id[] = { };MODULE_DEVICE_TABLE (i2c, wf_fcu_id); +static const struct of_device_id wf_fcu_of_id[] = { + { .compatible ="fcu" , }, + { } +}; +MODULE_DEVICE_TABLE (of, wf_fcu_of_id); +static struct i2c_driver wf_fcu_driver = { .driver = { .name ="wf_fcu" , + .of_match_table = wf_fcu_of_id, }, .probe = wf_fcu_probe, .remove = wf_fcu_remove,
drivers/macintosh/windfarm_lm75_sensor.c +15 -1
@@ -15,6 +15,7 @@#include <linux/init.h> #include <linux/wait.h> #include <linux/i2c.h> +#include <linux/of_device.h> #include <asm/prom.h> #include <asm/machdep.h> #include <asm/io.h>
@@ -92,9 +93,14 @@ static int wf_lm75_probe(struct i2c_client *client, const struct i2c_device_id *id) {struct wf_lm75_sensor *lm; -int rc, ds1775 = id->driver_data; +int rc, ds1775;const char *name, *loc; +if (id) + ds1775 = id->driver_data; +else + ds1775 = !!of_device_get_match_data (&client->dev); +DBG ("wf_lm75: creating %s device at address 0x%02x\n" , ds1775 ?"ds1775" :"lm75" , client->addr);
@@ -165,9 +171,17 @@ static const struct i2c_device_id wf_lm75_id[] = { };MODULE_DEVICE_TABLE (i2c, wf_lm75_id); +static const struct of_device_id wf_lm75_of_id[] = { + { .compatible ="lm75" , .data = (void *)0 }, + { .compatible ="ds1775" , .data = (void *)1 }, + { } +}; +MODULE_DEVICE_TABLE (of, wf_lm75_of_id); +static struct i2c_driver wf_lm75_driver = { .driver = { .name ="wf_lm75" , + .of_match_table = wf_lm75_of_id, }, .probe = wf_lm75_probe, .remove = wf_lm75_remove,
drivers/macintosh/windfarm_lm87_sensor.c +7 -0
@@ -168,9 +168,16 @@ static const struct i2c_device_id wf_lm87_id[] = { };MODULE_DEVICE_TABLE (i2c, wf_lm87_id); +static const struct of_device_id wf_lm87_of_id[] = { + { .compatible ="lm87cimt" , }, + { } +}; +MODULE_DEVICE_TABLE (of, wf_lm87_of_id); +static struct i2c_driver wf_lm87_driver = { .driver = { .name ="wf_lm87" , + .of_match_table = wf_lm87_of_id, }, .probe = wf_lm87_probe, .remove = wf_lm87_remove,
drivers/macintosh/windfarm_max6690_sensor.c +7 -0
@@ -121,9 +121,16 @@ static const struct i2c_device_id wf_max6690_id[] = { };MODULE_DEVICE_TABLE (i2c, wf_max6690_id); +static const struct of_device_id wf_max6690_of_id[] = { + { .compatible ="max6690" , }, + { } +}; +MODULE_DEVICE_TABLE (of, wf_max6690_of_id); +static struct i2c_driver wf_max6690_driver = { .driver = { .name ="wf_max6690" , + .of_match_table = wf_max6690_of_id, }, .probe = wf_max6690_probe, .remove = wf_max6690_remove,
drivers/macintosh/windfarm_smu_sat.c +7 -0
@@ -343,9 +343,16 @@ static const struct i2c_device_id wf_sat_id[] = { };MODULE_DEVICE_TABLE (i2c, wf_sat_id); +static const struct of_device_id wf_sat_of_id[] = { + { .compatible ="smu-sat" , }, + { } +}; +MODULE_DEVICE_TABLE (of, wf_sat_of_id); +static struct i2c_driver wf_sat_driver = { .driver = { .name ="wf_smu_sat" , + .of_match_table = wf_sat_of_id, }, .probe = wf_sat_probe, .remove = wf_sat_remove,
drivers/net/bonding/bond_alb.c +10 -10
@@ -66,11 +66,6 @@ struct arp_pkt { };#pragma pack() -static inline struct arp_pkt *arp_pkt (const struct sk_buff *skb) -{ -return (struct arp_pkt *)skb_network_header (skb); -} -/* Forward declaration */ static void alb_send_learning_packets (struct slave *slave,u8 mac_addr[],bool strict_match);
@@ -568,10 +563,11 @@ static void rlb_req_update_subnet_clients(struct bonding *bond, __be32 src_ip)spin_unlock (&bond->mode_lock); } -static struct slave *rlb_choose_channel (struct sk_buff *skb,struct bonding *bond) +static struct slave *rlb_choose_channel (struct sk_buff *skb, +struct bonding *bond, +const struct arp_pkt *arp) {struct alb_bond_info *bond_info = &(BOND_ALB_INFO (bond)); -struct arp_pkt *arp =arp_pkt (skb);struct slave *assigned_slave, *curr_active_slave;struct rlb_client_info *client_info;u32 hash_index =0 ;
@@ -668,8 +664,12 @@ static struct slave *rlb_choose_channel(struct sk_buff *skb, struct bonding *bon*/ static struct slave *rlb_arp_xmit (struct sk_buff *skb,struct bonding *bond) { -struct arp_pkt *arp =arp_pkt (skb);struct slave *tx_slave =NULL ; +struct arp_pkt *arp; + +if (!pskb_network_may_pull (skb,sizeof (*arp))) +return NULL ; + arp = (struct arp_pkt *)skb_network_header (skb);/* Don't modify or load balance ARPs that do not originate locally * (e.g.,arrive via a bridge).
@@ -679,7 +679,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)if (arp->op_code ==htons (ARPOP_REPLY )) {/* the arp must be sent on the selected rx channel */ - tx_slave =rlb_choose_channel (skb, bond); + tx_slave =rlb_choose_channel (skb, bond, arp);if (tx_slave)bond_hw_addr_copy (arp->mac_src, tx_slave->dev->dev_addr, tx_slave->dev->addr_len);
@@ -690,7 +690,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)* When the arp reply is received the entry will be updated * with the correct unicast address of the client. */ -rlb_choose_channel (skb, bond); +rlb_choose_channel (skb, bond, arp);/* The ARP reply packets must be delayed so that * they can cancel out the influence of the ARP request.
drivers/net/can/dev.c +1 -0
@@ -892,6 +892,7 @@ static const struct nla_policy can_policy[IFLA_CAN_MAX + 1] = { = { .len = sizeof(struct can_bittiming) }, [IFLA_CAN_DATA_BITTIMING_CONST ] = { .len = sizeof(struct can_bittiming_const) }, + [IFLA_CAN_TERMINATION] = { .type = NLA_U16 }, }; static int can_validate(struct nlattr *tb[], struct nlattr *data[],
drivers/net/ethernet/broadcom/bcmsysport.c +1 -1
@@ -2168,7 +2168,7 @@ static int bcm_sysport_rule_set(struct bcm_sysport_priv *priv,return -ENOSPC ; index =find_first_zero_bit (priv->filters,RXCHK_BRCM_TAG_MAX ); -if (index >RXCHK_BRCM_TAG_MAX ) +if (index >=RXCHK_BRCM_TAG_MAX )return -ENOSPC ;/* Location is the classification ID, and index is the position
drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 -2
@@ -8097,13 +8097,13 @@ static int bnxt_change_mtu(struct net_device *dev, int new_mtu)struct bnxt *bp =netdev_priv (dev);if (netif_running (dev)) -bnxt_close_nic (bp, false, false); +bnxt_close_nic (bp, true, false); dev->mtu = new_mtu;bnxt_set_ring_params (bp);if (netif_running (dev)) -return bnxt_open_nic (bp, false, false); +return bnxt_open_nic (bp, true, false);return 0 ; }
drivers/net/ethernet/freescale/fec_main.c +3 -3
@@ -2476,15 +2476,15 @@ fec_enet_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *ec)return -EINVAL ; } - cycle =fec_enet_us_to_itr_clock (ndev, fep->rx_time_itr); + cycle =fec_enet_us_to_itr_clock (ndev, ec->rx_coalesce_usecs);if (cycle >0xFFFF ) {pr_err ("Rx coalesced usec exceed hardware limitation\n" );return -EINVAL ; } - cycle =fec_enet_us_to_itr_clock (ndev, fep->tx_time_itr); + cycle =fec_enet_us_to_itr_clock (ndev, ec->tx_coalesce_usecs);if (cycle >0xFFFF ) { -pr_err ("Rx coalesced usec exceed hardware limitation\n" ); +pr_err ("Tx coalesced usec exceed hardware limitation\n" );return -EINVAL ; }
drivers/net/ethernet/sfc/efx.c +1 -0
@@ -522,6 +522,7 @@ efx_copy_channel(const struct efx_channel *old_channel)if (tx_queue->channel) tx_queue->channel = channel; tx_queue->buffer =NULL ; + tx_queue->cb_page =NULL ;memset (&tx_queue->txd,0 ,sizeof (tx_queue->txd)); }
drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c +2 -1
@@ -34,6 +34,7 @@static void dwmac1000_core_init (struct mac_device_info *hw,struct net_device *dev) { +struct stmmac_priv *priv =netdev_priv (dev);void __iomem *ioaddr = hw->pcsr;u32 value =readl (ioaddr +GMAC_CONTROL );int mtu = dev->mtu;
@@ -45,7 +46,7 @@ static void dwmac1000_core_init(struct mac_device_info *hw,* Broadcom tags can look like invalid LLC/SNAP packets and cause the * hardware to truncate packets on reception. */ -if (netdev_uses_dsa (dev)) +if (netdev_uses_dsa (dev) || !priv->plat->enh_desc) value &= ~GMAC_CONTROL_ACS ;if (mtu >1500 )
drivers/net/ipvlan/ipvlan_core.c +11 -8
@@ -298,6 +298,7 @@ void ipvlan_process_multicast(struct work_struct *work) }if (dev)dev_put (dev); +cond_resched (); } }
@@ -504,19 +505,21 @@ static int ipvlan_process_outbound(struct sk_buff *skb)struct ethhdr *ethh =eth_hdr (skb);int ret =NET_XMIT_DROP ; -/* In this mode we dont care about multicast and broadcast traffic */ -if (is_multicast_ether_addr (ethh->h_dest)) { -pr_debug_ratelimited ("Dropped {multi|broad}cast of type=[%x]\n" , -ntohs (skb->protocol)); -kfree_skb (skb); - goto out; - } -/* The ipvlan is a pseudo-L2 device, so the packets that we receive * will have L2; which need to discarded and processed further * in the net-ns of the main-device. */ if (skb_mac_header_was_set (skb)) { +/* In this mode we dont care about +* multicast and broadcast traffic */ +if (is_multicast_ether_addr (ethh->h_dest)) { +pr_debug_ratelimited ( +"Dropped {multi|broad}cast of type=[%x]\n" , +ntohs (skb->protocol)); +kfree_skb (skb); + goto out; + } +skb_pull (skb,sizeof (*ethh)); skb->mac_header = (typeof(skb->mac_header))~0U;skb_reset_network_header (skb);
drivers/net/ipvlan/ipvlan_main.c +1 -4
@@ -236,7 +236,6 @@ static void ipvlan_uninit(struct net_device *dev)static int ipvlan_open (struct net_device *dev) {struct ipvl_dev *ipvlan =netdev_priv (dev); -struct net_device *phy_dev = ipvlan->phy_dev;struct ipvl_addr *addr; if (ipvlan->port->mode == IPVLAN_MODE_L3 ||
@@ -250,7 +249,7 @@ static int ipvlan_open(struct net_device *dev)ipvlan_ht_addr_add (ipvlan, addr);rcu_read_unlock (); -return dev_uc_add (phy_dev, phy_dev->dev_addr); +return 0 ; }static int ipvlan_stop (struct net_device *dev)
@@ -262,8 +261,6 @@ static int ipvlan_stop(struct net_device *dev)dev_uc_unsync (phy_dev, dev);dev_mc_unsync (phy_dev, dev); -dev_uc_del (phy_dev, phy_dev->dev_addr); -rcu_read_lock ();list_for_each_entry_rcu (addr, &ipvlan->addrs, anode)ipvlan_ht_addr_del (addr);
drivers/net/macsec.c +7 -5
@@ -2886,6 +2886,11 @@ static void macsec_dev_set_rx_mode(struct net_device *dev)dev_uc_sync (real_dev, dev); } +static sci_t dev_to_sci (struct net_device *dev,__be16 port) +{ +return make_sci (dev->dev_addr, port); +} +static int macsec_set_mac_address (struct net_device *dev,void *p) {struct macsec_dev *macsec =macsec_priv (dev);
@@ -2907,6 +2912,7 @@ static int macsec_set_mac_address(struct net_device *dev, void *p) out:ether_addr_copy (dev->dev_addr, addr->sa_data); + macsec->secy.sci =dev_to_sci (dev,MACSEC_PORT_ES );return 0 ; }
@@ -2989,6 +2995,7 @@ static const struct device_type macsec_type = {static const struct nla_policy macsec_rtnl_policy[IFLA_MACSEC_MAX +1 ] = { [IFLA_MACSEC_SCI ] = { .type =NLA_U64 }, + [IFLA_MACSEC_PORT ] = { .type =NLA_U16 }, [IFLA_MACSEC_ICV_LEN ] = { .type =NLA_U8 }, [IFLA_MACSEC_CIPHER_SUITE ] = { .type =NLA_U64 }, [IFLA_MACSEC_WINDOW ] = { .type =NLA_U32 },
@@ -3188,11 +3195,6 @@ static bool sci_exists(struct net_device *dev, sci_t sci)return false; } -static sci_t dev_to_sci (struct net_device *dev,__be16 port) -{ -return make_sci (dev->dev_addr, port); -} -static int macsec_add_dev (struct net_device *dev,sci_t sci,u8 icv_len) {struct macsec_dev *macsec =macsec_priv (dev);
drivers/net/macvlan.c +2 -0
@@ -338,6 +338,8 @@ static void macvlan_process_broadcast(struct work_struct *w)if (src)dev_put (src->dev);kfree_skb (skb); + +cond_resched (); } }
drivers/net/phy/phy_device.c +11 -7
@@ -76,7 +76,7 @@ static LIST_HEAD(phy_fixup_list);static DEFINE_MUTEX (phy_fixup_lock);#ifdef CONFIG_PM -static bool mdio_bus_phy_may_suspend (struct phy_device *phydev,bool suspend) +static bool mdio_bus_phy_may_suspend (struct phy_device *phydev) {struct device_driver *drv = phydev->mdio.dev.driver;struct phy_driver *phydrv =to_phy_driver (drv);
@@ -88,11 +88,10 @@ static bool mdio_bus_phy_may_suspend(struct phy_device *phydev, bool suspend)/* PHY not attached? May suspend if the PHY has not already been * suspended as part of a prior call to phy_disconnect() -> * phy_detach() -> phy_suspend() because the parent netdev might be the -* MDIO bus driver and clock gated at this point. Also may resume if -* PHY is not attached. +* MDIO bus driver and clock gated at this point. */ if (!netdev) -return suspend ? !phydev->suspended : phydev->suspended; + goto out;if (netdev->wol_enabled)return false;
@@ -112,7 +111,8 @@ static bool mdio_bus_phy_may_suspend(struct phy_device *phydev, bool suspend)if (device_may_wakeup (&netdev->dev))return false; -return true; +out: +return !phydev->suspended; }static int mdio_bus_phy_suspend (struct device *dev)
@@ -127,9 +127,11 @@ static int mdio_bus_phy_suspend(struct device *dev)if (phydev->attached_dev && phydev->adjust_link)phy_stop_machine (phydev); -if (!mdio_bus_phy_may_suspend (phydev, true)) +if (!mdio_bus_phy_may_suspend (phydev))return 0 ; + phydev->suspended_by_mdio_bus =1 ; +return phy_suspend (phydev); }
@@ -138,9 +140,11 @@ static int mdio_bus_phy_resume(struct device *dev)struct phy_device *phydev =to_phy_device (dev);int ret; -if (!mdio_bus_phy_may_suspend (phydev, false)) +if (!phydev->suspended_by_mdio_bus) goto no_resume; + phydev->suspended_by_mdio_bus =0 ; + ret =phy_resume (phydev);if (ret <0 )return ret;
drivers/net/slip/slhc.c +10 -4
@@ -232,7 +232,7 @@ slhc_compress(struct slcompress *comp, unsigned char *icp, int isize, registerstruct cstate *cs = lcs->next; registerunsigned long deltaS, deltaA; registershort changes =0 ; -int hlen; +int nlen, hlen;unsigned char new_seq[16 ]; registerunsigned char *cp = new_seq;struct iphdr *ip;
@@ -248,6 +248,8 @@ slhc_compress(struct slcompress *comp, unsigned char *icp, int isize,return isize; ip = (struct iphdr *) icp; +if (ip->version !=4 || ip->ihl <5 ) +return isize;/* Bail if this packet isn't TCP, or is an IP fragment */ if (ip->protocol !=IPPROTO_TCP || (ntohs (ip->frag_off) &0x3fff )) {
@@ -258,10 +260,14 @@ slhc_compress(struct slcompress *comp, unsigned char *icp, int isize, comp->sls_o_tcp++;return isize; } -/* Extract TCP header */ + nlen = ip->ihl *4 ; +if (isize < nlen +sizeof (*th)) +return isize; - th = (struct tcphdr *)(((unsigned char *)ip) + ip->ihl*4 ); - hlen = ip->ihl*4 + th->doff*4 ; + th = (struct tcphdr *)(icp + nlen); +if (th->doff <sizeof (struct tcphdr ) /4 ) +return isize; + hlen = nlen + th->doff *4 ;/* Bail if the TCP packet isn't `compressible' (i.e., ACK isn't set or * some other control bit is set). Also uncompressible if
drivers/net/team/team.c +2 -0
@@ -2215,6 +2215,8 @@ team_nl_option_policy[TEAM_ATTR_OPTION_MAX + 1] = { [TEAM_ATTR_OPTION_CHANGED] = { .type = NLA_FLAG }, [TEAM_ATTR_OPTION_TYPE] = { .type = NLA_U8 }, [TEAM_ATTR_OPTION_DATA] = { .type = NLA_BINARY }, + [TEAM_ATTR_OPTION_PORT_IFINDEX] = { .type = NLA_U32 }, + [TEAM_ATTR_OPTION_ARRAY_INDEX] = { .type = NLA_U32 }, };static int team_nl_cmd_noop (struct sk_buff *skb,struct genl_info *info)
drivers/net/usb/r8152.c +8 -0
@@ -2701,6 +2701,8 @@ static u16 r8153_phy_status(struct r8152 *tp, u16 desired) }msleep (20 ); +if (test_bit (RTL8152_UNPLUG , &tp->flags)) +break ; }return data;
@@ -4062,7 +4064,10 @@ static void r8153_init(struct r8152 *tp)if (ocp_read_word (tp,MCU_TYPE_PLA ,PLA_BOOT_CTRL ) &AUTOLOAD_DONE )break ; +msleep (20 ); +if (test_bit (RTL8152_UNPLUG , &tp->flags)) +break ; } data =r8153_phy_status (tp,0 );
@@ -4180,7 +4185,10 @@ static void r8153b_init(struct r8152 *tp)if (ocp_read_word (tp,MCU_TYPE_PLA ,PLA_BOOT_CTRL ) &AUTOLOAD_DONE )break ; +msleep (20 ); +if (test_bit (RTL8152_UNPLUG , &tp->flags)) +break ; } data =r8153_phy_status (tp,0 );
drivers/net/wireless/intel/iwlwifi/mvm/nvm.c +2 -1
@@ -314,7 +314,8 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm) }/* PHY_SKU section is mandatory in B0 */ -if (!mvm->nvm_sections[NVM_SECTION_TYPE_PHY_SKU ].data) { +if (mvm->trans->cfg->nvm_type ==IWL_NVM_EXT && + !mvm->nvm_sections[NVM_SECTION_TYPE_PHY_SKU ].data) {IWL_ERR (mvm,"Can't parse phy_sku in B0, empty sections\n" );return NULL ;
drivers/net/wireless/mediatek/mt76/dma.c +6 -3
@@ -396,10 +396,13 @@ mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data,struct page *page =virt_to_head_page (data);int offset = data -page_address (page);struct sk_buff *skb = q->rx_head; +struct skb_shared_info *shinfo =skb_shinfo (skb); - offset += q->buf_offset; -skb_add_rx_frag (skb,skb_shinfo (skb)->nr_frags, page, offset, len, - q->buf_size); +if (shinfo->nr_frags <ARRAY_SIZE (shinfo->frags)) { + offset += q->buf_offset; +skb_add_rx_frag (skb, shinfo->nr_frags, page, offset, len, + q->buf_size); + }if (more)return ;
drivers/pinctrl/core.c +0 -1
@@ -2008,7 +2008,6 @@ static int pinctrl_claim_hogs(struct pinctrl_dev *pctldev)return PTR_ERR (pctldev->p); } -kref_get (&pctldev->p->users); pctldev->hog_default =pinctrl_lookup_state (pctldev->p,PINCTRL_STATE_DEFAULT );if (IS_ERR (pctldev->hog_default)) {
drivers/pinctrl/meson/pinctrl-meson-gxl.c +2 -2
@@ -153,8 +153,8 @@ static const unsigned int sdio_d0_pins[] = { GPIOX_0 };static const unsigned int sdio_d1_pins[] = {GPIOX_1 };static const unsigned int sdio_d2_pins[] = {GPIOX_2 };static const unsigned int sdio_d3_pins[] = {GPIOX_3 }; -static const unsigned int sdio_cmd_pins[] = {GPIOX_4 }; -static const unsigned int sdio_clk_pins[] = {GPIOX_5 }; +static const unsigned int sdio_clk_pins[] = {GPIOX_4 }; +static const unsigned int sdio_cmd_pins[] = {GPIOX_5 };static const unsigned int sdio_irq_pins[] = {GPIOX_7 };static const unsigned int nand_ce0_pins[] = {BOOT_8 };
fs/cifs/dir.c +0 -1
@@ -561,7 +561,6 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry,if (server->ops->close) server->ops->close (xid, tcon, &fid);cifs_del_pending_open (&open); -fput (file); rc = -ENOMEM ; }
fs/gfs2/inode.c +1 -1
@@ -1251,7 +1251,7 @@ static int gfs2_atomic_open(struct inode *dir, struct dentry *dentry,if (!(file->f_mode &FMODE_OPENED ))return finish_no_open (file, d);dput (d); -return 0 ; +return excl && (flags &O_CREAT ) ? -EEXIST :0 ; }BUG_ON (d !=NULL );
fs/open.c +0 -3
@@ -851,9 +851,6 @@ static int do_dentry_open(struct file *f,* the return value of d_splice_alias(), then the caller needs to perform dput() * on it after finish_open(). * -* On successful return @file is a fully instantiated open file. After this, if -* an error occurs in ->atomic_open(), it needs to clean up with fput(). -* * Returns zero on success or -errno if the open failed. */ int finish_open(struct file *file, struct dentry *dentry,
include/linux/cgroup.h +1 -0
@@ -62,6 +62,7 @@ struct css_task_iter {struct list_head *mg_tasks_head;struct list_head *dying_tasks_head; +struct list_head *cur_tasks_head;struct css_set *cur_cset;struct css_set *cur_dcset;struct task_struct *cur_task;
include/linux/efi.h +36 -0
@@ -1664,6 +1664,42 @@ struct linux_efi_tpm_eventlog {extern int efi_tpm_eventlog_init (void ); +/* efi_runtime_service() function identifiers */ +enum efi_rts_ids { +GET_TIME , +SET_TIME , +GET_WAKEUP_TIME , +SET_WAKEUP_TIME , +GET_VARIABLE , +GET_NEXT_VARIABLE , +SET_VARIABLE , +QUERY_VARIABLE_INFO , +GET_NEXT_HIGH_MONO_COUNT , +UPDATE_CAPSULE , +QUERY_CAPSULE_CAPS , +}; + +/* +* efi_runtime_work: Details of EFI Runtime Service work +* @arg<1-5>: EFI Runtime Service function arguments +* @status: Status of executing EFI Runtime Service +* @efi_rts_id: EFI Runtime Service function identifier +* @efi_rts_comp: Struct used for handling completions +*/ +struct efi_runtime_work { +void *arg1; +void *arg2; +void *arg3; +void *arg4; +void *arg5; +efi_status_t status; +struct work_struct work; +enum efi_rts_ids efi_rts_id; +struct completion efi_rts_comp; +}; + +extern struct efi_runtime_work efi_rts_work; +/* Workqueue to queue EFI Runtime Services */ extern struct workqueue_struct *efi_rts_wq;
include/linux/inet_diag.h +12 -6
@@ -2,15 +2,10 @@ #ifndef _INET_DIAG_H_ #define _INET_DIAG_H_ 1 +#include <net/netlink.h> #include <uapi/linux/inet_diag.h> -struct net; -struct sock; struct inet_hashinfo; -struct nlattr; -struct nlmsghdr; -struct sk_buff; -struct netlink_callback; struct inet_diag_handler { void (*dump)(struct sk_buff *skb,
@@ -62,6 +57,17 @@ int inet_diag_bc_sk(const struct nlattr *_bc, struct sock *sk);void inet_diag_msg_common_fill (struct inet_diag_msg *r,struct sock *sk); +static inline size_t inet_diag_msg_attrs_size (void ) +{ +return nla_total_size (1 )/* INET_DIAG_SHUTDOWN */ + + nla_total_size(1) /* INET_DIAG_TOS */ +#if IS_ENABLED (CONFIG_IPV6 ) + +nla_total_size (1 )/* INET_DIAG_TCLASS */ + + nla_total_size(1) /* INET_DIAG_SKV6ONLY */ +#endif + +nla_total_size (4 )/* INET_DIAG_MARK */ + +nla_total_size (4 );/* INET_DIAG_CLASS_ID */ +}int inet_diag_msg_attrs_fill (struct sock *sk,struct sk_buff *skb,struct inet_diag_msg *r,int ext,struct user_namespace *user_ns,bool net_admin);
include/linux/phy.h +2 -0
@@ -373,6 +373,7 @@ struct phy_c45_device_ids {* is_pseudo_fixed_link: Set to true if this phy is an Ethernet switch, etc. * has_fixups: Set to true if this phy has fixups/quirks. * suspended: Set to true if this phy has been suspended successfully. +* suspended_by_mdio_bus: Set to true if this phy was suspended by MDIO bus. * sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal. * loopback_enabled: Set true if this phy has been loopbacked successfully. * state: state of the PHY for management purposes
@@ -411,6 +412,7 @@ struct phy_device { unsigned is_pseudo_fixed_link:1; unsigned has_fixups:1; unsigned suspended:1; + unsigned suspended_by_mdio_bus:1; unsigned sysfs_links:1; unsigned loopback_enabled:1;
include/net/fib_rules.h +1 -0
@@ -107,6 +107,7 @@ struct fib_rule_notifier_info { [FRA_OIFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \ [FRA_PRIORITY] = { .type = NLA_U32 }, \ [FRA_FWMARK] = { .type = NLA_U32 }, \ + [FRA_TUN_ID] = { .type = NLA_U64 }, \ [FRA_FWMASK] = { .type = NLA_U32 }, \ [FRA_TABLE] = { .type = NLA_U32 }, \ [FRA_SUPPRESS_PREFIXLEN] = { .type = NLA_U32 }, \
kernel/cgroup/cgroup.c +27 -10
@@ -4157,12 +4157,16 @@ static void css_task_iter_advance_css_set(struct css_task_iter *it) } }while (!css_set_populated (cset) &&list_empty (&cset->dying_tasks)); -if (!list_empty (&cset->tasks)) +if (!list_empty (&cset->tasks)) { it->task_pos = cset->tasks.next; -else if (!list_empty (&cset->mg_tasks)) + it->cur_tasks_head = &cset->tasks; + }else if (!list_empty (&cset->mg_tasks)) { it->task_pos = cset->mg_tasks.next; -else + it->cur_tasks_head = &cset->mg_tasks; + }else { it->task_pos = cset->dying_tasks.next; + it->cur_tasks_head = &cset->dying_tasks; + } it->tasks_head = &cset->tasks; it->mg_tasks_head = &cset->mg_tasks;
@@ -4220,10 +4224,14 @@ static void css_task_iter_advance(struct css_task_iter *it)else it->task_pos = it->task_pos->next; -if (it->task_pos == it->tasks_head) +if (it->task_pos == it->tasks_head) { it->task_pos = it->mg_tasks_head->next; -if (it->task_pos == it->mg_tasks_head) + it->cur_tasks_head = it->mg_tasks_head; + } +if (it->task_pos == it->mg_tasks_head) { it->task_pos = it->dying_tasks_head->next; + it->cur_tasks_head = it->dying_tasks_head; + }if (it->task_pos == it->dying_tasks_head)css_task_iter_advance_css_set (it); }else {
@@ -4242,11 +4250,12 @@ static void css_task_iter_advance(struct css_task_iter *it) goto repeat;/* and dying leaders w/o live member threads */ -if (!atomic_read (&task->signal->live)) +if (it->cur_tasks_head == it->dying_tasks_head && + !atomic_read (&task->signal->live)) goto repeat; }else {/* skip all dying ones */ -if (task->flags &PF_EXITING ) +if (it->cur_tasks_head == it->dying_tasks_head) goto repeat; } }
@@ -4355,6 +4364,9 @@ static void *cgroup_procs_next(struct seq_file *s, void *v, loff_t *pos)struct kernfs_open_file *of = s->private;struct css_task_iter *it = of->priv; +if (pos) + (*pos)++; +return css_task_iter_next (it); }
@@ -4370,7 +4382,7 @@ static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos,* from position 0, so we can simply keep iterating on !0 *pos. */ if (!it) { -if (WARN_ON_ONCE ((*pos)++)) +if (WARN_ON_ONCE ((*pos)))return ERR_PTR (-EINVAL ); it =kzalloc (sizeof (*it),GFP_KERNEL );
@@ -4378,10 +4390,11 @@ static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos,return ERR_PTR (-ENOMEM ); of->priv = it;css_task_iter_start (&cgrp->self, iter_flags, it); - }else if (!(*pos)++) { + }else if (!(*pos)) {css_task_iter_end (it);css_task_iter_start (&cgrp->self, iter_flags, it); - } + }else +return it->cur_task;return cgroup_procs_next (s,NULL ,NULL ); }
@@ -5929,6 +5942,10 @@ void cgroup_sk_alloc(struct sock_cgroup_data *skcd)return ; } +/* Don't associate the sock with unrelated interrupted task's cgroup. */ +if (in_interrupt ()) +return ; +rcu_read_lock ();while (true) {
kernel/workqueue.c +8 -6
@@ -1384,14 +1384,16 @@ static void __queue_work(int cpu, struct workqueue_struct *wq, WARN_ON_ONCE(!is_chained_work(wq)))return ; retry: -if (req_cpu ==WORK_CPU_UNBOUND ) - cpu =wq_select_unbound_cpu (raw_smp_processor_id ()); -/* pwq which will be used unless @work is executing elsewhere */ -if (!(wq->flags &WQ_UNBOUND )) - pwq =per_cpu_ptr (wq->cpu_pwqs, cpu); -else +if (wq->flags &WQ_UNBOUND ) { +if (req_cpu ==WORK_CPU_UNBOUND ) + cpu =wq_select_unbound_cpu (raw_smp_processor_id ()); pwq =unbound_pwq_by_node (wq,cpu_to_node (cpu)); + }else { +if (req_cpu ==WORK_CPU_UNBOUND ) + cpu =raw_smp_processor_id (); + pwq =per_cpu_ptr (wq->cpu_pwqs, cpu); + }/* * If @work was previously on a different pool, it might still be
mm/memcontrol.c +2 -12
@@ -6307,19 +6307,9 @@ void mem_cgroup_sk_alloc(struct sock *sk)if (!mem_cgroup_sockets_enabled)return ; -/* -* Socket cloning can throw us here with sk_memcg already -* filled. It won't however, necessarily happen from -* process context. So the test for root memcg given -* the current task's memcg won't help us in this case. -* -* Respecting the original socket's memcg is a better -* decision in this case. -*/ -if (sk->sk_memcg) { -css_get (&sk->sk_memcg->css); +/* Do not associate the sock with unrelated interrupted task's memcg. */ +if (in_interrupt ())return ; - }rcu_read_lock (); memcg =mem_cgroup_from_task (current);
net/batman-adv/bat_iv_ogm.c +4 -0
@@ -970,6 +970,10 @@ static void batadv_iv_ogm_schedule_buff(struct batadv_hard_iface *hard_iface)lockdep_assert_held (&hard_iface->bat_iv.ogm_buff_mutex); +/* interface already disabled by batadv_iv_ogm_iface_disable */ +if (!*ogm_buff) +return ; +/* the interface gets activated here to avoid race conditions between * the moment of activating the interface in * hardif_activate_interface() where the originator mac is set and
net/batman-adv/bat_v_ogm.c +34 -8
92 lines not on this page · raw message
net/batman-adv/types.h +4 -0
@@ -28,6 +28,7 @@#include <linux/compiler.h> #include <linux/if_ether.h> #include <linux/kref.h> +#include <linux/mutex.h> #include <linux/netdevice.h> #include <linux/netlink.h> #include <linux/sched.h> /* for linux/wait.h */
@@ -1493,6 +1494,9 @@ struct batadv_priv_bat_v {/** @ogm_seqno: OGM sequence number - used to identify each OGM */ atomic_t ogm_seqno; +/** @ogm_buff_mutex: lock protecting ogm_buff and ogm_buff_len */ +struct mutex ogm_buff_mutex; +/** @ogm_wq: workqueue used to schedule OGM transmissions */ struct delayed_work ogm_wq; };
net/core/devlink.c +21 -12
@@ -2995,34 +2995,41 @@ devlink_param_value_get_from_info(const struct devlink_param *param,struct genl_info *info, union devlink_param_value *value) { + struct nlattr *param_data;int len; -if (param->type !=DEVLINK_PARAM_TYPE_BOOL && - !info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA ]) + param_data = info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA ]; + +if (param->type !=DEVLINK_PARAM_TYPE_BOOL && !param_data)return -EINVAL ;switch (param->type) {case DEVLINK_PARAM_TYPE_U8 : - value->vu8 =nla_get_u8 (info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA ]); +if (nla_len (param_data) !=sizeof (u8)) +return -EINVAL ; + value->vu8 =nla_get_u8 (param_data);break ;case DEVLINK_PARAM_TYPE_U16 : - value->vu16 =nla_get_u16 (info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA ]); +if (nla_len (param_data) !=sizeof (u16)) +return -EINVAL ; + value->vu16 =nla_get_u16 (param_data);break ;case DEVLINK_PARAM_TYPE_U32 : - value->vu32 =nla_get_u32 (info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA ]); +if (nla_len (param_data) !=sizeof (u32)) +return -EINVAL ; + value->vu32 =nla_get_u32 (param_data);break ;case DEVLINK_PARAM_TYPE_STRING : - len =strnlen (nla_data (info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA ]), -nla_len (info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA ])); -if (len ==nla_len (info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA ]) || + len =strnlen (nla_data (param_data),nla_len (param_data)); +if (len ==nla_len (param_data) || len >= __DEVLINK_PARAM_MAX_STRING_VALUE)return -EINVAL ; -strcpy (value->vstr, -nla_data (info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA ])); +strcpy (value->vstr,nla_data (param_data));break ;case DEVLINK_PARAM_TYPE_BOOL : - value->vbool = info->attrs[DEVLINK_ATTR_PARAM_VALUE_DATA ] ? - true : false; +if (param_data &&nla_len (param_data)) +return -EINVAL ; + value->vbool =nla_get_flag (param_data);break ; }return 0 ;
@@ -3600,6 +3607,8 @@ static const struct nla_policy devlink_nl_policy[DEVLINK_ATTR_MAX + 1] = { [DEVLINK_ATTR_PARAM_VALUE_CMODE] = { .type = NLA_U8 }, [DEVLINK_ATTR_REGION_NAME] = { .type = NLA_NUL_STRING }, [DEVLINK_ATTR_REGION_SNAPSHOT_ID] = { .type = NLA_U32 }, + [DEVLINK_ATTR_REGION_CHUNK_ADDR] = { .type = NLA_U64 }, + [DEVLINK_ATTR_REGION_CHUNK_LEN] = { .type = NLA_U64 }, };static const struct genl_ops devlink_nl_ops[] = {
net/core/netclassid_cgroup.c +37 -10
77 lines not on this page · raw message
net/core/sock.c +4 -1
@@ -1689,7 +1689,10 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)atomic_set (&newsk->sk_zckey,0 );sock_reset_flag (newsk,SOCK_DONE ); -mem_cgroup_sk_alloc (newsk); + +/* sk->sk_memcg will be populated at accept() time */ + newsk->sk_memcg =NULL ; +cgroup_sk_alloc (&newsk->sk_cgrp_data);rcu_read_lock ();
net/ieee802154/nl_policy.c +6 -0
@@ -30,7 +30,13 @@ const struct nla_policy ieee802154_policy[IEEE802154_ATTR_MAX + 1] = { [IEEE802154_ATTR_HW_ADDR] = { .type = NLA_HW_ADDR, }, [IEEE802154_ATTR_PAN_ID] = { .type = NLA_U16, }, [IEEE802154_ATTR_CHANNEL] = { .type = NLA_U8, }, + [IEEE802154_ATTR_BCN_ORD] = { .type = NLA_U8, }, + [IEEE802154_ATTR_SF_ORD] = { .type = NLA_U8, }, + [IEEE802154_ATTR_PAN_COORD] = { .type = NLA_U8, }, + [IEEE802154_ATTR_BAT_EXT] = { .type = NLA_U8, }, + [IEEE802154_ATTR_COORD_REALIGN] = { .type = NLA_U8, }, [IEEE802154_ATTR_PAGE] = { .type = NLA_U8, }, + [IEEE802154_ATTR_DEV_TYPE] = { .type = NLA_U8, }, [IEEE802154_ATTR_COORD_SHORT_ADDR] = { .type = NLA_U16, }, [IEEE802154_ATTR_COORD_HW_ADDR] = { .type = NLA_HW_ADDR, }, [IEEE802154_ATTR_COORD_PAN_ID] = { .type = NLA_U16, },
net/ipv4/gre_demux.c +10 -2
@@ -61,7 +61,9 @@ int gre_del_protocol(const struct gre_protocol *proto, u8 version) }EXPORT_SYMBOL_GPL (gre_del_protocol); -/* Fills in tpi and returns header length to be pulled. */ +/* Fills in tpi and returns header length to be pulled. +* Note that caller must use pskb_may_pull() before pulling GRE header. +*/ int gre_parse_header (struct sk_buff *skb,struct tnl_ptk_info *tpi,bool *csum_err,__be16 proto,int nhs) {
@@ -115,8 +117,14 @@ int gre_parse_header(struct sk_buff *skb, struct tnl_ptk_info *tpi,* - When dealing with WCCPv2, Skip extra 4 bytes in GRE header */ if (greh->flags ==0 && tpi->proto ==htons (ETH_P_WCCP )) { +u8 _val, *val; + + val =skb_header_pointer (skb, nhs + hdr_len, +sizeof (_val), &_val); +if (!val) +return -EINVAL ; tpi->proto = proto; -if ((*(u8 *)options &0xF0 ) !=0x40 ) +if ((*val &0xF0 ) !=0x40 ) hdr_len +=4 ; } tpi->hdr_len = hdr_len;
net/ipv4/inet_connection_sock.c +20 -0
@@ -479,8 +479,28 @@ struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern) }spin_unlock_bh (&queue->fastopenq.lock); } + out:release_sock (sk); +if (newsk && mem_cgroup_sockets_enabled) { +int amt; + +/* atomically get the memory usage, set and charge the +* newsk->sk_memcg. +*/ +lock_sock (newsk); + +/* The socket has not been accepted yet, no need to look at +* newsk->sk_wmem_queued. +*/ + amt =sk_mem_pages (newsk->sk_forward_alloc + +atomic_read (&newsk->sk_rmem_alloc)); +mem_cgroup_sk_alloc (newsk); +if (newsk->sk_memcg && amt) +mem_cgroup_charge_skmem (newsk->sk_memcg, amt); + +release_sock (newsk); + }if (req)reqsk_put (req);return newsk;
net/ipv4/inet_diag.c +20 -24
63 lines not on this page · raw message
net/ipv4/raw_diag.c +3 -2
@@ -99,8 +99,9 @@ static int raw_diag_dump_one(struct sk_buff *in_skb,if (IS_ERR (sk))return PTR_ERR (sk); - rep =nlmsg_new (sizeof (struct inet_diag_msg ) + -sizeof (struct inet_diag_meminfo ) +64 , + rep =nlmsg_new (nla_total_size (sizeof (struct inet_diag_msg )) + +inet_diag_msg_attrs_size () + +nla_total_size (sizeof (struct inet_diag_meminfo )) +64 ,GFP_KERNEL );if (!rep) {sock_put (sk);
net/ipv4/udp_diag.c +3 -2
@@ -67,8 +67,9 @@ static int udp_dump_one(struct udp_table *tbl, struct sk_buff *in_skb, goto out; err = -ENOMEM ; - rep =nlmsg_new (sizeof (struct inet_diag_msg ) + -sizeof (struct inet_diag_meminfo ) +64 , + rep =nlmsg_new (nla_total_size (sizeof (struct inet_diag_msg )) + +inet_diag_msg_attrs_size () + +nla_total_size (sizeof (struct inet_diag_meminfo )) +64 ,GFP_KERNEL );if (!rep) goto out;
net/ipv6/addrconf.c +38 -11
128 lines not on this page · raw message
net/ipv6/ipv6_sockglue.c +8 -2
@@ -185,9 +185,15 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, retv = -EBUSY ;break ; } - }else if (sk->sk_protocol !=IPPROTO_TCP ) + }else if (sk->sk_protocol ==IPPROTO_TCP ) { +if (sk->sk_prot != &tcpv6_prot) { + retv = -EBUSY ; +break ; + }break ; - + }else { +break ; + }if (sk->sk_state !=TCP_ESTABLISHED ) { retv = -ENOTCONN ;break ;
net/netfilter/nf_conntrack_standalone.c +1 -1
@@ -390,7 +390,7 @@ static void *ct_cpu_seq_next(struct seq_file *seq, void *v, loff_t *pos) *pos = cpu +1 ;return per_cpu_ptr (net->ct.stat, cpu); } - + (*pos)++;return NULL ; }
net/netfilter/nf_synproxy_core.c +1 -1
@@ -273,7 +273,7 @@ static void *synproxy_cpu_seq_next(struct seq_file *seq, void *v, loff_t *pos) *pos = cpu +1 ;return per_cpu_ptr (snet->stats, cpu); } - + (*pos)++;return NULL ; }
net/netfilter/nfnetlink_cthelper.c +2 -0
@@ -744,6 +744,8 @@ static const struct nla_policy nfnl_cthelper_policy[NFCTH_MAX+1] = { [NFCTH_NAME ] = { .type =NLA_NUL_STRING , .len = NF_CT_HELPER_NAME_LEN-1 }, [NFCTH_QUEUE_NUM] = { .type = NLA_U32, }, + [NFCTH_PRIV_DATA_LEN] = { .type = NLA_U32, }, + [NFCTH_STATUS] = { .type = NLA_U32, }, };static const struct nfnl_callback nfnl_cthelper_cb[NFNL_MSG_CTHELPER_MAX ] = {
net/netfilter/nft_payload.c +1 -0
@@ -121,6 +121,7 @@ static const struct nla_policy nft_payload_policy[NFTA_PAYLOAD_MAX + 1] = { [NFTA_PAYLOAD_LEN] = { .type = NLA_U32 }, [NFTA_PAYLOAD_CSUM_TYPE] = { .type = NLA_U32 }, [NFTA_PAYLOAD_CSUM_OFFSET] = { .type = NLA_U32 }, + [NFTA_PAYLOAD_CSUM_FLAGS] = { .type = NLA_U32 }, }; static int nft_payload_init(const struct nft_ctx *ctx,
net/netfilter/nft_tunnel.c +2 -0
@@ -308,6 +308,8 @@ static const struct nla_policy nft_tunnel_key_policy[NFTA_TUNNEL_KEY_MAX + 1] = [NFTA_TUNNEL_KEY_FLAGS] = { .type = NLA_U32, }, [NFTA_TUNNEL_KEY_TOS] = { .type = NLA_U8, }, [NFTA_TUNNEL_KEY_TTL] = { .type = NLA_U8, }, + [NFTA_TUNNEL_KEY_SPORT] = { .type = NLA_U16, }, + [NFTA_TUNNEL_KEY_DPORT] = { .type = NLA_U16, }, [NFTA_TUNNEL_KEY_OPTS] = { .type = NLA_NESTED, }, };
net/netfilter/x_tables.c +3 -3
@@ -1556,6 +1556,9 @@ static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos,uint8_t nfproto = (unsigned long )PDE_DATA (file_inode (seq->file));struct nf_mttg_trav *trav = seq->private; +if (ppos !=NULL ) + ++(*ppos); +switch (trav->class) {case MTTG_TRAV_INIT : trav->class =MTTG_TRAV_NFP_UNSPEC ;
@@ -1581,9 +1584,6 @@ static void *xt_mttg_seq_next(struct seq_file *seq, void *v, loff_t *ppos,default :return NULL ; } - -if (ppos !=NULL ) - ++*ppos;return trav; }
net/netfilter/xt_recent.c +1 -1
@@ -497,12 +497,12 @@ static void *recent_seq_next(struct seq_file *seq, void *v, loff_t *pos)const struct recent_entry *e = v;const struct list_head *head = e->list.next; + (*pos)++;while (head == &t->iphash[st->bucket]) {if (++st->bucket >= ip_list_hash_size)return NULL ; head = t->iphash[st->bucket].next; } - (*pos)++; return list_entry(head, struct recent_entry, list); }
net/netlink/af_netlink.c +1 -1
@@ -2411,7 +2411,7 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err, in_skb->len))WARN_ON (nla_put_u32 (skb,NLMSGERR_ATTR_OFFS , (u8 *)extack->bad_attr - - in_skb->data)); + (u8 *)nlh)); }else {if (extack->cookie_len) WARN_ON(nla_put(skb, NLMSGERR_ATTR_COOKIE,
net/nfc/hci/core.c +16 -3
@@ -193,13 +193,20 @@ void nfc_hci_resp_received(struct nfc_hci_dev *hdev, u8 result,void nfc_hci_cmd_received (struct nfc_hci_dev *hdev,u8 pipe,u8 cmd,struct sk_buff *skb) { -u8 gate = hdev->pipes[pipe].gate;u8 status =NFC_HCI_ANY_OK ;struct hci_create_pipe_resp *create_info;struct hci_delete_pipe_noti *delete_info;struct hci_all_pipe_cleared_noti *cleared_info; +u8 gate; -pr_debug ("from gate %x pipe %x cmd %x\n" , gate, pipe, cmd); +pr_debug ("from pipe %x cmd %x\n" , pipe, cmd); + +if (pipe >=NFC_HCI_MAX_PIPES ) { + status =NFC_HCI_ANY_E_NOK ; + goto exit; + } + + gate = hdev->pipes[pipe].gate;switch (cmd) {case NFC_HCI_ADM_NOTIFY_PIPE_CREATED :
@@ -387,8 +394,14 @@ void nfc_hci_event_received(struct nfc_hci_dev *hdev, u8 pipe, u8 event, struct sk_buff *skb) {int r =0 ; -u8 gate = hdev->pipes[pipe].gate; +u8 gate; + +if (pipe >=NFC_HCI_MAX_PIPES ) { +pr_err ("Discarded event %x to invalid pipe %x\n" , event, pipe); + goto exit; + } + gate = hdev->pipes[pipe].gate;if (gate ==NFC_HCI_INVALID_GATE ) {pr_err ("Discarded event %x to unopened pipe %x\n" , event, pipe); goto exit;
net/nfc/netlink.c +4 -0
@@ -44,6 +44,7 @@ static const struct nla_policy nfc_genl_policy[NFC_ATTR_MAX + 1] = { [NFC_ATTR_DEVICE_NAME] = { .type = NLA_STRING, .len = NFC_DEVICE_NAME_MAXSIZE }, [NFC_ATTR_PROTOCOLS] = { .type = NLA_U32 }, + [NFC_ATTR_TARGET_INDEX] = { .type = NLA_U32 }, [NFC_ATTR_COMM_MODE] = { .type = NLA_U8 }, [NFC_ATTR_RF_MODE] = { .type = NLA_U8 }, [NFC_ATTR_DEVICE_POWERED] = { .type = NLA_U8 },
@@ -55,7 +56,10 @@ static const struct nla_policy nfc_genl_policy[NFC_ATTR_MAX + 1] = { [NFC_ATTR_LLC_SDP] = { .type = NLA_NESTED }, [NFC_ATTR_FIRMWARE_NAME ] = { .type =NLA_STRING , .len = NFC_FIRMWARE_NAME_MAXSIZE }, + [NFC_ATTR_SE_INDEX] = { .type = NLA_U32 }, [NFC_ATTR_SE_APDU] = { .type = NLA_BINARY }, + [NFC_ATTR_VENDOR_ID] = { .type = NLA_U32 }, + [NFC_ATTR_VENDOR_SUBCMD] = { .type = NLA_U32 }, [NFC_ATTR_VENDOR_DATA] = { .type = NLA_BINARY }, };
net/packet/af_packet.c +7 -6
@@ -2260,6 +2260,13 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, TP_STATUS_KERNEL, (macoff+snaplen));if (!h.raw) goto drop_n_account; + +if (do_vnet && +virtio_net_hdr_from_skb (skb, h.raw + macoff - +sizeof (struct virtio_net_hdr ), +vio_le (), true,0 )) + goto drop_n_account; +if (po->tp_version <=TPACKET_V2 ) {packet_increment_rx_head (po, &po->rx_ring);/*
@@ -2272,12 +2279,6 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, status |=TP_STATUS_LOSING ; } -if (do_vnet && -virtio_net_hdr_from_skb (skb, h.raw + macoff - -sizeof (struct virtio_net_hdr ), -vio_le (), true,0 )) - goto drop_n_account; - po->stats.stats1.tp_packets++;if (copy_skb) { status |=TP_STATUS_COPY ;
net/sched/sch_fq.c +1 -0
@@ -695,6 +695,7 @@ static const struct nla_policy fq_policy[TCA_FQ_MAX + 1] = { [TCA_FQ_FLOW_MAX_RATE] = { .type = NLA_U32 }, [TCA_FQ_BUCKETS_LOG] = { .type = NLA_U32 }, [TCA_FQ_FLOW_REFILL_DELAY] = { .type = NLA_U32 }, + [TCA_FQ_ORPHAN_MASK] = { .type = NLA_U32 }, [TCA_FQ_LOW_RATE_THRESHOLD] = { .type = NLA_U32 }, };
net/sctp/diag.c +2 -6
@@ -252,15 +252,11 @@ static size_t inet_assoc_attr_size(struct sctp_association *asoc) addrcnt++;return nla_total_size (sizeof (struct sctp_info )) - +nla_total_size (1 )/* INET_DIAG_SHUTDOWN */ - +nla_total_size (1 )/* INET_DIAG_TOS */ - +nla_total_size (1 )/* INET_DIAG_TCLASS */ - +nla_total_size (4 )/* INET_DIAG_MARK */ - +nla_total_size (4 )/* INET_DIAG_CLASS_ID */ +nla_total_size (addrlen * asoc->peer.transport_count) +nla_total_size (addrlen * addrcnt) - +nla_total_size (sizeof (struct inet_diag_meminfo )) +nla_total_size (sizeof (struct inet_diag_msg )) + +inet_diag_msg_attrs_size () + +nla_total_size (sizeof (struct inet_diag_meminfo )) +64 ; }
net/smc/smc_ib.c +3 -0
@@ -552,6 +552,8 @@ static void smc_ib_remove_dev(struct ib_device *ibdev, void *client_data)struct smc_ib_device *smcibdev; smcibdev =ib_get_client_data (ibdev, &smc_ib_client); +if (!smcibdev || smcibdev->ibdev != ibdev) +return ;ib_set_client_data (ibdev, &smc_ib_client,NULL );spin_lock (&smc_ib_devices.lock);list_del_init (&smcibdev->list);/* remove from smc_ib_devices */
@@ -559,6 +561,7 @@ static void smc_ib_remove_dev(struct ib_device *ibdev, void *client_data)smc_pnet_remove_by_ibdev (smcibdev);smc_ib_cleanup_per_ibdev (smcibdev);ib_unregister_event_handler (&smcibdev->event_handler); +cancel_work_sync (&smcibdev->port_event_work);kfree (smcibdev); }
net/tipc/netlink.c +2 -1
@@ -110,7 +110,8 @@ const struct nla_policy tipc_nl_prop_policy[TIPC_NLA_PROP_MAX + 1] = { [TIPC_NLA_PROP_UNSPEC] = { .type = NLA_UNSPEC }, [TIPC_NLA_PROP_PRIO] = { .type = NLA_U32 }, [TIPC_NLA_PROP_TOL] = { .type = NLA_U32 }, - [TIPC_NLA_PROP_WIN ] = { .type =NLA_U32 } + [TIPC_NLA_PROP_WIN] = { .type = NLA_U32 }, + [TIPC_NLA_PROP_MTU ] = { .type =NLA_U32 } };const struct nla_policy tipc_nl_bearer_policy[TIPC_NLA_BEARER_MAX +1 ] = {
net/wireless/nl80211.c +5 -0
@@ -349,6 +349,8 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { [NL80211_ATTR_KEY_DEFAULT_TYPES] = { .type = NLA_NESTED }, [NL80211_ATTR_WOWLAN_TRIGGERS] = { .type = NLA_NESTED }, [NL80211_ATTR_STA_PLINK_STATE] = { .type = NLA_U8 }, + [NL80211_ATTR_MEASUREMENT_DURATION] = { .type = NLA_U16 }, + [NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY] = { .type = NLA_FLAG }, [NL80211_ATTR_SCHED_SCAN_INTERVAL] = { .type = NLA_U32 }, [NL80211_ATTR_REKEY_DATA] = { .type = NLA_NESTED }, [NL80211_ATTR_SCAN_SUPP_RATES] = { .type = NLA_NESTED },
@@ -397,6 +399,8 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { [NL80211_ATTR_MDID] = { .type = NLA_U16 }, [NL80211_ATTR_IE_RIC] = { .type = NLA_BINARY, .len = IEEE80211_MAX_DATA_LEN }, + [NL80211_ATTR_CRIT_PROT_ID] = { .type = NLA_U16 }, + [NL80211_ATTR_MAX_CRIT_PROT_DURATION] = { .type = NLA_U16 }, [NL80211_ATTR_PEER_AID] = { .type = NLA_U16 }, [NL80211_ATTR_CH_SWITCH_COUNT] = { .type = NLA_U32 }, [NL80211_ATTR_CH_SWITCH_BLOCK_TX] = { .type = NLA_FLAG },
@@ -422,6 +426,7 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { [NL80211_ATTR_USER_PRIO] = { .type = NLA_U8 }, [NL80211_ATTR_ADMITTED_TIME] = { .type = NLA_U16 }, [NL80211_ATTR_SMPS_MODE] = { .type = NLA_U8 }, + [NL80211_ATTR_OPER_CLASS] = { .type = NLA_U8 }, [NL80211_ATTR_MAC_MASK] = { .len = ETH_ALEN }, [NL80211_ATTR_WIPHY_SELF_MANAGED_REG] = { .type = NLA_FLAG }, [NL80211_ATTR_NETNS_FD] = { .type = NLA_U32 },
tools/perf/bench/futex-wake.c +2 -2
@@ -42,7 +42,7 @@ static bool done = false, silent = false, fshared = false;static pthread_mutex_t thread_lock;static pthread_cond_t thread_parent, thread_worker;static struct stats waketime_stats, wakeup_stats; -static unsigned int ncpus, threads_starting, nthreads =0 ; +static unsigned int threads_starting, nthreads =0 ;static int futex_flag =0 ;static const struct option options[] = {
@@ -140,7 +140,7 @@ int bench_futex_wake(int argc, const char **argv)sigaction (SIGINT , &act,NULL );if (!nthreads) - nthreads = ncpus; + nthreads = cpu->nr; worker =calloc (nthreads,sizeof (*worker));if (!worker)
tools/testing/ktest/ktest.pl +1 -1
@@ -1372,7 +1372,7 @@ sub reboot { } else { # Make sure everything has been written to disk - run_ssh("sync"); + run_ssh("sync", 10); if (defined($time)) { start_monitor;
tools/testing/selftests/net/fib_tests.sh +31 -3
@@ -979,6 +979,27 @@ ipv6_addr_metric_test() fi log_test $rc 0 "Prefix route with metric on link up" + # verify peer metric added correctly + set -e + run_cmd "$IP -6 addr flush dev dummy2" + run_cmd "$IP -6 addr add dev dummy2 2001:db8:104::1 peer 2001:db8:104::2 metric 260" + set +e + + check_route6 "2001:db8:104::1 dev dummy2 proto kernel metric 260" + log_test $? 0 "Set metric with peer route on local side" + log_test $? 0 "User specified metric on local address" + check_route6 "2001:db8:104::2 dev dummy2 proto kernel metric 260" + log_test $? 0 "Set metric with peer route on peer side" + + set -e + run_cmd "$IP -6 addr change dev dummy2 2001:db8:104::1 peer 2001:db8:104::3 metric 261" + set +e + + check_route6 "2001:db8:104::1 dev dummy2 proto kernel metric 261" + log_test $? 0 "Modify metric and peer address on local side" + check_route6 "2001:db8:104::3 dev dummy2 proto kernel metric 261" + log_test $? 0 "Modify metric and peer address on peer side" + $IP li del dummy1 $IP li del dummy2 cleanup
@@ -1320,13 +1341,20 @@ ipv4_addr_metric_test() run_cmd "$IP addr flush dev dummy2" run_cmd "$IP addr add dev dummy2 172.16.104.1/32 peer 172.16.104.2 metric 260" - run_cmd "$IP addr change dev dummy2 172.16.104.1/32 peer 172.16.104.2 metric 261" rc=$? if [ $rc -eq 0 ]; then - check_route "172.16.104.2 dev dummy2 proto kernel scope link src 172.16.104.1 metric 261" + check_route "172.16.104.2 dev dummy2 proto kernel scope link src 172.16.104.1 metric 260" + rc=$? + fi + log_test $rc 0 "Set metric of address with peer route" + + run_cmd "$IP addr change dev dummy2 172.16.104.1/32 peer 172.16.104.3 metric 261" + rc=$? + if [ $rc -eq 0 ]; then + check_route "172.16.104.3 dev dummy2 proto kernel scope link src 172.16.104.1 metric 261" rc=$? fi - log_test $rc 0 "Modify metric of address with peer route" + log_test $rc 0 "Modify metric and peer address for peer route" $IP li del dummy1 $IP li del dummy2