Linux 5.4.169
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.169 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.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/admin-guide/kernel-parameters.txt | 8 Documentation/hwmon/lm90.rst | 33 + Documentation/networking/bonding.txt | 11 Makefile | 2 arch/arm/kernel/entry-armv.S | 8 arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-zero-plus.dts | 2 arch/parisc/kernel/syscall.S | 2 arch/x86/include/asm/pgtable.h | 4 drivers/char/ipmi/ipmi_msghandler.c | 21 - drivers/char/ipmi/ipmi_ssif.c | 7 drivers/hid/hid-holtek-mouse.c | 15 drivers/hwmon/Kconfig | 9 drivers/hwmon/lm90.c | 200 +++++++--- drivers/infiniband/hw/qib/qib_user_sdma.c | 2 drivers/input/mouse/elantech.c | 8 drivers/input/touchscreen/atmel_mxt_ts.c | 2 drivers/mmc/core/core.c | 7 drivers/mmc/core/core.h | 1 drivers/mmc/core/host.c | 9 drivers/mmc/host/sdhci-tegra.c | 43 +- drivers/net/bonding/bond_options.c | 2 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h | 2 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 12 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c | 4 drivers/net/ethernet/sfc/falcon/rx.c | 5 drivers/net/ethernet/smsc/smc911x.c | 5 drivers/net/fjes/fjes_main.c | 5 drivers/net/hamradio/mkiss.c | 5 drivers/net/usb/lan78xx.c | 6 drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 8 drivers/pinctrl/stm32/pinctrl-stm32.c | 8 drivers/spi/spi-armada-3700.c | 2 drivers/tee/optee/shm_pool.c | 6 drivers/tty/serial/8250/8250_fintek.c | 19 drivers/usb/gadget/function/u_ether.c | 15 fs/f2fs/xattr.c | 11 include/linux/virtio_net.h | 25 + mm/mempolicy.c | 5 net/ax25/af_ax25.c | 4 net/netfilter/nfnetlink_log.c | 3 net/netfilter/nfnetlink_queue.c | 3 net/phonet/pep.c | 2 sound/core/jack.c | 4 sound/drivers/opl3/opl3_midi.c | 2 sound/pci/hda/patch_realtek.c | 1 45 files changed, 385 insertions(+), 173 deletions(-)
Andrea Righi (1):
Input: elantech - fix stack out of bound access in elantech_change_report_id()
Andrew Cooper (1):
x86/pkey: Fix undefined behaviour with PKRU_WD_BIT
Andrey Ryabinin (1):
mm: mempolicy: fix THP allocations escaping mempolicy restrictions
Ard Biesheuvel (1):
ARM: 9169/1: entry: fix Thumb2 bug in iWMMXt exception handling
Benjamin Tissoires (1):
HID: holtek: fix mouse probing
Bradley Scott (1):
ALSA: hda/realtek: Amp init fixup for HP ZBook 15 G6
Chao Yu (1):
f2fs: fix to do sanity check on last xattr entry in __f2fs_setxattr()
Colin Ian King (1):
ALSA: drivers: opl3: Fix incorrect use of vp->state
Dongliang Mu (1):
spi: change clk_disable_unprepare to clk_unprepare
Fabien Dessenne (1):
pinctrl: stm32: consider the GPIO offset to expose all the GPIO lines
Fernando Fernandez Mancera (1):
bonding: fix ad_actor_system option setting to default
Greg Jesionowski (1):
net: usb: lan78xx: add Allied Telesis AT29M2-AF
Greg Kroah-Hartman (1):
Linux 5.4.169
Guenter Roeck (6):
hwmon: (lm90) Fix usage of CONFIG2 register in detect function
hwmon: (lm90) Add basic support for TI TMP461
hwmon: (lm90) Introduce flag indicating extended temperature support
hwmon: (lm90) Drop critical attribute support for MAX6654
hwmom: (lm90) Fix citical alarm status for MAX6680/MAX6681
hwmon: (lm90) Do not report 'busy' status bit as alarm
Guodong Liu (1):
pinctrl: mediatek: fix global-out-of-bounds issue
Ignacy Gawędzki (1):
netfilter: fix regression in looped (broad|multi)cast's MAC handling
Ji-Ze Hong (Peter Hong) (1):
serial: 8250_fintek: Fix garbled text for console
Jiasheng Jiang (4):
qlcnic: potential dereference null pointer of rx_queue->page_ring
fjes: Check for error irq
drivers: net: smc911x: Check for error irq
sfc: falcon: Check null pointer of rx_queue->page_ring
John David Anglin (1):
parisc: Correct completer in lws start
Josh Lehan (1):
hwmon: (lm90) Add max6654 support to lm90 driver
José Expósito (2):
IB/qib: Fix memory leak in qib_user_sdma_queue_pkts()
Input: atmel_mxt_ts - fix double free in mxt_read_info_block
Lin Ma (3):
ax25: NPD bug when detaching AX25 device
hamradio: defer ax25 kfree after unregister_netdev
hamradio: improve the incomplete fix to avoid NPD
Marian Postevca (1):
usb: gadget: u_ether: fix race in setting MAC address in setup phase
Mian Yousaf Kaukab (1):
ipmi: ssif: initialize ssif_info->client early
Prathamesh Shete (1):
mmc: sdhci-tegra: Fix switch to HS400ES mode
Robert Marko (1):
arm64: dts: allwinner: orangepi-zero-plus: fix PHY mode
Rémi Denis-Courmont (1):
phonet/pep: refuse to enable an unbound pipe
Sean Christopherson (1):
KVM: VMX: Fix stale docs for kvm-intel.emulate_invalid_guest_state
Sumit Garg (1):
tee: optee: Fix incorrect page free bug
Thadeu Lima de Souza Cascardo (2):
ipmi: bail out if init_srcu_struct fails
ipmi: fix initialization when workqueue allocation fails
Ulf Hansson (1):
mmc: core: Disable card detect during shutdown
Willem de Bruijn (2):
net: accept UFOv6 packages in virtio_net_hdr_to_skb
net: skip virtio_net_hdr_set_proto if protocol already set
Wu Bo (1):
ipmi: Fix UAF when uninstall ipmi_si and ipmi_msghandler module
Xiaoke Wang (1):
ALSA: jack: Check the return value of kstrdup()
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +6 -2
@@ -2112,8 +2112,12 @@ Default is 1 (enabled) kvm-intel.emulate_invalid_guest_state= - [KVM,Intel] Enable emulation of invalid guest states - Default is 0 (disabled) + [KVM,Intel] Disable emulation of invalid guest state. + Ignored if kvm-intel.enable_unrestricted_guest=1, as + guest state is never invalid for unrestricted guests. + This param doesn't apply to nested guests (L2), as KVM + never emulates invalid L2 guest state. + Default is 1 (enabled) kvm-intel.flexpriority= [KVM,Intel] Disable FlexPriority feature (TPR shadow).
Documentation/hwmon/lm90.rst +31 -2
@@ -123,6 +123,18 @@ Supported chips: http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3497 + * Maxim MAX6654 + + Prefix: 'max6654' + + Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, + + 0x4c, 0x4d and 0x4e + + Datasheet: Publicly available at the Maxim website + + https://www.maximintegrated.com/en/products/sensors/MAX6654.html + * Maxim MAX6657 Prefix: 'max6657'
@@ -253,6 +265,16 @@ Supported chips: http://www.ti.com/litv/pdf/sbos686 + * Texas Instruments TMP461 + + Prefix: 'tmp461' + + Addresses scanned: I2C 0x48 through 0x4F + + Datasheet: Publicly available at TI website + + https://www.ti.com/lit/gpn/tmp461 + Author: Jean Delvare <[email protected]>
@@ -301,6 +323,13 @@ ADT7461, ADT7461A, NCT1008: * Extended temperature range (breaks compatibility) * Lower resolution for remote temperature +MAX6654: + * Better local resolution + * Selectable address + * Remote sensor type selection + * Extended temperature range + * Extended resolution only available when conversion rate <= 1 Hz + MAX6657 and MAX6658: * Better local resolution * Remote sensor type selection
@@ -336,8 +365,8 @@ SA56004X: All temperature values are given in degrees Celsius. Resolution is 1.0 degree for the local temperature, 0.125 degree for the remote -temperature, except for the MAX6657, MAX6658 and MAX6659 which have a -resolution of 0.125 degree for both temperatures. +temperature, except for the MAX6654, MAX6657, MAX6658 and MAX6659 which have +a resolution of 0.125 degree for both temperatures. Each sensor has its own high and low limits, plus a critical limit. Additionally, there is a relative hysteresis value common to both critical
Documentation/networking/bonding.txt +6 -5
@@ -191,11 +191,12 @@ ad_actor_sys_prio ad_actor_system In an AD system, this specifies the mac-address for the actor in - protocol packet exchanges (LACPDUs). The value cannot be NULL or - multicast. It is preferred to have the local-admin bit set for this - mac but driver does not enforce it. If the value is not given then - system defaults to using the masters' mac address as actors' system - address. + protocol packet exchanges (LACPDUs). The value cannot be a multicast + address. If the all-zeroes MAC is specified, bonding will internally + use the MAC of the bond itself. It is preferred to have the + local-admin bit set for this mac but driver does not enforce it. If + the value is not given then system defaults to using the masters' + mac address as actors' system address. This parameter has effect only in 802.3ad mode and is available through SysFs interface.
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 168 +SUBLEVEL = 169 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/kernel/entry-armv.S +3 -5
@@ -596,11 +596,9 @@ call_fpe: tstne r0, #0x04000000 @ bit 26 set on both ARM and Thumb-2 reteq lr and r8, r0, #0x00000f00 @ mask out CP number - THUMB( lsr r8, r8, #8 ) mov r7, #1 - add r6, r10, #TI_USED_CP - ARM( strb r7, [r6, r8, lsr #8] ) @ set appropriate used_cp[] - THUMB( strb r7, [r6, r8] ) @ set appropriate used_cp[] + add r6, r10, r8, lsr #8 @ add used_cp[] array offset first + strb r7, [r6, #TI_USED_CP] @ set appropriate used_cp[] #ifdef CONFIG_IWMMXT @ Test if we need to give access to iWMMXt coprocessors ldr r5, [r10, #TI_FLAGS]
@@ -609,7 +607,7 @@ call_fpe: bcs iwmmxt_task_enable #endif ARM( add pc, pc, r8, lsr #6 ) - THUMB( lsl r8, r8, #2 ) + THUMB( lsr r8, r8, #6 ) THUMB( add pc, r8 ) nop
arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-zero-plus.dts +1 -1
@@ -72,7 +72,7 @@ pinctrl-0 = <&emac_rgmii_pins>; phy-supply = <®_gmac_3v3>; phy-handle = <&ext_rgmii_phy>; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; status = "okay"; };
arch/parisc/kernel/syscall.S +1 -1
@@ -478,7 +478,7 @@ lws_start: extrd,u %r1,PSW_W_BIT,1,%r1 /* sp must be aligned on 4, so deposit the W bit setting into * the bottom of sp temporarily */ - or,ev %r1,%r30,%r30 + or,od %r1,%r30,%r30 /* Clip LWS number to a 32-bit value for 32-bit processes */ depdi 0, 31, 32, %r20
arch/x86/include/asm/pgtable.h +2 -2
@@ -1375,8 +1375,8 @@ static inline pmd_t pmd_swp_clear_soft_dirty(pmd_t pmd)#endif #endif -#define PKRU_AD_BIT 0x1 -#define PKRU_WD_BIT 0x2 +#define PKRU_AD_BIT 0x1u +#define PKRU_WD_BIT 0x2u#define PKRU_BITS_PER_PKEY 2#ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
drivers/char/ipmi/ipmi_msghandler.c +13 -8
@@ -2938,7 +2938,7 @@ cleanup_bmc_device(struct kref *ref)* with removing the device attributes while reading a device * attribute. */ -schedule_work (&bmc->remove_work); +queue_work (remove_work_wq, &bmc->remove_work); }/*
@@ -5156,22 +5156,27 @@ static int ipmi_init_msghandler(void)if (initialized) goto out; -init_srcu_struct (&ipmi_interfaces_srcu); - -timer_setup (&ipmi_timer, ipmi_timeout,0 ); -mod_timer (&ipmi_timer, jiffies +IPMI_TIMEOUT_JIFFIES ); - -atomic_notifier_chain_register (&panic_notifier_list, &panic_block); + rv =init_srcu_struct (&ipmi_interfaces_srcu); +if (rv) + goto out; remove_work_wq =create_singlethread_workqueue ("ipmi-msghandler-remove-wq" );if (!remove_work_wq) {pr_err ("unable to create ipmi-msghandler-remove-wq workqueue" ); rv = -ENOMEM ; - goto out; + goto out_wq; } +timer_setup (&ipmi_timer, ipmi_timeout,0 ); +mod_timer (&ipmi_timer, jiffies +IPMI_TIMEOUT_JIFFIES ); + +atomic_notifier_chain_register (&panic_notifier_list, &panic_block); + initialized = true; +out_wq: +if (rv) +cleanup_srcu_struct (&ipmi_interfaces_srcu); out:mutex_unlock (&ipmi_interfaces_mutex);return rv;
drivers/char/ipmi/ipmi_ssif.c +4 -3
@@ -1704,6 +1704,9 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id) } } + ssif_info->client = client; +i2c_set_clientdata (client, ssif_info); + rv =ssif_check_and_remove (client, ssif_info);/* If rv is 0 and addr source is not SI_ACPI, continue probing */ if (!rv && ssif_info->addr_source ==SI_ACPI ) {
@@ -1724,9 +1727,6 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)ipmi_addr_src_to_str (ssif_info->addr_source), client->addr, client->adapter->name, slave_addr); - ssif_info->client = client; -i2c_set_clientdata (client, ssif_info); -/* Now check for system interface capabilities */ msg[0 ] =IPMI_NETFN_APP_REQUEST <<2 ; msg[1 ] =IPMI_GET_SYSTEM_INTERFACE_CAPABILITIES_CMD ;
@@ -1926,6 +1926,7 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)dev_err (&ssif_info->client->dev,"Unable to start IPMI SSIF: %d\n" , rv); +i2c_set_clientdata (client,NULL );kfree (ssif_info); }kfree (resp);
drivers/hid/hid-holtek-mouse.c +15 -0
@@ -65,8 +65,23 @@ static __u8 *holtek_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc,static int holtek_mouse_probe (struct hid_device *hdev,const struct hid_device_id *id) { +int ret; +if (!hid_is_usb (hdev))return -EINVAL ; + + ret =hid_parse (hdev); +if (ret) { +hid_err (hdev,"hid parse failed: %d\n" , ret); +return ret; + } + + ret =hid_hw_start (hdev,HID_CONNECT_DEFAULT ); +if (ret) { +hid_err (hdev,"hw start failed: %d\n" , ret); +return ret; + } +return 0 ; }
drivers/hwmon/Kconfig +5 -4
@@ -1132,10 +1132,11 @@ config SENSORS_LM90 help If you say yes here you get support for National Semiconductor LM90, LM86, LM89 and LM99, Analog Devices ADM1032, ADT7461, and ADT7461A, - Maxim MAX6646, MAX6647, MAX6648, MAX6649, MAX6657, MAX6658, MAX6659, - MAX6680, MAX6681, MAX6692, MAX6695, MAX6696, ON Semiconductor NCT1008, - Winbond/Nuvoton W83L771W/G/AWG/ASG, Philips SA56004, GMT G781, and - Texas Instruments TMP451 sensor chips. + Maxim MAX6646, MAX6647, MAX6648, MAX6649, MAX6654, MAX6657, MAX6658, + MAX6659, MAX6680, MAX6681, MAX6692, MAX6695, MAX6696, + ON Semiconductor NCT1008, Winbond/Nuvoton W83L771W/G/AWG/ASG, + Philips SA56004, GMT G781, Texas Instruments TMP451 and TMP461 + sensor chips. This driver can also be built as a module. If so, the module will be called lm90.
drivers/hwmon/lm90.c +140 -60
445 lines not on this page · raw message
drivers/infiniband/hw/qib/qib_user_sdma.c +1 -1
@@ -941,7 +941,7 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd, &addrlimit) || addrlimit > type_max(typeof(pkt->addrlimit))) { ret = -EINVAL ; - goto free_pbc; + goto free_pkt; } pkt->addrlimit = addrlimit;
drivers/input/mouse/elantech.c +7 -1
@@ -1588,7 +1588,13 @@ static const struct dmi_system_id no_hw_res_dmi_table[] = {*/ static int elantech_change_report_id (struct psmouse *psmouse) { -unsigned char param[2 ] = {0x10 ,0x03 }; +/* +* NOTE: the code is expecting to receive param[] as an array of 3 +* items (see __ps2_command()), even if in this case only 2 are +* actually needed. Make sure the array size is 3 to avoid potential +* stack out-of-bound accesses. +*/ +unsigned char param[3 ] = {0x10 ,0x03 }; if (elantech_write_reg_params(psmouse, 0x7, param) || elantech_read_reg_params(psmouse, 0x7, param) ||
drivers/input/touchscreen/atmel_mxt_ts.c +1 -1
@@ -1794,7 +1794,7 @@ static int mxt_read_info_block(struct mxt_data *data)if (error) {dev_err (&client->dev,"Error %d parsing object table\n" , error);mxt_free_object_table (data); - goto err_free_mem; +return error; } data->object_table = (struct mxt_object *)(id_buf +MXT_OBJECT_START );
drivers/mmc/core/core.c +6 -1
@@ -2364,7 +2364,7 @@ void mmc_start_host(struct mmc_host *host)_mmc_detect_change (host,0 , false); } -void mmc_stop_host (struct mmc_host *host) +void __mmc_stop_host (struct mmc_host *host) {if (host->slot.cd_irq >=0 ) {mmc_gpio_set_cd_wake (host, false);
@@ -2373,6 +2373,11 @@ void mmc_stop_host(struct mmc_host *host) host->rescan_disable =1 ;cancel_delayed_work_sync (&host->detect); +} + +void mmc_stop_host (struct mmc_host *host) +{ +__mmc_stop_host (host);/* clear pm flags now and let card drivers set them as needed */ host->pm_flags =0 ;
drivers/mmc/core/core.h +1 -0
@@ -69,6 +69,7 @@ static inline void mmc_delay(unsigned int ms)void mmc_rescan (struct work_struct *work);void mmc_start_host (struct mmc_host *host); +void __mmc_stop_host (struct mmc_host *host);void mmc_stop_host (struct mmc_host *host); void _mmc_detect_change(struct mmc_host *host, unsigned long delay,
drivers/mmc/core/host.c +9 -0
@@ -76,9 +76,18 @@ static void mmc_host_classdev_release(struct device *dev)kfree (host); } +static int mmc_host_classdev_shutdown (struct device *dev) +{ +struct mmc_host *host =cls_dev_to_mmc_host (dev); + +__mmc_stop_host (host); +return 0 ; +} +static struct class mmc_host_class = { .name ="mmc_host" , .dev_release = mmc_host_classdev_release, + .shutdown_pre = mmc_host_classdev_shutdown, .pm =MMC_HOST_CLASS_DEV_PM_OPS , };
drivers/mmc/host/sdhci-tegra.c +26 -17
55 lines not on this page · raw message
drivers/net/bonding/bond_options.c +1 -1
@@ -1452,7 +1452,7 @@ static int bond_option_ad_actor_system_set(struct bonding *bond, mac = (u8 *)&newval->value; } -if (!is_valid_ether_addr (mac)) +if (is_multicast_ether_addr (mac)) goto err;netdev_dbg (bond->dev,"Setting ad_actor_system to %pM\n" , mac);
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h +1 -1
@@ -202,7 +202,7 @@ int qlcnic_sriov_get_vf_vport_info(struct qlcnic_adapter *, struct qlcnic_info *, u16);int qlcnic_sriov_cfg_vf_guest_vlan (struct qlcnic_adapter *,u16 ,u8 );void qlcnic_sriov_free_vlans (struct qlcnic_adapter *); -void qlcnic_sriov_alloc_vlans (struct qlcnic_adapter *); +int qlcnic_sriov_alloc_vlans (struct qlcnic_adapter *);bool qlcnic_sriov_check_any_vlan (struct qlcnic_vf_info *);void qlcnic_sriov_del_vlan_id (struct qlcnic_sriov *,struct qlcnic_vf_info *,u16 );
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +9 -3
@@ -433,7 +433,7 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct qlcnic_adapter *adapter, struct qlcnic_cmd_args *cmd) {struct qlcnic_sriov *sriov = adapter->ahw->sriov; -int i, num_vlans; +int i, num_vlans, ret;u16 *vlans;if (sriov->allowed_vlans)
@@ -444,7 +444,9 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct qlcnic_adapter *adapter,dev_info (&adapter->pdev->dev,"Number of allowed Guest VLANs = %d\n" , sriov->num_allowed_vlans); -qlcnic_sriov_alloc_vlans (adapter); + ret =qlcnic_sriov_alloc_vlans (adapter); +if (ret) +return ret;if (!sriov->any_vlan)return 0 ;
@@ -2160,7 +2162,7 @@ static int qlcnic_sriov_vf_resume(struct qlcnic_adapter *adapter)return err; } -void qlcnic_sriov_alloc_vlans (struct qlcnic_adapter *adapter) +int qlcnic_sriov_alloc_vlans (struct qlcnic_adapter *adapter) {struct qlcnic_sriov *sriov = adapter->ahw->sriov;struct qlcnic_vf_info *vf;
@@ -2170,7 +2172,11 @@ void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter) vf = &sriov->vf_info[i]; vf->sriov_vlans =kcalloc (sriov->num_allowed_vlans,sizeof (*vf->sriov_vlans),GFP_KERNEL ); +if (!vf->sriov_vlans) +return -ENOMEM ; } + +return 0 ; }void qlcnic_sriov_free_vlans (struct qlcnic_adapter *adapter)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c +3 -1
@@ -598,7 +598,9 @@ static int __qlcnic_pci_sriov_enable(struct qlcnic_adapter *adapter,if (err) goto del_flr_queue; -qlcnic_sriov_alloc_vlans (adapter); + err =qlcnic_sriov_alloc_vlans (adapter); +if (err) + goto del_flr_queue;return err;
drivers/net/ethernet/sfc/falcon/rx.c +4 -1
@@ -726,7 +726,10 @@ static void ef4_init_rx_recycle_ring(struct ef4_nic *efx, efx->rx_bufs_per_page); rx_queue->page_ring =kcalloc (page_ring_size,sizeof (*rx_queue->page_ring),GFP_KERNEL ); - rx_queue->page_ptr_mask = page_ring_size -1 ; +if (!rx_queue->page_ring) + rx_queue->page_ptr_mask =0 ; +else + rx_queue->page_ptr_mask = page_ring_size -1 ; }void ef4_init_rx_queue (struct ef4_rx_queue *rx_queue)
drivers/net/ethernet/smsc/smc911x.c +5 -0
@@ -2069,6 +2069,11 @@ static int smc911x_drv_probe(struct platform_device *pdev) ndev->dma = (unsigned char )-1 ; ndev->irq =platform_get_irq (pdev,0 ); +if (ndev->irq <0 ) { + ret = ndev->irq; + goto release_both; + } + lp =netdev_priv (ndev); lp->netdev = ndev;#ifdef SMC_DYNAMIC_BUS_CONFIG
drivers/net/fjes/fjes_main.c +5 -0
@@ -1269,6 +1269,11 @@ static int fjes_probe(struct platform_device *plat_dev) hw->hw_res.start = res->start; hw->hw_res.size =resource_size (res); hw->hw_res.irq =platform_get_irq (plat_dev,0 ); +if (hw->hw_res.irq <0 ) { + err = hw->hw_res.irq; + goto err_free_control_wq; + } + err =fjes_hw_init (&adapter->hw);if (err) goto err_free_control_wq;
drivers/net/hamradio/mkiss.c +3 -2
@@ -793,13 +793,14 @@ static void mkiss_close(struct tty_struct *tty)*/ netif_stop_queue (ax->dev); -/* Free all AX25 frame buffers. */ +unregister_netdev (ax->dev); + +/* Free all AX25 frame buffers after unreg. */ kfree (ax->rbuff);kfree (ax->xbuff); ax->tty =NULL ; -unregister_netdev (ax->dev);free_netdev (ax->dev); }
drivers/net/usb/lan78xx.c +6 -0
@@ -64,6 +64,8 @@#define LAN7801_USB_PRODUCT_ID (0x7801)#define LAN78XX_EEPROM_MAGIC (0x78A5)#define LAN78XX_OTP_MAGIC (0x78F3) +#define AT29M2AF_USB_VENDOR_ID (0x07C9) +#define AT29M2AF_USB_PRODUCT_ID (0x0012)#define MII_READ 1#define MII_WRITE 0
@@ -4153,6 +4155,10 @@ static const struct usb_device_id products[] = {/* LAN7801 USB Gigabit Ethernet Device */ USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7801_USB_PRODUCT_ID), }, + { +/* ATM2-AF USB Gigabit Ethernet Device */ + USB_DEVICE(AT29M2AF_USB_VENDOR_ID, AT29M2AF_USB_PRODUCT_ID), + }, {}, };MODULE_DEVICE_TABLE (usb, products);
drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c +6 -2
@@ -236,8 +236,12 @@ static int mtk_xt_get_gpio_n(void *data, unsigned long eint_n, desc = (const struct mtk_pin_desc *)hw->soc->pins; *gpio_chip = &hw->chip; -/* Be greedy to guess first gpio_n is equal to eint_n */ -if (desc[eint_n].eint.eint_n == eint_n) +/* +* Be greedy to guess first gpio_n is equal to eint_n. +* Only eint virtual eint number is greater than gpio number. +*/ +if (hw->soc->npins > eint_n && + desc[eint_n].eint.eint_n == eint_n) *gpio_n = eint_n;else *gpio_n =mtk_xt_find_eint_num (hw, eint_n);
drivers/pinctrl/stm32/pinctrl-stm32.c +4 -4
@@ -1186,10 +1186,10 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, bank_nr = args.args[1 ] /STM32_GPIO_PINS_PER_BANK ; bank->gpio_chip.base = args.args[1 ]; - npins = args.args[2 ]; -while (!of_parse_phandle_with_fixed_args (np,"gpio-ranges" ,3 , - ++i, &args)) - npins += args.args[2 ]; +/* get the last defined gpio line (offset + nb of pins) */ + npins = args.args[0 ] + args.args[2 ]; +while (!of_parse_phandle_with_fixed_args (np,"gpio-ranges" ,3 , ++i, &args)) + npins =max (npins, (int )(args.args[0 ] + args.args[2 ])); }else { bank_nr = pctl->nbanks; bank->gpio_chip.base = bank_nr *STM32_GPIO_PINS_PER_BANK ;
drivers/spi/spi-armada-3700.c +1 -1
@@ -906,7 +906,7 @@ static int a3700_spi_probe(struct platform_device *pdev)return 0 ; error_clk: -clk_disable_unprepare (spi->clk); +clk_unprepare (spi->clk); error:spi_master_put (master); out:
drivers/tee/optee/shm_pool.c +2 -4
@@ -41,10 +41,8 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, goto err; } -for (i =0 ; i < nr_pages; i++) { - pages[i] = page; - page++; - } +for (i =0 ; i < nr_pages; i++) + pages[i] = page + i; shm->flags |=TEE_SHM_REGISTER ; rc = optee_shm_register(shm->ctx, shm, pages, nr_pages,
drivers/tty/serial/8250/8250_fintek.c +0 -19
@@ -285,24 +285,6 @@ static void fintek_8250_set_max_fifo(struct fintek_8250 *pdata) } } -static void fintek_8250_goto_highspeed (struct uart_8250_port *uart, -struct fintek_8250 *pdata) -{ -sio_write_reg (pdata,LDN , pdata->index); - -switch (pdata->pid) { -case CHIP_ID_F81866 :/* set uart clock for high speed serial mode */ -sio_write_mask_reg (pdata,F81866_UART_CLK , -F81866_UART_CLK_MASK , -F81866_UART_CLK_14_769MHZ ); - - uart->port.uartclk =921600 *16 ; -break ; -default :/* leave clock speed untouched */ -break ; - } -} -static void fintek_8250_set_termios (struct uart_port *port,struct ktermios *termios,struct ktermios *old)
@@ -422,7 +404,6 @@ static int probe_setup_port(struct fintek_8250 *pdata,fintek_8250_set_irq_mode (pdata, level_mode);fintek_8250_set_max_fifo (pdata); -fintek_8250_goto_highspeed (uart, pdata);fintek_8250_exit_key (addr[i]);
drivers/usb/gadget/function/u_ether.c +5 -10
@@ -860,19 +860,23 @@ int gether_register_netdev(struct net_device *net) {struct eth_dev *dev;struct usb_gadget *g; -struct sockaddr sa;int status;if (!net->dev.parent)return -EINVAL ; dev =netdev_priv (net); g = dev->gadget; + +memcpy (net->dev_addr, dev->dev_mac,ETH_ALEN ); + net->addr_assign_type =NET_ADDR_RANDOM ; + status =register_netdev (net);if (status <0 ) {dev_dbg (&g->dev,"register_netdev failed, %d\n" , status);return status; }else {INFO (dev,"HOST MAC %pM\n" , dev->host_mac); +INFO (dev,"MAC %pM\n" , dev->dev_mac);/* two kinds of host-initiated state changes: * - iff DATA transfer is active, carrier is "on"
@@ -880,15 +884,6 @@ int gether_register_netdev(struct net_device *net)*/ netif_carrier_off (net); } - sa.sa_family = net->type; -memcpy (sa.sa_data, dev->dev_mac,ETH_ALEN ); -rtnl_lock (); - status =dev_set_mac_address (net, &sa,NULL ); -rtnl_unlock (); -if (status) -pr_warn ("cannot set self ethernet address: %d\n" , status); -else -INFO (dev,"MAC %pM\n" , dev->dev_mac);return status; }
fs/f2fs/xattr.c +10 -1
@@ -661,8 +661,17 @@ static int __f2fs_setxattr(struct inode *inode, int index, } last = here; -while (!IS_XATTR_LAST_ENTRY (last)) +while (!IS_XATTR_LAST_ENTRY (last)) { +if ((void *)(last) +sizeof (__u32) > last_base_addr || + (void *)XATTR_NEXT_ENTRY (last) > last_base_addr) { +f2fs_err (F2FS_I_SB (inode),"inode (%lu) has invalid last xattr entry, entry_size: %zu" , + inode->i_ino,ENTRY_SIZE (last)); +set_sbi_flag (F2FS_I_SB (inode),SBI_NEED_FSCK ); + error = -EFSCORRUPTED ; + goto exit; + } last =XATTR_NEXT_ENTRY (last); + } newsize =XATTR_ALIGN (sizeof (struct f2fs_xattr_entry ) + len + size);
include/linux/virtio_net.h +23 -2
@@ -7,9 +7,27 @@#include <uapi/linux/udp.h> #include <uapi/linux/virtio_net.h> +static inline bool virtio_net_hdr_match_proto (__be16 protocol,__u8 gso_type) +{ +switch (gso_type & ~VIRTIO_NET_HDR_GSO_ECN ) { +case VIRTIO_NET_HDR_GSO_TCPV4 : +return protocol ==cpu_to_be16 (ETH_P_IP ); +case VIRTIO_NET_HDR_GSO_TCPV6 : +return protocol ==cpu_to_be16 (ETH_P_IPV6 ); +case VIRTIO_NET_HDR_GSO_UDP : +return protocol ==cpu_to_be16 (ETH_P_IP ) || + protocol ==cpu_to_be16 (ETH_P_IPV6 ); +default : +return false; + } +} +static inline int virtio_net_hdr_set_proto (struct sk_buff *skb,const struct virtio_net_hdr *hdr) { +if (skb->protocol) +return 0 ; +switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN ) {case VIRTIO_NET_HDR_GSO_TCPV4 :case VIRTIO_NET_HDR_GSO_UDP :
@@ -88,9 +106,12 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,if (!skb->protocol) {__be16 protocol =dev_parse_header_protocol (skb); -virtio_net_hdr_set_proto (skb, hdr); -if (protocol && protocol != skb->protocol) +if (!protocol) +virtio_net_hdr_set_proto (skb, hdr); +else if (!virtio_net_hdr_match_proto (protocol, hdr->gso_type))return -EINVAL ; +else + skb->protocol = protocol; } retry: if (!skb_flow_dissect_flow_keys_basic(NULL, skb, &keys,
mm/mempolicy.c +3 -2
@@ -2143,8 +2143,9 @@ alloc_pages_vma(gfp_t gfp, int order, struct vm_area_struct *vma,* memory as well. */ if (!page && (gfp & __GFP_DIRECT_RECLAIM)) - page =__alloc_pages_node (hpage_node, - gfp | __GFP_NORETRY, order); + page =__alloc_pages_nodemask (gfp | __GFP_NORETRY, + order, hpage_node, + nmask); goto out; }
net/ax25/af_ax25.c +3 -1
@@ -85,8 +85,10 @@ static void ax25_kill_by_device(struct net_device *dev) again:ax25_for_each (s, &ax25_list) {if (s->ax25_dev == ax25_dev) { - s->ax25_dev =NULL ;spin_unlock_bh (&ax25_list_lock); +lock_sock (s->sk); + s->ax25_dev =NULL ; +release_sock (s->sk);ax25_disconnect (s,ENETUNREACH );spin_lock_bh (&ax25_list_lock);
net/netfilter/nfnetlink_log.c +2 -1
@@ -557,7 +557,8 @@ __build_packet_message(struct nfnl_log_net *log, goto nla_put_failure;if (indev && skb->dev && - skb->mac_header != skb->network_header) { +skb_mac_header_was_set (skb) && +skb_mac_header_len (skb) !=0 ) {struct nfulnl_msg_packet_hw phw;int len;
net/netfilter/nfnetlink_queue.c +2 -1
@@ -562,7 +562,8 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, goto nla_put_failure;if (indev && entskb->dev && -skb_mac_header_was_set (entskb)) { +skb_mac_header_was_set (entskb) && +skb_mac_header_len (entskb) !=0 ) {struct nfqnl_msg_packet_hw phw;int len;
net/phonet/pep.c +2 -0
@@ -946,6 +946,8 @@ static int pep_ioctl(struct sock *sk, int cmd, unsigned long arg) ret = -EBUSY ; else if (sk->sk_state == TCP_ESTABLISHED) ret = -EISCONN ; + else if (!pn->pn_sk.sobject) + ret = -EADDRNOTAVAIL ; else ret =pep_sock_enable (sk,NULL ,0 );release_sock (sk);
sound/core/jack.c +4 -0
@@ -220,6 +220,10 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,return -ENOMEM ; jack->id =kstrdup (id,GFP_KERNEL ); +if (jack->id ==NULL ) { +kfree (jack); +return -ENOMEM ; + }/* don't creat input device for phantom jack */ if (!phantom_jack) {
sound/drivers/opl3/opl3_midi.c +1 -1
@@ -398,7 +398,7 @@ void snd_opl3_note_on(void *p, int note, int vel, struct snd_midi_channel *chan) }if (instr_4op) { vp2 = &opl3->voices[voice +3 ]; -if (vp->state >0 ) { +if (vp2->state >0 ) { opl3_reg = reg_side | (OPL3_REG_KEYON_BLOCK + voice_offset +3 ); reg_val = vp->keyon_reg & ~OPL3_KEYON_BIT ;
sound/pci/hda/patch_realtek.c +1 -0
@@ -8101,6 +8101,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x103c ,0x84da ,"HP OMEN dc0019-ur" ,ALC295_FIXUP_HP_OMEN ),SND_PCI_QUIRK (0x103c ,0x84e7 ,"HP Pavilion 15" ,ALC269_FIXUP_HP_MUTE_LED_MIC3 ),SND_PCI_QUIRK (0x103c ,0x8519 ,"HP Spectre x360 15-df0xxx" ,ALC285_FIXUP_HP_SPECTRE_X360 ), +SND_PCI_QUIRK (0x103c ,0x860f ,"HP ZBook 15 G6" ,ALC285_FIXUP_HP_GPIO_AMP_INIT ),SND_PCI_QUIRK (0x103c ,0x861f ,"HP Elite Dragonfly G1" ,ALC285_FIXUP_HP_GPIO_AMP_INIT ),SND_PCI_QUIRK (0x103c ,0x869d ,"HP" ,ALC236_FIXUP_HP_MUTE_LED ), SND_PCI_QUIRK(0x103c, 0x8724, "HP EliteBook 850 G7", ALC285_FIXUP_HP_GPIO_LED),