Linux 5.4.183
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.183 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
------------
Makefile | 2 arch/arm/kernel/kgdb.c | 36 ++++++-- arch/arm/mm/mmu.c | 2 arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi | 17 ++- arch/ia64/kernel/acpi.c | 7 + block/blk-flush.c | 4 drivers/ata/pata_hpt37x.c | 4 drivers/dma/sh/shdma-base.c | 4 drivers/firmware/arm_scmi/driver.c | 2 drivers/firmware/efi/vars.c | 5 - drivers/hid/hid-debug.c | 5 - drivers/hid/hid-input.c | 3 drivers/i2c/busses/Kconfig | 4 drivers/i2c/busses/i2c-bcm2835.c | 11 ++ drivers/input/input.c | 6 + drivers/input/mouse/elan_i2c_core.c | 64 +++++--------- drivers/net/arcnet/com20020-pci.c | 3 drivers/net/can/usb/gs_usb.c | 10 +- drivers/net/ethernet/chelsio/cxgb3/t3_hw.c | 2 drivers/net/ethernet/ibm/ibmvnic.c | 4 drivers/net/ethernet/intel/iavf/iavf_main.c | 7 + drivers/net/ethernet/intel/igc/igc_phy.c | 4 drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 6 - drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 6 - drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 - drivers/net/hamradio/mkiss.c | 2 drivers/net/usb/cdc_mbim.c | 5 + drivers/net/wireless/mac80211_hwsim.c | 13 ++ drivers/net/xen-netfront.c | 39 +++++--- drivers/soc/fsl/qe/qe_io.c | 2 drivers/usb/gadget/legacy/inode.c | 10 +- fs/btrfs/qgroup.c | 9 +- fs/btrfs/tree-log.c | 61 ++++++++++--- fs/cifs/cifsfs.c | 1 include/linux/topology.h | 1 include/net/netfilter/nf_queue.h | 2 include/net/xfrm.h | 1 include/uapi/linux/input-event-codes.h | 4 include/uapi/linux/xfrm.h | 6 + kernel/sched/topology.c | 99 ++++++++++------------ kernel/trace/trace.c | 4 kernel/trace/trace_events_hist.c | 6 - kernel/trace/trace_kprobe.c | 2 mm/memfd.c | 40 ++++++-- net/batman-adv/hard-interface.c | 29 ++++-- net/dcb/dcbnl.c | 44 +++++++++ net/ipv4/esp4.c | 2 net/ipv6/esp6.c | 2 net/ipv6/ip6_output.c | 11 +- net/mac80211/rx.c | 4 net/netfilter/core.c | 5 - net/netfilter/nf_queue.c | 24 ++++- net/netfilter/nfnetlink_queue.c | 12 ++ net/smc/smc_core.c | 5 - net/wireless/nl80211.c | 12 ++ net/xfrm/xfrm_device.c | 6 + net/xfrm/xfrm_interface.c | 2 net/xfrm/xfrm_state.c | 14 --- sound/soc/codecs/cs4265.c | 3 sound/soc/codecs/rt5668.c | 12 +- sound/soc/codecs/rt5682.c | 12 +- sound/soc/soc-ops.c | 4 sound/x86/intel_hdmi_audio.c | 2 63 files changed, 488 insertions(+), 248 deletions(-)
Alyssa Ross (1):
firmware: arm_scmi: Remove space in MODULE_ALIAS name
Antony Antony (1):
xfrm: fix the if_id check in changelink
Benjamin Beichler (1):
mac80211_hwsim: report NOACK frames in tx_status
Brian Norris (1):
arm64: dts: rockchip: Switch RK3399-Gru DP to SPDIF output
Corinna Vinschen (1):
igc: igc_read_phy_reg_gpy: drop premature return
D. Wythe (2):
net/smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error generated by client net/smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error cause by server
Daniele Palmas (1):
net: usb: cdc_mbim: avoid altsetting toggling for Telit FN990
Dietmar Eggemann (1):
sched/topology: Fix sched_domain_topology_level alloc in sched_init_numa()
Eric Anholt (1):
i2c: bcm2835: Avoid clock stretching timeouts
Eric Dumazet (1):
netfilter: fix use-after-free in __nf_register_net_hook()
Fabio Estevam (1):
ASoC: cs4265: Fix the duplicated control name
Filipe Manana (2):
btrfs: fix lost prealloc extents beyond eof after full fsync
btrfs: add missing run of delayed items after unlink during log replay
Florian Westphal (2):
netfilter: nf_queue: don't assume sk is full socket
netfilter: nf_queue: fix possible use-after-free
Greg Kroah-Hartman (1):
Linux 5.4.183
Hangyu Hua (2):
usb: gadget: don't release an existing dev->buf
usb: gadget: clear related members when goto fail
Hans de Goede (2):
Input: elan_i2c - move regulator_[en|dis]able() out of elan_[en|dis]able_power()
Input: elan_i2c - fix regulator enable count imbalance after suspend/resume
Huang Pei (1):
hamradio: fix macro redefine warning
Hugh Dickins (1):
memfd: fix F_SEAL_WRITE after shmem huge page allocated
JaeMan Park (1):
mac80211_hwsim: initialize ieee80211_tx_info at hw_scan_work
Jann Horn (1):
efivars: Respect "block" flag in efivar_entry_set_safe()
Jia-Ju Bai (1):
net: chelsio: cxgb3: check the return value of pci_find_capability()
Jiasheng Jiang (2):
soc: fsl: qe: Check of ioremap return value
nl80211: Handle nla_memdup failures in handle_nan_filter
Jiri Bohac (2):
xfrm: fix MTU regression
Revert "xfrm: xfrm_state_mtu should return at least 1280 for ipv6"
José Expósito (1):
Input: clear BTN_RIGHT/MIDDLE on buttonpads
Kai Vehmanen (2):
ASoC: rt5668: do not block workqueue if card is unbound
ASoC: rt5682: do not block workqueue if card is unbound
Leon Romanovsky (1):
xfrm: enforce validity of offload input flags
Maciej Fijalkowski (1):
ixgbe: xsk: change !netif_carrier_ok() handling in ixgbe_xmit_zc()
Marek Marczykowski-Górecki (1):
xen/netfront: destroy queues before real_num_tx_queues is zeroed
Marek Vasut (1):
ASoC: ops: Shift tested values in snd_soc_put_volsw() by +min
Nicolas Escande (1):
mac80211: fix forwarded mesh frames AC & queue selection
Randy Dunlap (4):
net: stmmac: fix return value of __setup handler
net: sxgbe: fix return value of __setup handler
ARM: 9182/1: mmu: fix returns from early_param() and __setup() functions
tracing: Fix return value of __setup handlers
Ronnie Sahlberg (1):
cifs: fix double free race when mount fails in cifs_get_root()
Russell King (Oracle) (1):
ARM: Fix kgdb breakpoint for Thumb2
Sasha Neftin (1):
igc: igc_write_phy_reg_gpy: drop premature return
Sergey Shtylyov (1):
ata: pata_hpt37x: fix PCI clock detection
Sidong Yang (1):
btrfs: qgroup: fix deadlock between rescan worker and remove qgroup
Slawomir Laba (1):
iavf: Fix missing check for running netdev
Steven Rostedt (Google) (1):
tracing/histogram: Fix sorting on old "cpu" value
Sukadev Bhattiprolu (1):
ibmvnic: free reset-work-item when flushing
Sven Eckelmann (3):
batman-adv: Request iflink once in batadv-on-batadv check
batman-adv: Request iflink once in batadv_get_real_netdevice
batman-adv: Don't expect inter-netns unique iflink indices
Valentin Schneider (2):
sched/topology: Make sched_init_numa() use a set for the deduplicating sort
ia64: ensure proper NUMA distance and possible map initialization
Vincent Mailhol (1):
can: gs_usb: change active_channels's type from atomic_t to u8
Vladimir Oltean (2):
net: dcb: flush lingering app table entries for unregistered devices
net: dcb: disable softirqs in dcbnl_flush_dev()
William Mahon (2):
HID: add mapping for KEY_DICTATE
HID: add mapping for KEY_ALL_APPLICATIONS
Wolfram Sang (2):
i2c: cadence: allow COMPILE_TEST
i2c: qup: allow COMPILE_TEST
Ye Bin (1):
block: Fix fsync always failed if once failed
Yongzhi Liu (1):
dmaengine: shdma: Fix runtime PM imbalance on error
Zhen Ni (1):
ALSA: intel_hdmi: Fix reference to PCM buffer address
Zheyu Ma (1):
net: arcnet: com20020: Fix null-ptr-deref in com20020pci_probe()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 182 +SUBLEVEL = 183 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/kernel/kgdb.c +28 -8
@@ -154,22 +154,38 @@ static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int instr)return 0 ; } -static struct undef_hook kgdb_brkpt_hook = { +static struct undef_hook kgdb_brkpt_arm_hook = { .instr_mask =0xffffffff , .instr_val =KGDB_BREAKINST , - .cpsr_mask =MODE_MASK , + .cpsr_mask =PSR_T_BIT |MODE_MASK , .cpsr_val =SVC_MODE , .fn = kgdb_brk_fn }; -static struct undef_hook kgdb_compiled_brkpt_hook = { +static struct undef_hook kgdb_brkpt_thumb_hook = { + .instr_mask =0xffff , + .instr_val =KGDB_BREAKINST &0xffff , + .cpsr_mask =PSR_T_BIT |MODE_MASK , + .cpsr_val =PSR_T_BIT |SVC_MODE , + .fn = kgdb_brk_fn +}; + +static struct undef_hook kgdb_compiled_brkpt_arm_hook = { .instr_mask =0xffffffff , .instr_val =KGDB_COMPILED_BREAK , - .cpsr_mask =MODE_MASK , + .cpsr_mask =PSR_T_BIT |MODE_MASK , .cpsr_val =SVC_MODE , .fn = kgdb_compiled_brk_fn }; +static struct undef_hook kgdb_compiled_brkpt_thumb_hook = { + .instr_mask =0xffff , + .instr_val =KGDB_COMPILED_BREAK &0xffff , + .cpsr_mask =PSR_T_BIT |MODE_MASK , + .cpsr_val =PSR_T_BIT |SVC_MODE , + .fn = kgdb_compiled_brk_fn +}; +static int __kgdb_notify (struct die_args *args,unsigned long cmd) {struct pt_regs *regs = args->regs;
@@ -210,8 +226,10 @@ int kgdb_arch_init(void)if (ret !=0 )return ret; -register_undef_hook (&kgdb_brkpt_hook); -register_undef_hook (&kgdb_compiled_brkpt_hook); +register_undef_hook (&kgdb_brkpt_arm_hook); +register_undef_hook (&kgdb_brkpt_thumb_hook); +register_undef_hook (&kgdb_compiled_brkpt_arm_hook); +register_undef_hook (&kgdb_compiled_brkpt_thumb_hook);return 0 ; }
@@ -224,8 +242,10 @@ int kgdb_arch_init(void)*/ void kgdb_arch_exit (void ) { -unregister_undef_hook (&kgdb_brkpt_hook); -unregister_undef_hook (&kgdb_compiled_brkpt_hook); +unregister_undef_hook (&kgdb_brkpt_arm_hook); +unregister_undef_hook (&kgdb_brkpt_thumb_hook); +unregister_undef_hook (&kgdb_compiled_brkpt_arm_hook); +unregister_undef_hook (&kgdb_compiled_brkpt_thumb_hook);unregister_die_notifier (&kgdb_notifier); }
arch/arm/mm/mmu.c +2 -0
@@ -229,12 +229,14 @@ early_param("ecc", early_ecc);static int __init early_cachepolicy (char *p) {pr_warn ("cachepolicy kernel parameter not supported without cp15\n" ); +return 0 ; }early_param ("cachepolicy" , early_cachepolicy);static int __init noalign_setup (char *__unused) {pr_warn ("noalign kernel parameter not supported without cp15\n" ); +return 1 ; }__setup ("noalign" , noalign_setup);
arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi +12 -5
@@ -281,7 +281,7 @@ sound: sound { compatible = "rockchip,rk3399-gru-sound"; - rockchip,cpu = <&i2s0 &i2s2>; + rockchip,cpu = <&i2s0 &spdif>; }; };
@@ -432,10 +432,6 @@ ap_i2c_audio: &i2c8 { status = "okay"; }; -&i2s2 { - status = "okay"; -}; - &io_domains { status = "okay";
@@ -532,6 +528,17 @@ ap_i2c_audio: &i2c8 { vqmmc-supply = <&ppvar_sd_card_io>; }; +&spdif { + status = "okay"; + + /* + * SPDIF is routed internally to DP; we either don't use these pins, or + * mux them to something else. + */ + /delete-property/ pinctrl-0; + /delete-property/ pinctrl-names; +}; + &spi1 { status = "okay";
arch/ia64/kernel/acpi.c +5 -2
@@ -448,7 +448,8 @@ void __init acpi_numa_fixup(void)if (srat_num_cpus ==0 ) {node_set_online (0 ); node_cpuid[0 ].phys_id =hard_smp_processor_id (); -return ; +slit_distance (0 ,0 ) =LOCAL_DISTANCE ; + goto out; }/*
@@ -491,7 +492,7 @@ void __init acpi_numa_fixup(void)for (j =0 ; j <MAX_NUMNODES ; j++)slit_distance (i, j) = i == j ?LOCAL_DISTANCE :REMOTE_DISTANCE ; -return ; + goto out; }memset (numa_slit,-1 ,sizeof (numa_slit));
@@ -516,6 +517,8 @@ void __init acpi_numa_fixup(void)printk ("\n" ); }#endif +out: + node_possible_map = node_online_map; }#endif /* CONFIG_ACPI_NUMA */
block/blk-flush.c +3 -1
@@ -222,8 +222,10 @@ static void flush_end_io(struct request *flush_rq, blk_status_t error)return ; } -if (fq->rq_status !=BLK_STS_OK ) +if (fq->rq_status !=BLK_STS_OK ) { error = fq->rq_status; + fq->rq_status =BLK_STS_OK ; + } hctx = flush_rq->mq_hctx;if (!q->elevator) {
drivers/ata/pata_hpt37x.c +2 -2
@@ -962,14 +962,14 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)if ((freq >>12 ) !=0xABCDE ) {int i; -u8 sr; +u16 sr;u32 total =0 ;pr_warn ("BIOS has not set timing clocks\n" );/* This is the process the HPT371 BIOS is reported to use */ for (i =0 ; i <128 ; i++) { -pci_read_config_byte (dev,0x78 , &sr); +pci_read_config_word (dev,0x78 , &sr); total += sr &0x1FF ;udelay (15 ); }
drivers/dma/sh/shdma-base.c +3 -1
@@ -115,8 +115,10 @@ static dma_cookie_t shdma_tx_submit(struct dma_async_tx_descriptor *tx) ret =pm_runtime_get (schan->dev);spin_unlock_irq (&schan->chan_lock); -if (ret <0 ) +if (ret <0 ) {dev_err (schan->dev,"%s(): GET = %d\n" , __func__, ret); +pm_runtime_put (schan->dev); + }pm_runtime_barrier (schan->dev);
drivers/firmware/arm_scmi/driver.c +1 -1
@@ -983,7 +983,7 @@ static struct platform_driver scmi_driver = {module_platform_driver (scmi_driver); -MODULE_ALIAS ("platform: arm-scmi" ); +MODULE_ALIAS ("platform:arm-scmi" );MODULE_AUTHOR ("Sudeep Holla <[email protected]>" );MODULE_DESCRIPTION ("ARM SCMI protocol driver" );MODULE_LICENSE ("GPL v2" );
drivers/firmware/efi/vars.c +4 -1
@@ -750,6 +750,7 @@ int efivar_entry_set_safe(efi_char16_t *name, efi_guid_t vendor, u32 attributes, {const struct efivar_operations *ops;efi_status_t status; +unsigned long varsize;if (!__efivars)return -EINVAL ;
@@ -772,15 +773,17 @@ int efivar_entry_set_safe(efi_char16_t *name, efi_guid_t vendor, u32 attributes,return efivar_entry_set_nonblocking (name, vendor, attributes, size, data); + varsize = size +ucs2_strsize (name,1024 );if (!block) {if (down_trylock (&efivars_lock))return -EBUSY ; + status =check_var_size_nonblocking (attributes, varsize); }else {if (down_interruptible (&efivars_lock))return -EINTR ; + status =check_var_size (attributes, varsize); } - status =check_var_size (attributes, size +ucs2_strsize (name,1024 ));if (status !=EFI_SUCCESS ) {up (&efivars_lock);return -ENOSPC ;
drivers/hid/hid-debug.c +4 -1
@@ -823,7 +823,9 @@ static const char *keys[KEY_MAX + 1] = { [KEY_F22] = "F22", [KEY_F23] = "F23", [KEY_F24] = "F24", [KEY_PLAYCD] = "PlayCD", [KEY_PAUSECD] = "PauseCD", [KEY_PROG3] = "Prog3", - [KEY_PROG4] = "Prog4", [KEY_SUSPEND] = "Suspend", + [KEY_PROG4] = "Prog4", + [KEY_ALL_APPLICATIONS] = "AllApplications", + [KEY_SUSPEND] = "Suspend", [KEY_CLOSE] = "Close", [KEY_PLAY] = "Play", [KEY_FASTFORWARD] = "FastForward", [KEY_BASSBOOST] = "BassBoost", [KEY_PRINT] = "Print", [KEY_HP] = "HP",
@@ -930,6 +932,7 @@ static const char *keys[KEY_MAX + 1] = { [KEY_SCREENSAVER] = "ScreenSaver", [KEY_VOICECOMMAND] = "VoiceCommand", [KEY_EMOJI_PICKER] = "EmojiPicker", + [KEY_DICTATE] = "Dictate", [KEY_BRIGHTNESS_MIN] = "BrightnessMin", [KEY_BRIGHTNESS_MAX] = "BrightnessMax", [KEY_BRIGHTNESS_AUTO] = "BrightnessAuto",
drivers/hid/hid-input.c +3 -0
@@ -956,6 +956,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcase 0x0cd :map_key_clear (KEY_PLAYPAUSE );break ;case 0x0cf :map_key_clear (KEY_VOICECOMMAND );break ; +case 0x0d8 :map_key_clear (KEY_DICTATE );break ;case 0x0d9 :map_key_clear (KEY_EMOJI_PICKER );break ;case 0x0e0 :map_abs_clear (ABS_VOLUME );break ;
@@ -1047,6 +1048,8 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcase 0x29d :map_key_clear (KEY_KBD_LAYOUT_NEXT );break ; +case 0x2a2 :map_key_clear (KEY_ALL_APPLICATIONS );break ; +case 0x2c7 :map_key_clear (KEY_KBDINPUTASSIST_PREV );break ;case 0x2c8 :map_key_clear (KEY_KBDINPUTASSIST_NEXT );break ;case 0x2c9 :map_key_clear (KEY_KBDINPUTASSIST_PREVGROUP );break ;
drivers/i2c/busses/Kconfig +2 -2
@@ -483,7 +483,7 @@ config I2C_BRCMSTB config I2C_CADENCE tristate "Cadence I2C Controller" - depends on ARCH_ZYNQ || ARM64 || XTENSA + depends on ARCH_ZYNQ || ARM64 || XTENSA || COMPILE_TEST help Say yes here to select Cadence I2C Host Controller. This controller is e.g. used by Xilinx Zynq.
@@ -894,7 +894,7 @@ config I2C_QCOM_GENI config I2C_QUP tristate "Qualcomm QUP based I2C controller" - depends on ARCH_QCOM + depends on ARCH_QCOM || COMPILE_TEST help If you say yes to this option, support will be included for the built-in I2C interface on the Qualcomm SoCs.
drivers/i2c/busses/i2c-bcm2835.c +11 -0
@@ -23,6 +23,11 @@#define BCM2835_I2C_FIFO 0x10#define BCM2835_I2C_DIV 0x14#define BCM2835_I2C_DEL 0x18 +/* +* 16-bit field for the number of SCL cycles to wait after rising SCL +* before deciding the slave is not responding. 0 disables the +* timeout detection. +*/ #define BCM2835_I2C_CLKT 0x1c#define BCM2835_I2C_C_READ BIT(0)
@@ -479,6 +484,12 @@ static int bcm2835_i2c_probe(struct platform_device *pdev) adap->dev.of_node = pdev->dev.of_node; adap->quirks =of_device_get_match_data (&pdev->dev); +/* +* Disable the hardware clock stretching timeout. SMBUS +* specifies a limit for how long the device can stretch the +* clock, but core I2C doesn't. +*/ +bcm2835_i2c_writel (i2c_dev,BCM2835_I2C_CLKT ,0 );bcm2835_i2c_writel (i2c_dev,BCM2835_I2C_C ,0 ); ret =i2c_add_adapter (adap);
drivers/input/input.c +6 -0
@@ -2181,6 +2181,12 @@ int input_register_device(struct input_dev *dev)/* KEY_RESERVED is not supposed to be transmitted to userspace. */ __clear_bit (KEY_RESERVED , dev->keybit); +/* Buttonpads should not map BTN_RIGHT and/or BTN_MIDDLE. */ +if (test_bit (INPUT_PROP_BUTTONPAD , dev->propbit)) { +__clear_bit (BTN_RIGHT , dev->keybit); +__clear_bit (BTN_MIDDLE , dev->keybit); + } +/* Make sure that bitmasks not mentioned in dev->evbit are clean. */ input_cleanse_bitmasks (dev);
drivers/input/mouse/elan_i2c_core.c +23 -41
99 lines not on this page · raw message
drivers/net/arcnet/com20020-pci.c +3 -0
@@ -136,6 +136,9 @@ static int com20020pci_probe(struct pci_dev *pdev,return -ENOMEM ; ci = (struct com20020_pci_card_info *)id->driver_data; +if (!ci) +return -EINVAL ; + priv->ci = ci; mm = &ci->misc_map;
drivers/net/can/usb/gs_usb.c +5 -5
@@ -190,8 +190,8 @@ struct gs_can {struct gs_usb {struct gs_can *canch[GS_MAX_INTF ];struct usb_anchor rx_submitted; -atomic_t active_channels;struct usb_device *udev; +u8 active_channels; };/* 'allocate' a tx context.
@@ -588,7 +588,7 @@ static int gs_can_open(struct net_device *netdev)if (rc)return rc; -if (atomic_add_return (1 , &parent->active_channels) ==1 ) { +if (!parent->active_channels) {for (i =0 ; i <GS_MAX_RX_URBS ; i++) {struct urb *urb;u8 *buf;
@@ -689,6 +689,7 @@ static int gs_can_open(struct net_device *netdev) dev->can.state =CAN_STATE_ERROR_ACTIVE ; + parent->active_channels++;if (!(dev->can.ctrlmode &CAN_CTRLMODE_LISTENONLY ))netif_start_queue (netdev);
@@ -704,7 +705,8 @@ static int gs_can_close(struct net_device *netdev)netif_stop_queue (netdev);/* Stop polling */ -if (atomic_dec_and_test (&parent->active_channels)) + parent->active_channels--; +if (!parent->active_channels)usb_kill_anchored_urbs (&parent->rx_submitted);/* Stop sending URBs */
@@ -983,8 +985,6 @@ static int gs_usb_probe(struct usb_interface *intf,init_usb_anchor (&dev->rx_submitted); -atomic_set (&dev->active_channels,0 ); -usb_set_intfdata (intf, dev); dev->udev =interface_to_usbdev (intf);
drivers/net/ethernet/chelsio/cxgb3/t3_hw.c +2 -0
@@ -3677,6 +3677,8 @@ int t3_prep_adapter(struct adapter *adapter, const struct adapter_info *ai, MAC_STATS_ACCUM_SECS : (MAC_STATS_ACCUM_SECS *10 ); adapter->params.pci.vpd_cap_addr =pci_find_capability (adapter->pdev,PCI_CAP_ID_VPD ); +if (!adapter->params.pci.vpd_cap_addr) +return -ENODEV ; ret =get_vpd_params (adapter, &adapter->params.vpd);if (ret <0 )return ret;
drivers/net/ethernet/ibm/ibmvnic.c +3 -1
@@ -2248,8 +2248,10 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,* flush reset queue and process this reset */ if (adapter->force_reset_recovery && !list_empty (&adapter->rwi_list)) { -list_for_each_safe (entry, tmp_entry, &adapter->rwi_list) +list_for_each_safe (entry, tmp_entry, &adapter->rwi_list) {list_del (entry); +kfree (list_entry(entry ,struct ibmvnic_rwi ,list )); + } } rwi->reset_reason = reason;list_add_tail (&rwi->list, &adapter->rwi_list);
drivers/net/ethernet/intel/iavf/iavf_main.c +5 -2
@@ -3323,8 +3323,11 @@ static int iavf_change_mtu(struct net_device *netdev, int new_mtu)iavf_notify_client_l2_params (&adapter->vsi); adapter->flags |=IAVF_FLAG_SERVICE_CLIENT_REQUESTED ; } - adapter->flags |=IAVF_FLAG_RESET_NEEDED ; -queue_work (iavf_wq, &adapter->reset_task); + +if (netif_running (netdev)) { + adapter->flags |=IAVF_FLAG_RESET_NEEDED ; +queue_work (iavf_wq, &adapter->reset_task); + }return 0 ; }
drivers/net/ethernet/intel/igc/igc_phy.c +0 -4
@@ -734,8 +734,6 @@ s32 igc_write_phy_reg_gpy(struct igc_hw *hw, u32 offset, u16 data)if (ret_val)return ret_val; ret_val =igc_write_phy_reg_mdic (hw, offset, data); -if (ret_val) -return ret_val; hw->phy.ops.release (hw); }else { ret_val = igc_write_xmdio_reg(hw, (u16)offset, dev_addr,
@@ -767,8 +765,6 @@ s32 igc_read_phy_reg_gpy(struct igc_hw *hw, u32 offset, u16 *data)if (ret_val)return ret_val; ret_val =igc_read_phy_reg_mdic (hw, offset, data); -if (ret_val) -return ret_val; hw->phy.ops.release (hw); }else { ret_val = igc_read_xmdio_reg(hw, (u16)offset, dev_addr,
drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c +4 -2
@@ -583,12 +583,14 @@ static bool ixgbe_xmit_zc(struct ixgbe_ring *xdp_ring, unsigned int budget)u32 cmd_type;while (budget-- >0 ) { -if (unlikely (!ixgbe_desc_unused (xdp_ring)) || - !netif_carrier_ok (xdp_ring->netdev)) { +if (unlikely (!ixgbe_desc_unused (xdp_ring))) { work_done = false;break ; } +if (!netif_carrier_ok (xdp_ring->netdev)) +break ; +if (!xsk_umem_consume_tx (xdp_ring->xsk_umem, &desc))break ;
drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c +3 -3
@@ -2277,18 +2277,18 @@ static int __init sxgbe_cmdline_opt(char *str)char *opt;if (!str || !*str) -return -EINVAL ; +return 1 ;while ((opt =strsep (&str,"," )) !=NULL ) {if (!strncmp (opt,"eee_timer:" ,10 )) {if (kstrtoint (opt +10 ,0 , &eee_timer)) goto err; } } -return 0 ; +return 1 ; err:pr_err ("%s: ERROR broken module parameter conversion\n" , __func__); -return -EINVAL ; +return 1 ; }__setup ("sxgbeeth=" , sxgbe_cmdline_opt);
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +3 -3
@@ -4890,7 +4890,7 @@ static int __init stmmac_cmdline_opt(char *str)char *opt;if (!str || !*str) -return -EINVAL ; +return 1 ;while ((opt =strsep (&str,"," )) !=NULL ) {if (!strncmp (opt,"debug:" ,6 )) {if (kstrtoint (opt +6 ,0 , &debug))
@@ -4921,11 +4921,11 @@ static int __init stmmac_cmdline_opt(char *str) goto err; } } -return 0 ; +return 1 ; err:pr_err ("%s: ERROR broken module parameter conversion" , __func__); -return -EINVAL ; +return 1 ; }__setup ("stmmaceth=" , stmmac_cmdline_opt);
drivers/net/hamradio/mkiss.c +2 -0
@@ -31,6 +31,8 @@#define AX_MTU 236 +/* some arch define END as assembly function ending, just undef it */ +#undef END/* SLIP/KISS protocol characters. */ #define END 0300/* indicates end of frame */ #define ESC 0333/* indicates byte stuffing */
drivers/net/usb/cdc_mbim.c +5 -0
@@ -658,6 +658,11 @@ static const struct usb_device_id mbim_devs[] = { .driver_info = (unsigned long)&cdc_mbim_info_avoid_altsetting_toggle, }, +/* Telit FN990 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x1bc7, 0x1071, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), + .driver_info = (unsigned long )&cdc_mbim_info_avoid_altsetting_toggle, + }, + /* default entry */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), .driver_info = (unsigned long)&cdc_mbim_info_zlp,
drivers/net/wireless/mac80211_hwsim.c +13 -0
@@ -2062,6 +2062,15 @@ static void hw_scan_work(struct work_struct *work)if (req->ie_len)skb_put_data (probe, req->ie, req->ie_len); +if (!ieee80211_tx_prepare_skb (hwsim->hw, + hwsim->hw_scan_vif, + probe, + hwsim->tmp_chan->band, +NULL )) { +kfree_skb (probe); +continue ; + } +local_bh_disable ();mac80211_hwsim_tx_frame (hwsim->hw, probe, hwsim->tmp_chan);
@@ -3316,6 +3325,10 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2, } txi->flags |=IEEE80211_TX_STAT_ACK ; } + +if (hwsim_flags &HWSIM_TX_CTL_NO_ACK ) + txi->flags |=IEEE80211_TX_STAT_NOACK_TRANSMITTED ; +ieee80211_tx_status_irqsafe (data2->hw, skb);return 0 ; out:
drivers/net/xen-netfront.c +23 -16
@@ -761,6 +761,28 @@ static int xennet_close(struct net_device *dev)return 0 ; } +static void xennet_destroy_queues (struct netfront_info *info) +{ +unsigned int i; + +for (i =0 ; i < info->netdev->real_num_tx_queues; i++) { +struct netfront_queue *queue = &info->queues[i]; + +if (netif_running (info->netdev)) +napi_disable (&queue->napi); +netif_napi_del (&queue->napi); + } + +kfree (info->queues); + info->queues =NULL ; +} + +static void xennet_uninit (struct net_device *dev) +{ +struct netfront_info *np =netdev_priv (dev); +xennet_destroy_queues (np); +} +static void xennet_set_rx_rsp_cons (struct netfront_queue *queue,RING_IDX val) {unsigned long flags;
@@ -1373,6 +1395,7 @@ static void xennet_poll_controller(struct net_device *dev)#endif static const struct net_device_ops xennet_netdev_ops = { + .ndo_uninit = xennet_uninit, .ndo_open = xennet_open, .ndo_stop = xennet_close, .ndo_start_xmit = xennet_start_xmit,
@@ -1860,22 +1883,6 @@ static int write_queue_xenstore_keys(struct netfront_queue *queue,return err; } -static void xennet_destroy_queues (struct netfront_info *info) -{ -unsigned int i; - -for (i =0 ; i < info->netdev->real_num_tx_queues; i++) { -struct netfront_queue *queue = &info->queues[i]; - -if (netif_running (info->netdev)) -napi_disable (&queue->napi); -netif_napi_del (&queue->napi); - } - -kfree (info->queues); - info->queues =NULL ; -} -static int xennet_create_queues (struct netfront_info *info,unsigned int *num_queues) {
drivers/soc/fsl/qe/qe_io.c +2 -0
@@ -37,6 +37,8 @@ int par_io_init(struct device_node *np)if (ret)return ret; par_io =ioremap (res.start,resource_size (&res)); +if (!par_io) +return -ENOMEM ; num_ports =of_get_property (np,"num-ports" ,NULL );if (num_ports)
drivers/usb/gadget/legacy/inode.c +7 -3
@@ -1829,8 +1829,9 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)spin_lock_irq (&dev->lock); value = -EINVAL ;if (dev->buf) { +spin_unlock_irq (&dev->lock);kfree (kbuf); - goto fail; +return value; } dev->buf = kbuf;
@@ -1877,8 +1878,8 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr) value =usb_gadget_probe_driver (&gadgetfs_driver);if (value !=0 ) { -kfree (dev->buf); - dev->buf =NULL ; +spin_lock_irq (&dev->lock); + goto fail; }else {/* at this point "good" hardware has for the first time * let the USB the host see us. alternatively, if users
@@ -1895,6 +1896,9 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)return value; fail: + dev->config =NULL ; + dev->hs_config =NULL ; + dev->dev =NULL ;spin_unlock_irq (&dev->lock);pr_debug ("%s: %s fail %zd, %p\n" , shortname, __func__, value, dev);kfree (dev->buf);
fs/btrfs/qgroup.c +8 -1
@@ -1116,6 +1116,14 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)if (!fs_info->quota_root) goto out; +/* +* Unlock the qgroup_ioctl_lock mutex before waiting for the rescan worker to +* complete. Otherwise we can deadlock because btrfs_remove_qgroup() needs +* to lock that mutex while holding a transaction handle and the rescan +* worker needs to commit a transaction. +*/ +mutex_unlock (&fs_info->qgroup_ioctl_lock); +/* * Request qgroup rescan worker to complete and wait for it. This wait * must be done before transaction start for quota disable since it may
@@ -1123,7 +1131,6 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)*/ clear_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags);btrfs_qgroup_wait_for_completion (fs_info, false); -mutex_unlock (&fs_info->qgroup_ioctl_lock);/* * 1 For the root item
fs/btrfs/tree-log.c +49 -12
106 lines not on this page · raw message
fs/cifs/cifsfs.c +1 -0
@@ -855,6 +855,7 @@ cifs_smb3_do_mount(struct file_system_type *fs_type, out_super:deactivate_locked_super (sb); +return root; out:cifs_cleanup_volume_info (volume_info);return root;
include/linux/topology.h +1 -0
@@ -48,6 +48,7 @@ int arch_update_cpu_topology(void);/* Conform to ACPI 2.0 SLIT distance definitions */ #define LOCAL_DISTANCE 10#define REMOTE_DISTANCE 20 +#define DISTANCE_BITS 8#ifndef node_distance#define node_distance (from,to) ((from) == (to) ? LOCAL_DISTANCE : REMOTE_DISTANCE)#endif
include/net/netfilter/nf_queue.h +1 -1
@@ -34,7 +34,7 @@ void nf_register_queue_handler(struct net *net, const struct nf_queue_handler *qvoid nf_unregister_queue_handler (struct net *net);void nf_reinject (struct nf_queue_entry *entry,unsigned int verdict); -void nf_queue_entry_get_refs (struct nf_queue_entry *entry); +bool nf_queue_entry_get_refs (struct nf_queue_entry *entry);void nf_queue_entry_release_refs (struct nf_queue_entry *entry);static inline void init_hashrandom (u32 *jhash_initval)
include/net/xfrm.h +0 -1
@@ -1543,7 +1543,6 @@ void xfrm_sad_getinfo(struct net *net, struct xfrmk_sadinfo *si);void xfrm_spd_getinfo (struct net *net,struct xfrmk_spdinfo *si);u32 xfrm_replay_seqhi (struct xfrm_state *x,__be32 net_seq);int xfrm_init_replay (struct xfrm_state *x); -u32 __xfrm_state_mtu (struct xfrm_state *x,int mtu);u32 xfrm_state_mtu (struct xfrm_state *x,int mtu);int __xfrm_init_state (struct xfrm_state *x,bool init_replay,bool offload);int xfrm_init_state (struct xfrm_state *x);
include/uapi/linux/input-event-codes.h +3 -1
@@ -278,7 +278,8 @@#define KEY_PAUSECD 201#define KEY_PROG3 202#define KEY_PROG4 203 -#define KEY_DASHBOARD 204/* AL Dashboard */ +#define KEY_ALL_APPLICATIONS 204/* AC Desktop Show All Applications */ +#define KEY_DASHBOARD KEY_ALL_APPLICATIONS#define KEY_SUSPEND 205#define KEY_CLOSE 206/* AC Close */ #define KEY_PLAY 207
@@ -608,6 +609,7 @@#define KEY_ASSISTANT 0x247/* AL Context-aware desktop assistant */ #define KEY_KBD_LAYOUT_NEXT 0x248/* AC Next Keyboard Layout Select */ #define KEY_EMOJI_PICKER 0x249/* Show/hide emoji picker (HUTRR101) */ +#define KEY_DICTATE 0x24a/* Start or Stop Voice Dictation Session (HUTRR99) */ #define KEY_BRIGHTNESS_MIN 0x250/* Set Brightness to Minimum */ #define KEY_BRIGHTNESS_MAX 0x251/* Set Brightness to Maximum */
include/uapi/linux/xfrm.h +6 -0
@@ -504,6 +504,12 @@ struct xfrm_user_offload {int ifindex;__u8 flags; }; +/* This flag was exposed without any kernel code that supporting it. +* Unfortunately, strongswan has the code that uses sets this flag, +* which makes impossible to reuse this bit. +* +* So leave it here to make sure that it won't be reused by mistake. +*/ #define XFRM_OFFLOAD_IPV6 1#define XFRM_OFFLOAD_INBOUND 2
kernel/sched/topology.c +48 -51
170 lines not on this page · raw message
kernel/trace/trace.c +2 -2
@@ -219,7 +219,7 @@ static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata;static int __init set_trace_boot_options (char *str) {strlcpy (trace_boot_options_buf, str,MAX_TRACER_SIZE ); -return 0 ; +return 1 ; }__setup ("trace_options=" , set_trace_boot_options);
@@ -230,7 +230,7 @@ static int __init set_trace_boot_clock(char *str) {strlcpy (trace_boot_clock_buf, str,MAX_TRACER_SIZE ); trace_boot_clock = trace_boot_clock_buf; -return 0 ; +return 1 ; }__setup ("trace_clock=" , set_trace_boot_clock);
kernel/trace/trace_events_hist.c +3 -3
@@ -2891,9 +2891,9 @@ parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file,/* * For backward compatibility, if field_name * was "cpu", then we treat this the same as -* common_cpu. +* common_cpu. This also works for "CPU". */ -if (strcmp (field_name,"cpu" ) ==0 ) { +if (field && field->filter_type ==FILTER_CPU ) { *flags |=HIST_FIELD_FL_CPU ; }else { hist_err(tr, HIST_ERR_FIELD_NOT_FOUND,
@@ -5247,7 +5247,7 @@ static int create_tracing_map_fields(struct hist_trigger_data *hist_data)if (hist_field->flags &HIST_FIELD_FL_STACKTRACE ) cmp_fn = tracing_map_cmp_none; -else if (!field) +else if (!field || hist_field->flags &HIST_FIELD_FL_CPU ) cmp_fn =tracing_map_cmp_num (hist_field->size, hist_field->is_signed);else if (is_string_field (field))
kernel/trace/trace_kprobe.c +1 -1
@@ -430,7 +430,7 @@ static int disable_trace_kprobe(struct trace_event_call *call,*/ trace_probe_remove_file (tp, file); -return 0 ; +return 1 ; } #if defined(CONFIG_DYNAMIC_FTRACE) && \
mm/memfd.c +28 -12
@@ -31,20 +31,28 @@static void memfd_tag_pins (struct xa_state *xas) {struct page *page; -unsigned int tagged =0 ; +int latency =0 ; +int cache_count;lru_add_drain ();xas_lock_irq (xas);xas_for_each (xas, page,ULONG_MAX ) { -if (xa_is_value (page)) -continue ; - page =find_subpage (page, xas->xa_index); -if (page_count (page) -page_mapcount (page) >1 ) + cache_count =1 ; +if (!xa_is_value (page) && +PageTransHuge (page) && !PageHuge (page)) + cache_count =HPAGE_PMD_NR ; + +if (!xa_is_value (page) && +page_count (page) -total_mapcount (page) != cache_count)xas_set_mark (xas,MEMFD_TAG_PINNED ); +if (cache_count !=1 ) +xas_set (xas, page->index + cache_count); -if (++tagged %XA_CHECK_SCHED ) + latency += cache_count; +if (latency <XA_CHECK_SCHED )continue ; + latency =0 ;xas_pause (xas);xas_unlock_irq (xas);
@@ -73,7 +81,8 @@ static int memfd_wait_for_pins(struct address_space *mapping) error =0 ;for (scan =0 ; scan <=LAST_SCAN ; scan++) { -unsigned int tagged =0 ; +int latency =0 ; +int cache_count;if (!xas_marked (&xas,MEMFD_TAG_PINNED ))break ;
@@ -87,10 +96,14 @@ static int memfd_wait_for_pins(struct address_space *mapping)xas_lock_irq (&xas);xas_for_each_marked (&xas, page,ULONG_MAX ,MEMFD_TAG_PINNED ) {bool clear = true; -if (xa_is_value (page)) -continue ; - page =find_subpage (page, xas.xa_index); -if (page_count (page) -page_mapcount (page) !=1 ) { + + cache_count =1 ; +if (!xa_is_value (page) && +PageTransHuge (page) && !PageHuge (page)) + cache_count =HPAGE_PMD_NR ; + +if (!xa_is_value (page) && cache_count != +page_count (page) -total_mapcount (page)) {/* * On the last scan, we clean up all those tags * we inserted; but make a note that we still
@@ -103,8 +116,11 @@ static int memfd_wait_for_pins(struct address_space *mapping) }if (clear)xas_clear_mark (&xas,MEMFD_TAG_PINNED ); -if (++tagged %XA_CHECK_SCHED ) + + latency += cache_count; +if (latency <XA_CHECK_SCHED )continue ; + latency =0 ;xas_pause (&xas);xas_unlock_irq (&xas);
net/batman-adv/hard-interface.c +20 -9
@@ -151,22 +151,25 @@ static bool batadv_is_on_batman_iface(const struct net_device *net_dev)struct net *net =dev_net (net_dev);struct net_device *parent_dev;struct net *parent_net; +int iflink;bool ret;/* check if this is a batman-adv mesh interface */ if (batadv_softif_is_valid (net_dev))return true; -/* no more parents..stop recursion */ -if (dev_get_iflink (net_dev) ==0 || -dev_get_iflink (net_dev) == net_dev->ifindex) + iflink =dev_get_iflink (net_dev); +if (iflink ==0 )return false; parent_net =batadv_getlink_net (net_dev, net); +/* iflink to itself, most likely physical device */ +if (net == parent_net && iflink == net_dev->ifindex) +return false; +/* recurse over the parent device */ - parent_dev =__dev_get_by_index ((struct net *)parent_net, -dev_get_iflink (net_dev)); + parent_dev =__dev_get_by_index ((struct net *)parent_net, iflink);/* if we got a NULL parent_dev there is something broken.. */ if (!parent_dev) {pr_err ("Cannot find parent device\n" );
@@ -216,14 +219,15 @@ static struct net_device *batadv_get_real_netdevice(struct net_device *netdev)struct net_device *real_netdev =NULL ;struct net *real_net;struct net *net; -int ifindex; +int iflink;ASSERT_RTNL ();if (!netdev)return NULL ; -if (netdev->ifindex ==dev_get_iflink (netdev)) { + iflink =dev_get_iflink (netdev); +if (iflink ==0 ) {dev_hold (netdev);return netdev; }
@@ -233,9 +237,16 @@ static struct net_device *batadv_get_real_netdevice(struct net_device *netdev) goto out; net =dev_net (hard_iface->soft_iface); - ifindex =dev_get_iflink (netdev); real_net =batadv_getlink_net (netdev, net); - real_netdev =dev_get_by_index (real_net, ifindex); + +/* iflink to itself, most likely physical device */ +if (net == real_net && netdev->ifindex == iflink) { + real_netdev = netdev; +dev_hold (real_netdev); + goto out; + } + + real_netdev =dev_get_by_index (real_net, iflink); out:if (hard_iface)
net/dcb/dcbnl.c +44 -0
54 lines not on this page · raw message
net/ipv4/esp4.c +1 -1
@@ -499,7 +499,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst (skb);u32 padto; - padto =min (x->tfcpad,__xfrm_state_mtu (x, dst->child_mtu_cached)); + padto =min (x->tfcpad,xfrm_state_mtu (x, dst->child_mtu_cached));if (skb->len < padto) esp.tfclen = padto - skb->len; }
net/ipv6/esp6.c +1 -1
@@ -440,7 +440,7 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb)struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst (skb);u32 padto; - padto =min (x->tfcpad,__xfrm_state_mtu (x, dst->child_mtu_cached)); + padto =min (x->tfcpad,xfrm_state_mtu (x, dst->child_mtu_cached));if (skb->len < padto) esp.tfclen = padto - skb->len; }
net/ipv6/ip6_output.c +7 -4
@@ -1361,8 +1361,6 @@ static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork,if (np->frag_size) mtu = np->frag_size; } -if (mtu <IPV6_MIN_MTU ) -return -EINVAL ; cork->base.fragsize = mtu; cork->base.gso_size = ipc6->gso_size; cork->base.tx_flags =0 ;
@@ -1424,8 +1422,6 @@ static int __ip6_append_data(struct sock *sk, fragheaderlen =sizeof (struct ipv6hdr ) + rt->rt6i_nfheader_len + (opt ? opt->opt_nflen :0 ); - maxfraglen = ((mtu - fragheaderlen) & ~7 ) + fragheaderlen - -sizeof (struct frag_hdr ); headersize =sizeof (struct ipv6hdr ) + (opt ? opt->opt_flen + opt->opt_nflen : 0) +
@@ -1433,6 +1429,13 @@ static int __ip6_append_data(struct sock *sk, sizeof(struct frag_hdr) : 0) + rt->rt6i_nfheader_len; +if (mtu < fragheaderlen || + ((mtu - fragheaderlen) & ~7 ) + fragheaderlen <sizeof (struct frag_hdr )) + goto emsgsize; + + maxfraglen = ((mtu - fragheaderlen) & ~7 ) + fragheaderlen - +sizeof (struct frag_hdr ); +/* as per RFC 7112 section 5, the entire IPv6 Header Chain must fit * the first fragment */
net/mac80211/rx.c +2 -2
@@ -2852,13 +2852,13 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) ether_addr_equal(sdata->vif.addr, hdr->addr3))return RX_CONTINUE ; - ac =ieee80211_select_queue_80211 (sdata, skb, hdr); + ac = ieee802_1d_to_ac[skb->priority]; q = sdata->vif.hw_queue[ac];if (ieee80211_queue_stopped (&local->hw, q)) {IEEE80211_IFSTA_MESH_CTR_INC (ifmsh, dropped_frames_congestion);return RX_DROP_MONITOR ; } -skb_set_queue_mapping (skb, q); +skb_set_queue_mapping (skb, ac);if (!--mesh_hdr->ttl) {if (!is_multicast_ether_addr (hdr->addr1))
net/netfilter/core.c +3 -2
@@ -336,14 +336,15 @@ static int __nf_register_net_hook(struct net *net, int pf, p =nf_entry_dereference (*pp); new_hooks =nf_hook_entries_grow (p, reg); -if (!IS_ERR (new_hooks)) +if (!IS_ERR (new_hooks)) { +hooks_validate (new_hooks);rcu_assign_pointer (*pp, new_hooks); + }mutex_unlock (&nf_hook_mutex);if (IS_ERR (new_hooks))return PTR_ERR (new_hooks); -hooks_validate (new_hooks);#ifdef CONFIG_NETFILTER_INGRESS if (pf ==NFPROTO_NETDEV && reg->hooknum ==NF_NETDEV_INGRESS )net_inc_ingress_queue ();
net/netfilter/nf_queue.c +19 -5
@@ -64,6 +64,15 @@ static void nf_queue_entry_release_br_nf_refs(struct sk_buff *skb)#endif } +static void nf_queue_sock_put (struct sock *sk) +{ +#ifdef CONFIG_INET +sock_gen_put (sk); +#else +sock_put (sk); +#endif +} +void nf_queue_entry_release_refs (struct nf_queue_entry *entry) {struct nf_hook_state *state = &entry->state;
@@ -74,7 +83,7 @@ void nf_queue_entry_release_refs(struct nf_queue_entry *entry)if (state->out)dev_put (state->out);if (state->sk) -sock_put (state->sk); +nf_queue_sock_put (state->sk);nf_queue_entry_release_br_nf_refs (entry->skb); }
@@ -99,18 +108,20 @@ static void nf_queue_entry_get_br_nf_refs(struct sk_buff *skb) }/* Bump dev refs so they don't vanish while packet is out */ -void nf_queue_entry_get_refs (struct nf_queue_entry *entry) +bool nf_queue_entry_get_refs (struct nf_queue_entry *entry) {struct nf_hook_state *state = &entry->state; +if (state->sk && !refcount_inc_not_zero (&state->sk->sk_refcnt)) +return false; +if (state->in)dev_hold (state->in);if (state->out)dev_hold (state->out); -if (state->sk) -sock_hold (state->sk);nf_queue_entry_get_br_nf_refs (entry->skb); +return true; }EXPORT_SYMBOL_GPL (nf_queue_entry_get_refs);
@@ -201,7 +212,10 @@ static int __nf_queue(struct sk_buff *skb, const struct nf_hook_state *state, .size = sizeof(*entry) + route_key_size, }; -nf_queue_entry_get_refs (entry); +if (!nf_queue_entry_get_refs (entry)) { +kfree (entry); +return -ENOTCONN ; + }switch (entry->state.pf) {case AF_INET :
net/netfilter/nfnetlink_queue.c +9 -3
@@ -712,9 +712,15 @@ static struct nf_queue_entry * nf_queue_entry_dup(struct nf_queue_entry *e) {struct nf_queue_entry *entry =kmemdup (e, e->size,GFP_ATOMIC ); -if (entry) -nf_queue_entry_get_refs (entry); -return entry; + +if (!entry) +return NULL ; + +if (nf_queue_entry_get_refs (entry)) +return entry; + +kfree (entry); +return NULL ; }#if IS_ENABLED (CONFIG_BRIDGE_NETFILTER )
net/smc/smc_core.c +3 -2
@@ -342,8 +342,8 @@ void smc_conn_free(struct smc_connection *conn) }else {smc_cdc_tx_dismiss_slots (conn); } -smc_lgr_unregister_conn (conn);smc_buf_unuse (conn, lgr);/* allow buffer reuse */ +smc_lgr_unregister_conn (conn); conn->lgr =NULL ;if (!lgr->conns_num)
@@ -632,7 +632,8 @@ int smc_conn_create(struct smc_sock *smc, struct smc_init_info *ini) !lgr->sync_err && lgr->vlan_id == ini->vlan_id && (role ==SMC_CLNT || - lgr->conns_num < SMC_RMBS_PER_LGR_MAX)) { + (lgr->conns_num <SMC_RMBS_PER_LGR_MAX && + !bitmap_full(lgr->rtokens_used_mask, SMC_RMBS_PER_LGR_MAX)))) { /* link group found */ ini->cln_first_contact = SMC_REUSE_CONTACT; conn->lgr = lgr;
net/wireless/nl80211.c +12 -0
@@ -12320,6 +12320,9 @@ static int handle_nan_filter(struct nlattr *attr_filter, i =0 ;nla_for_each_nested (attr, attr_filter, rem) { filter[i].filter =nla_memdup (attr,GFP_KERNEL ); +if (!filter[i].filter) + goto err; + filter[i].len =nla_len (attr); i++; }
@@ -12332,6 +12335,15 @@ static int handle_nan_filter(struct nlattr *attr_filter, }return 0 ; + +err: + i =0 ; +nla_for_each_nested (attr, attr_filter, rem) { +kfree (filter[i].filter); + i++; + } +kfree (filter); +return -ENOMEM ; } static int nl80211_nan_add_func(struct sk_buff *skb,
net/xfrm/xfrm_device.c +5 -1
@@ -206,6 +206,9 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x,if (x->encap || x->tfcpad)return -EINVAL ; +if (xuo->flags & ~(XFRM_OFFLOAD_IPV6 |XFRM_OFFLOAD_INBOUND )) +return -EINVAL ; + dev =dev_get_by_index (net, xuo->ifindex);if (!dev) {if (!(xuo->flags &XFRM_OFFLOAD_INBOUND )) {
@@ -243,7 +246,8 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x, xso->dev = dev; xso->num_exthdrs =1 ; - xso->flags = xuo->flags; +/* Don't forward bit that is not implemented */ + xso->flags = xuo->flags & ~XFRM_OFFLOAD_IPV6 ; err = dev->xfrmdev_ops->xdo_dev_state_add (x);if (err) {
net/xfrm/xfrm_interface.c +1 -1
@@ -695,12 +695,12 @@ static int xfrmi_changelink(struct net_device *dev, struct nlattr *tb[],struct net *net = xi->net;struct xfrm_if_parms p = {}; +xfrmi_netlink_parms (data, &p);if (!p.if_id) {NL_SET_ERR_MSG (extack,"if_id must be non zero" );return -EINVAL ; } -xfrmi_netlink_parms (data, &p); xi =xfrmi_locate (net, &p);if (!xi) { xi =netdev_priv (dev);
net/xfrm/xfrm_state.c +2 -12
@@ -2440,7 +2440,7 @@ void xfrm_state_delete_tunnel(struct xfrm_state *x) }EXPORT_SYMBOL (xfrm_state_delete_tunnel); -u32 __xfrm_state_mtu (struct xfrm_state *x,int mtu) +u32 xfrm_state_mtu (struct xfrm_state *x,int mtu) {const struct xfrm_type *type =READ_ONCE (x->type);struct crypto_aead *aead;
@@ -2471,17 +2471,7 @@ u32 __xfrm_state_mtu(struct xfrm_state *x, int mtu)return ((mtu - x->props.header_len -crypto_aead_authsize (aead) - net_adj) & ~(blksize -1 )) + net_adj -2 ; } -EXPORT_SYMBOL_GPL (__xfrm_state_mtu); - -u32 xfrm_state_mtu (struct xfrm_state *x,int mtu) -{ - mtu =__xfrm_state_mtu (x, mtu); - -if (x->props.family ==AF_INET6 && mtu <IPV6_MIN_MTU ) -return IPV6_MIN_MTU ; - -return mtu; -} +EXPORT_SYMBOL_GPL (xfrm_state_mtu);int __xfrm_init_state (struct xfrm_state *x,bool init_replay,bool offload) {
sound/soc/codecs/cs4265.c +1 -2
@@ -150,7 +150,6 @@ static const struct snd_kcontrol_new cs4265_snd_controls[] = {SOC_SINGLE ("E to F Buffer Disable Switch" ,CS4265_SPDIF_CTL1 ,6 ,1 ,0 ),SOC_ENUM ("C Data Access" , cam_mode_enum), -SOC_SINGLE ("SPDIF Switch" ,CS4265_SPDIF_CTL2 ,5 ,1 ,1 ),SOC_SINGLE ("Validity Bit Control Switch" ,CS4265_SPDIF_CTL2 ,3 ,1 ,0 ), SOC_ENUM("SPDIF Mono/Stereo", spdif_mono_stereo_enum),
@@ -186,7 +185,7 @@ static const struct snd_soc_dapm_widget cs4265_dapm_widgets[] = {SND_SOC_DAPM_SWITCH ("Loopback" ,SND_SOC_NOPM ,0 ,0 , &loopback_ctl), -SND_SOC_DAPM_SWITCH ("SPDIF" ,SND_SOC_NOPM ,0 ,0 , +SND_SOC_DAPM_SWITCH ("SPDIF" ,CS4265_SPDIF_CTL2 ,5 ,1 , &spdif_switch),SND_SOC_DAPM_SWITCH ("DAC" ,CS4265_PWRCTL ,1 ,1 , &dac_switch),
sound/soc/codecs/rt5668.c +7 -5
@@ -1022,11 +1022,13 @@ static void rt5668_jack_detect_handler(struct work_struct *work) container_of(work, struct rt5668_priv, jack_detect_work.work);int val, btn_type; -while (!rt5668->component) -usleep_range (10000 ,15000 ); - -while (!rt5668->component->card->instantiated) -usleep_range (10000 ,15000 ); +if (!rt5668->component || !rt5668->component->card || + !rt5668->component->card->instantiated) { +/* card not yet ready, try later */ +mod_delayed_work (system_power_efficient_wq, + &rt5668->jack_detect_work,msecs_to_jiffies (15 )); +return ; + }mutex_lock (&rt5668->calibrate_mutex);
sound/soc/codecs/rt5682.c +7 -5
@@ -1052,11 +1052,13 @@ static void rt5682_jack_detect_handler(struct work_struct *work) container_of(work, struct rt5682_priv, jack_detect_work.work);int val, btn_type; -while (!rt5682->component) -usleep_range (10000 ,15000 ); - -while (!rt5682->component->card->instantiated) -usleep_range (10000 ,15000 ); +if (!rt5682->component || !rt5682->component->card || + !rt5682->component->card->instantiated) { +/* card not yet ready, try later */ +mod_delayed_work (system_power_efficient_wq, + &rt5682->jack_detect_work,msecs_to_jiffies (15 )); +return ; + }mutex_lock (&rt5682->calibrate_mutex);
sound/soc/soc-ops.c +2 -2
@@ -323,7 +323,7 @@ int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, mask =BIT (sign_bit +1 ) -1 ; val = ucontrol->value.integer.value[0 ]; -if (mc->platform_max && val > mc->platform_max) +if (mc->platform_max && ((int )val + min) > mc->platform_max)return -EINVAL ;if (val > max - min)return -EINVAL ;
@@ -336,7 +336,7 @@ int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, val = val << shift;if (snd_soc_volsw_is_stereo (mc)) { val2 = ucontrol->value.integer.value[1 ]; -if (mc->platform_max && val2 > mc->platform_max) +if (mc->platform_max && ((int )val2 + min) > mc->platform_max)return -EINVAL ;if (val2 > max - min)return -EINVAL ;
sound/x86/intel_hdmi_audio.c +1 -1
@@ -1279,7 +1279,7 @@ static int had_pcm_mmap(struct snd_pcm_substream *substream, { vma->vm_page_prot =pgprot_noncached (vma->vm_page_prot);return remap_pfn_range (vma, vma->vm_start, - substream->dma_buffer.addr >>PAGE_SHIFT , + substream->runtime->dma_addr >>PAGE_SHIFT , vma->vm_end - vma->vm_start, vma->vm_page_prot); }