Linux 5.10.108
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.108 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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/arm64/include/asm/vectors.h | 4 drivers/atm/eni.c | 2 drivers/crypto/qcom-rng.c | 17 ++- drivers/firmware/efi/apple-properties.c | 2 drivers/firmware/efi/efi.c | 2 drivers/gpu/drm/imx/parallel-display.c | 8 - drivers/gpu/drm/panel/panel-simple.c | 2 drivers/input/tablet/aiptek.c | 10 -- drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 2 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 28 +++--- drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 15 --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 6 - drivers/net/ethernet/mscc/ocelot_flower.c | 16 +++ drivers/net/hyperv/netvsc_drv.c | 3 drivers/net/phy/marvell.c | 8 - drivers/net/phy/mscc/mscc_main.c | 3 drivers/net/usb/smsc95xx.c | 86 ++++++++++--------- drivers/scsi/mpt3sas/mpt3sas_base.c | 5 - drivers/usb/class/usbtmc.c | 13 ++ drivers/usb/gadget/function/rndis.c | 1 drivers/usb/gadget/udc/core.c | 3 drivers/vhost/vsock.c | 3 fs/ocfs2/super.c | 22 ++-- include/linux/if_arp.h | 1 include/net/af_vsock.h | 3 include/net/esp.h | 2 include/net/sock.h | 1 mm/swap_state.c | 2 net/dsa/dsa2.c | 1 net/ipv4/esp4.c | 5 + net/ipv6/esp6.c | 8 + net/packet/af_packet.c | 11 ++ net/vmw_vsock/af_vsock.c | 9 + net/vmw_vsock/virtio_transport.c | 7 + net/vmw_vsock/vmci_transport.c | 5 - tools/perf/util/symbol.c | 2 tools/testing/selftests/bpf/prog_tests/timer_crash.c | 32 ------- tools/testing/selftests/bpf/progs/timer_crash.c | 54 ----------- 39 files changed, 191 insertions(+), 215 deletions(-)
Alan Stern (2):
usb: gadget: Fix use-after-free bug by not setting udc->dev.driver
usb: usbtmc: Fix bug in pipe direction for control transfers
Arnd Bergmann (1):
arm64: fix clang warning about TRAMP_VALIAS
Brian Masney (1):
crypto: qcom-rng - ensure buffer for generate is completely filled
Christoph Niedermaier (1):
drm/imx: parallel-display: Remove bus flags check in imx_pd_bridge_atomic_check()
Dan Carpenter (1):
usb: gadget: rndis: prevent integer overflow in rndis_set_response()
Doug Berger (1):
net: bcmgenet: skip invalid partial checksums
Eric Dumazet (1):
net/packet: fix slab-out-of-bounds access in packet_recvmsg()
Fabio Estevam (1):
smsc95xx: Ignore -ENODEV errors when device is unplugged
Greg Kroah-Hartman (2):
Revert "selftests/bpf: Add test for bpf_timer overwriting crash" Linux 5.10.108
Guo Ziliang (1):
mm: swap: get rid of livelock in swapin readahead
Jiasheng Jiang (2):
atm: eni: Add check for dma_map_single
hv_netvsc: Add check for kvmalloc_array
Jiyong Park (1):
vsock: each transport cycles only on its own sockets
Joseph Qi (1):
ocfs2: fix crash when initialize filecheck kobj fails
Juerg Haefliger (1):
net: phy: mscc: Add MODULE_FIRMWARE macros
Kurt Cancemi (1):
net: phy: marvell: Fix invalid comparison in the resume and suspend functions
Manish Chopra (1):
bnx2x: fix built-in kernel driver load failure
Marek Vasut (1):
drm/panel: simple: Fix Innolux G070Y2-L01 BPP settings
Markus Reichl (1):
net: usb: Correct reset handling of smsc95xx
Martyn Welch (1):
net: usb: Correct PHY handling of smsc95xx
Matt Lupfer (1):
scsi: mpt3sas: Page fault in reply q processing
Miaoqian Lin (1):
net: dsa: Add missing of_node_put() in dsa_port_parse_of
Michael Petlan (1):
perf symbols: Fix symbol size calculation condition
Nicolas Dichtel (1):
net: handle ARPHRD_PIMREG in dev_is_mac_header_xmit()
Pavel Skripkin (1):
Input: aiptek - properly check endpoint type
Randy Dunlap (1):
efi: fix return value of __setup handlers
Sabrina Dubroca (1):
esp6: fix check on ipv6_skip_exthdr's return value
Steffen Klassert (1):
esp: Fix possible buffer overflow in ESP transformation
Vladimir Oltean (1):
net: mscc: ocelot: fix backwards compatibility with single-chain tc-flower offload
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 107 +SUBLEVEL = 108 EXTRAVERSION = NAME = Dare mighty things
arch/arm64/include/asm/vectors.h +2 -2
@@ -56,14 +56,14 @@ enum arm64_bp_harden_el1_vectors { DECLARE_PER_CPU_READ_MOSTLY(const char *, this_cpu_vector);#ifndef CONFIG_UNMAP_KERNEL_AT_EL0 -#define TRAMP_VALIAS 0 +#define TRAMP_VALIAS 0ul#endif static inline const char *arm64_get_bp_hardening_vector (enum arm64_bp_harden_el1_vectors slot) {if (arm64_kernel_unmapped_at_el0 ()) -return (char *)TRAMP_VALIAS +SZ_2K * slot; +return (char *)(TRAMP_VALIAS +SZ_2K * slot);WARN_ON_ONCE (slot ==EL1_VECTOR_KPTI );
drivers/atm/eni.c +2 -0
@@ -1112,6 +1112,8 @@ DPRINTK("iovcnt = %d\n",skb_shinfo(skb)->nr_frags); skb_data3 = skb->data[3 ]; paddr =dma_map_single (&eni_dev->pci_dev->dev,skb->data,skb->len,DMA_TO_DEVICE ); +if (dma_mapping_error (&eni_dev->pci_dev->dev, paddr)) +return enq_next;ENI_PRV_PADDR (skb) = paddr;/* prepare DMA queue entries */ j =0 ;
drivers/crypto/qcom-rng.c +10 -7
@@ -8,6 +8,7 @@#include <linux/clk.h> #include <linux/crypto.h> #include <linux/io.h> +#include <linux/iopoll.h> #include <linux/module.h> #include <linux/of.h> #include <linux/platform_device.h>
@@ -43,16 +44,19 @@ static int qcom_rng_read(struct qcom_rng *rng, u8 *data, unsigned int max) {unsigned int currsize =0 ;u32 val; +int ret;/* read random data from hardware */ do { - val = readl_relaxed(rng->base + PRNG_STATUS); - if (!(val & PRNG_STATUS_DATA_AVAIL)) - break; + ret = readl_poll_timeout(rng->base + PRNG_STATUS, val, + val & PRNG_STATUS_DATA_AVAIL, + 200, 10000); + if (ret) + return ret; val = readl_relaxed(rng->base + PRNG_DATA_OUT); if (!val) - break; + return -EINVAL; if ((max - currsize) >= WORD_SZ) { memcpy(data, &val, WORD_SZ);
@@ -61,11 +65,10 @@ static int qcom_rng_read(struct qcom_rng *rng, u8 *data, unsigned int max) }else {/* copy only remaining bytes */ memcpy (data, &val, max - currsize); -break ; } }while (currsize < max); -return currsize; +return 0 ; } static int qcom_rng_generate(struct crypto_rng *tfm,
@@ -87,7 +90,7 @@ static int qcom_rng_generate(struct crypto_rng *tfm,mutex_unlock (&rng->lock);clk_disable_unprepare (rng->clk); -return 0 ; +return ret; } static int qcom_rng_seed(struct crypto_rng *tfm, const u8 *seed,
drivers/firmware/efi/apple-properties.c +1 -1
@@ -24,7 +24,7 @@ static bool dump_properties __initdata;static int __init dump_properties_enable (char *arg) { dump_properties = true; -return 0 ; +return 1 ; }__setup ("dump_apple_properties" , dump_properties_enable);
drivers/firmware/efi/efi.c +1 -1
@@ -209,7 +209,7 @@ static int __init efivar_ssdt_setup(char *str)memcpy (efivar_ssdt, str,strlen (str)); else pr_warn("efivar_ssdt: name too long: %s\n", str); -return 0 ; +return 1 ; }__setup ("efivar_ssdt=" , efivar_ssdt_setup);
drivers/gpu/drm/imx/parallel-display.c +0 -8
@@ -212,14 +212,6 @@ static int imx_pd_bridge_atomic_check(struct drm_bridge *bridge,if (!imx_pd_format_supported (bus_fmt))return -EINVAL ; -if (bus_flags & - ~(DRM_BUS_FLAG_DE_LOW |DRM_BUS_FLAG_DE_HIGH | -DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE | -DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE )) { -dev_warn (imxpd->dev,"invalid bus_flags (%x)\n" , bus_flags); -return -EINVAL ; - } - bridge_state->output_bus_cfg.flags = bus_flags; bridge_state->input_bus_cfg.flags = bus_flags; imx_crtc_state->bus_flags = bus_flags;
drivers/gpu/drm/panel/panel-simple.c +1 -1
@@ -2132,7 +2132,7 @@ static const struct display_timing innolux_g070y2_l01_timing = {static const struct panel_desc innolux_g070y2_l01 = { .timings = &innolux_g070y2_l01_timing, .num_timings =1 , - .bpc =6 , + .bpc =8 , .size = { .width =152 , .height =91 ,
drivers/input/tablet/aiptek.c +4 -6
@@ -1801,15 +1801,13 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)input_set_abs_params (inputdev,ABS_TILT_Y ,AIPTEK_TILT_MIN ,AIPTEK_TILT_MAX ,0 ,0 );input_set_abs_params (inputdev,ABS_WHEEL ,AIPTEK_WHEEL_MIN ,AIPTEK_WHEEL_MAX -1 ,0 ,0 ); -/* Verify that a device really has an endpoint */ -if (intf->cur_altsetting->desc.bNumEndpoints <1 ) { + err =usb_find_common_endpoints (intf->cur_altsetting, +NULL ,NULL , &endpoint,NULL ); +if (err) {dev_err (&intf->dev, -"interface has %d endpoints, but must have minimum 1\n" , - intf->cur_altsetting->desc.bNumEndpoints); - err = -EINVAL ; +"interface has no int in endpoints, but must have minimum 1\n" ); goto fail3; } - endpoint = &intf->cur_altsetting->endpoint[0 ].desc;/* Go set up our URB, which is called when the tablet receives * input.
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +0 -2
@@ -2534,6 +2534,4 @@ void bnx2x_register_phc(struct bnx2x *bp);* Meant for implicit re-load flows. */ int bnx2x_vlan_reconfigure_vid (struct bnx2x *bp); -int bnx2x_init_firmware (struct bnx2x *bp); -void bnx2x_release_firmware (struct bnx2x *bp);#endif /* bnx2x.h */
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +17 -11
@@ -2363,24 +2363,30 @@ int bnx2x_compare_fw_ver(struct bnx2x *bp, u32 load_code, bool print_err)/* is another pf loaded on this engine? */ if (load_code !=FW_MSG_CODE_DRV_LOAD_COMMON_CHIP && load_code !=FW_MSG_CODE_DRV_LOAD_COMMON ) { -/* build my FW version dword */ -u32 my_fw = (bp->fw_major) + (bp->fw_minor <<8 ) + - (bp->fw_rev <<16 ) + (bp->fw_eng <<24 ); +u8 loaded_fw_major, loaded_fw_minor, loaded_fw_rev, loaded_fw_eng; +u32 loaded_fw;/* read loaded FW from chip */ -u32 loaded_fw =REG_RD (bp,XSEM_REG_PRAM ); + loaded_fw =REG_RD (bp,XSEM_REG_PRAM ); -DP (BNX2X_MSG_SP ,"loaded fw %x, my fw %x\n" , - loaded_fw, my_fw); + loaded_fw_major = loaded_fw &0xff ; + loaded_fw_minor = (loaded_fw >>8 ) &0xff ; + loaded_fw_rev = (loaded_fw >>16 ) &0xff ; + loaded_fw_eng = (loaded_fw >>24 ) &0xff ; + +DP (BNX2X_MSG_SP ,"loaded fw 0x%x major 0x%x minor 0x%x rev 0x%x eng 0x%x\n" , + loaded_fw, loaded_fw_major, loaded_fw_minor, loaded_fw_rev, loaded_fw_eng);/* abort nic load if version mismatch */ -if (my_fw != loaded_fw) { +if (loaded_fw_major !=BCM_5710_FW_MAJOR_VERSION || + loaded_fw_minor !=BCM_5710_FW_MINOR_VERSION || + loaded_fw_eng !=BCM_5710_FW_ENGINEERING_VERSION || + loaded_fw_rev <BCM_5710_FW_REVISION_VERSION_V15 ) {if (print_err) -BNX2X_ERR ("bnx2x with FW %x was already loaded which mismatches my %x FW. Aborting\n" , - loaded_fw, my_fw); +BNX2X_ERR ("loaded FW incompatible. Aborting\n" );else -BNX2X_DEV_INFO ("bnx2x with FW %x was already loaded which mismatches my %x FW, possibly due to MF UNDI\n" , - loaded_fw, my_fw); +BNX2X_DEV_INFO ("loaded FW incompatible, possibly due to MF UNDI\n" ); +return -EBUSY ; } }
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +2 -13
@@ -12366,15 +12366,6 @@ static int bnx2x_init_bp(struct bnx2x *bp)bnx2x_read_fwinfo (bp); -if (IS_PF (bp)) { - rc =bnx2x_init_firmware (bp); - -if (rc) { -bnx2x_free_mem_bp (bp); -return rc; - } - } - func =BP_FUNC (bp);/* need to reset chip if undi was active */
@@ -12387,7 +12378,6 @@ static int bnx2x_init_bp(struct bnx2x *bp) rc =bnx2x_prev_unload (bp);if (rc) { -bnx2x_release_firmware (bp);bnx2x_free_mem_bp (bp);return rc; }
@@ -13469,7 +13459,7 @@ do { \ (u8 *)bp->arr, len); \ }while (0 ) -int bnx2x_init_firmware(struct bnx2x *bp) +static int bnx2x_init_firmware(struct bnx2x *bp) {const char *fw_file_name, *fw_file_name_v15;struct bnx2x_fw_file_hdr *fw_hdr;
@@ -13569,7 +13559,7 @@ int bnx2x_init_firmware(struct bnx2x *bp)return rc; } -void bnx2x_release_firmware (struct bnx2x *bp) +static void bnx2x_release_firmware (struct bnx2x *bp) {kfree (bp->init_ops_offsets);kfree (bp->init_ops);
@@ -14086,7 +14076,6 @@ static int bnx2x_init_one(struct pci_dev *pdev,return 0 ; init_one_freemem: -bnx2x_release_firmware (bp);bnx2x_free_mem_bp (bp); init_one_exit:
drivers/net/ethernet/broadcom/genet/bcmgenet.c +4 -2
@@ -2239,8 +2239,10 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_rx_ring *ring, dma_length_status = status->length_status;if (dev->features &NETIF_F_RXCSUM ) { rx_csum = (__force __be16)(status->rx_csum &0xffff ); - skb->csum = (__force __wsum )ntohs (rx_csum); - skb->ip_summed =CHECKSUM_COMPLETE ; +if (rx_csum) { + skb->csum = (__force __wsum )ntohs (rx_csum); + skb->ip_summed =CHECKSUM_COMPLETE ; + } }/* DMA flags and length are still valid no matter how
drivers/net/ethernet/mscc/ocelot_flower.c +15 -1
@@ -54,6 +54,12 @@ static int ocelot_chain_to_block(int chain, bool ingress)*/ static int ocelot_chain_to_lookup (int chain) { +/* Backwards compatibility with older, single-chain tc-flower +* offload support in Ocelot +*/ +if (chain ==0 ) +return 0 ; +return (chain /VCAP_LOOKUP ) %10 ; }
@@ -62,7 +68,15 @@ static int ocelot_chain_to_lookup(int chain)*/ static int ocelot_chain_to_pag (int chain) { -int lookup =ocelot_chain_to_lookup (chain); +int lookup; + +/* Backwards compatibility with older, single-chain tc-flower +* offload support in Ocelot +*/ +if (chain ==0 ) +return 0 ; + + lookup =ocelot_chain_to_lookup (chain);/* calculate PAG value as chain index relative to the first PAG */ return chain -VCAP_IS2_CHAIN (lookup,0 );
drivers/net/hyperv/netvsc_drv.c +3 -0
@@ -1562,6 +1562,9 @@ static void netvsc_get_ethtool_stats(struct net_device *dev, pcpu_sum =kvmalloc_array (num_possible_cpus (),sizeof (struct netvsc_ethtool_pcpu_stats ),GFP_KERNEL ); +if (!pcpu_sum) +return ; +netvsc_get_pcpu_stats (dev, pcpu_sum);for_each_present_cpu (cpu) {struct netvsc_ethtool_pcpu_stats *this_sum = &pcpu_sum[cpu];
drivers/net/phy/marvell.c +4 -4
@@ -1536,8 +1536,8 @@ static int marvell_suspend(struct phy_device *phydev)int err;/* Suspend the fiber mode first */ -if (!linkmode_test_bit (ETHTOOL_LINK_MODE_FIBRE_BIT , - phydev->supported)) { +if (linkmode_test_bit (ETHTOOL_LINK_MODE_FIBRE_BIT , + phydev->supported)) { err =marvell_set_page (phydev,MII_MARVELL_FIBER_PAGE );if (err <0 ) goto error;
@@ -1571,8 +1571,8 @@ static int marvell_resume(struct phy_device *phydev)int err;/* Resume the fiber mode first */ -if (!linkmode_test_bit (ETHTOOL_LINK_MODE_FIBRE_BIT , - phydev->supported)) { +if (linkmode_test_bit (ETHTOOL_LINK_MODE_FIBRE_BIT , + phydev->supported)) { err =marvell_set_page (phydev,MII_MARVELL_FIBER_PAGE );if (err <0 ) goto error;
drivers/net/phy/mscc/mscc_main.c +3 -0
@@ -2584,3 +2584,6 @@ MODULE_DEVICE_TABLE(mdio, vsc85xx_tbl);MODULE_DESCRIPTION ("Microsemi VSC85xx PHY driver" );MODULE_AUTHOR ("Nagaraju Lakkaraju" );MODULE_LICENSE ("Dual MIT/GPL" ); + +MODULE_FIRMWARE (MSCC_VSC8584_REVB_INT8051_FW ); +MODULE_FIRMWARE (MSCC_VSC8574_REVB_INT8051_FW );
drivers/net/usb/smsc95xx.c +48 -38
171 lines not on this page · raw message
drivers/scsi/mpt3sas/mpt3sas_base.c +3 -2
@@ -1832,9 +1832,10 @@ mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc, u8 poll)enable_irq (reply_q->os_irq); } } + +if (poll) +_base_process_reply_queue (reply_q); } -if (poll) -_base_process_reply_queue (reply_q); }/**
drivers/usb/class/usbtmc.c +10 -3
@@ -1889,6 +1889,7 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data,struct usbtmc_ctrlrequest request;u8 *buffer =NULL ;int rv; +unsigned int is_in, pipe;unsigned long res; res =copy_from_user (&request, arg,sizeof (struct usbtmc_ctrlrequest ));
@@ -1898,12 +1899,14 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data,if (request.req.wLength >USBTMC_BUFSIZE )return -EMSGSIZE ; + is_in = request.req.bRequestType &USB_DIR_IN ; +if (request.req.wLength) { buffer =kmalloc (request.req.wLength,GFP_KERNEL );if (!buffer)return -ENOMEM ; -if ((request.req.bRequestType &USB_DIR_IN ) ==0 ) { +if (!is_in) {/* Send control data to device */ res =copy_from_user (buffer, request.data, request.req.wLength);
@@ -1914,8 +1917,12 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data, } } +if (is_in) + pipe =usb_rcvctrlpipe (data->usb_dev,0 ); +else + pipe =usb_sndctrlpipe (data->usb_dev,0 ); rv = usb_control_msg(data->usb_dev, - usb_rcvctrlpipe(data->usb_dev, 0), + pipe, request.req.bRequest, request.req.bRequestType, request.req.wValue,
@@ -1927,7 +1934,7 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data, goto exit; } -if (rv && (request.req.bRequestType &USB_DIR_IN )) { +if (rv && is_in) {/* Read control data from device */ res =copy_to_user (request.data, buffer, rv);if (res)
drivers/usb/gadget/function/rndis.c +1 -0
@@ -640,6 +640,7 @@ static int rndis_set_response(struct rndis_params *params, BufLength =le32_to_cpu (buf->InformationBufferLength); BufOffset =le32_to_cpu (buf->InformationBufferOffset);if ((BufLength >RNDIS_MAX_TOTAL_SIZE ) || + (BufOffset >RNDIS_MAX_TOTAL_SIZE ) || (BufOffset +8 >=RNDIS_MAX_TOTAL_SIZE ))return -EINVAL ;
drivers/usb/gadget/udc/core.c +0 -3
@@ -1343,7 +1343,6 @@ static void usb_gadget_remove_driver(struct usb_udc *udc)usb_gadget_udc_stop (udc); udc->driver =NULL ; - udc->dev.driver =NULL ; udc->gadget->dev.driver =NULL ; }
@@ -1405,7 +1404,6 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri driver->function); udc->driver = driver; - udc->dev.driver = &driver->driver; udc->gadget->dev.driver = &driver->driver;usb_gadget_udc_set_speed (udc, driver->max_speed);
@@ -1427,7 +1425,6 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dridev_err (&udc->dev,"failed to start %s: %d\n" , udc->driver->function, ret); udc->driver =NULL ; - udc->dev.driver =NULL ; udc->gadget->dev.driver =NULL ;return ret; }
drivers/vhost/vsock.c +2 -1
@@ -697,7 +697,8 @@ static int vhost_vsock_dev_release(struct inode *inode, struct file *file)/* Iterating over all connections for all CIDs to find orphans is * inefficient. Room for improvement here. */ -vsock_for_each_connected_socket (vhost_vsock_reset_orphans); +vsock_for_each_connected_socket (&vhost_transport.transport, + vhost_vsock_reset_orphans);/* Don't check the owner, because we are in the release path, so we * need to stop the vsock device in any case.
fs/ocfs2/super.c +11 -11
@@ -1110,17 +1110,6 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) goto read_super_error; } - root =d_make_root (inode); -if (!root) { - status = -ENOMEM ; -mlog_errno (status); - goto read_super_error; - } - - sb->s_root = root; - -ocfs2_complete_mount_recovery (osb); - osb->osb_dev_kset =kset_create_and_add (sb->s_id,NULL , &ocfs2_kset->kobj);if (!osb->osb_dev_kset) {
@@ -1138,6 +1127,17 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) goto read_super_error; } + root =d_make_root (inode); +if (!root) { + status = -ENOMEM ; +mlog_errno (status); + goto read_super_error; + } + + sb->s_root = root; + +ocfs2_complete_mount_recovery (osb); +if (ocfs2_mount_local (osb))snprintf (nodestr,sizeof (nodestr),"local" );else
include/linux/if_arp.h +1 -0
@@ -51,6 +51,7 @@ static inline bool dev_is_mac_header_xmit(const struct net_device *dev)case ARPHRD_VOID :case ARPHRD_NONE :case ARPHRD_RAWIP : +case ARPHRD_PIMREG :return false;default :return true;
include/net/af_vsock.h +2 -1
@@ -197,7 +197,8 @@ struct sock *vsock_find_bound_socket(struct sockaddr_vm *addr);struct sock *vsock_find_connected_socket (struct sockaddr_vm *src,struct sockaddr_vm *dst);void vsock_remove_sock (struct vsock_sock *vsk); -void vsock_for_each_connected_socket (void (*fn)(struct sock *sk)); +void vsock_for_each_connected_socket (struct vsock_transport *transport, +void (*fn)(struct sock *sk));int vsock_assign_transport (struct vsock_sock *vsk,struct vsock_sock *psk);bool vsock_find_cid (unsigned int cid);
include/net/esp.h +2 -0
@@ -4,6 +4,8 @@#include <linux/skbuff.h> +#define ESP_SKB_FRAG_MAXSIZE (PAGE_SIZE << SKB_FRAG_PAGE_ORDER) +struct ip_esp_hdr ;static inline struct ip_esp_hdr *ip_esp_hdr (const struct sk_buff *skb)
include/net/sock.h +1 -0
@@ -2670,6 +2670,7 @@ extern int sysctl_optmem_max;extern __u32 sysctl_wmem_default;extern __u32 sysctl_rmem_default; +#define SKB_FRAG_PAGE_ORDER get_order(32768)DECLARE_STATIC_KEY_FALSE (net_high_order_alloc_disable_key);static inline int sk_get_wmem0 (const struct sock *sk,const struct proto *proto)
mm/swap_state.c +1 -1
@@ -512,7 +512,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,* __read_swap_cache_async(), which has set SWAP_HAS_CACHE * in swap_map, but not yet added its page to swap cache. */ -cond_resched (); +schedule_timeout_uninterruptible (1 ); }/*
net/dsa/dsa2.c +1 -0
@@ -766,6 +766,7 @@ static int dsa_port_parse_of(struct dsa_port *dp, struct device_node *dn)struct net_device *master; master =of_find_net_device_by_node (ethernet); +of_node_put (ethernet);if (!master)return -EPROBE_DEFER ;
net/ipv4/esp4.c +5 -0
@@ -448,6 +448,7 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *struct page *page;struct sk_buff *trailer;int tailen = esp->tailen; +unsigned int allocsz;/* this is non-NULL only with TCP/UDP Encapsulation */ if (x->encap) {
@@ -457,6 +458,10 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *return err; } + allocsz =ALIGN (skb->data_len + tailen,L1_CACHE_BYTES ); +if (allocsz >ESP_SKB_FRAG_MAXSIZE ) + goto cow; +if (!skb_cloned (skb)) {if (tailen <=skb_tailroom (skb)) { nfrags =1 ;
net/ipv6/esp6.c +6 -2
@@ -483,6 +483,7 @@ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_infostruct page *page;struct sk_buff *trailer;int tailen = esp->tailen; +unsigned int allocsz;if (x->encap) {int err =esp6_output_encap (x, skb, esp);
@@ -491,6 +492,10 @@ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_inforeturn err; } + allocsz =ALIGN (skb->data_len + tailen,L1_CACHE_BYTES ); +if (allocsz >ESP_SKB_FRAG_MAXSIZE ) + goto cow; +if (!skb_cloned (skb)) {if (tailen <=skb_tailroom (skb)) { nfrags =1 ;
@@ -808,8 +813,7 @@ int esp6_input_done2(struct sk_buff *skb, int err)struct tcphdr *th; offset =ipv6_skip_exthdr (skb, offset, &nexthdr, &frag_off); - -if (offset <0 ) { +if (offset ==-1 ) { err = -EINVAL ; goto out; }
net/packet/af_packet.c +10 -1
@@ -2278,8 +2278,11 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, copy_skb =skb_get (skb); skb_head = skb->data; } -if (copy_skb) +if (copy_skb) { +memset (&PACKET_SKB_CB (copy_skb)->sa.ll,0 , +sizeof (PACKET_SKB_CB (copy_skb)->sa.ll));skb_set_owner_r (copy_skb, sk); + } } snaplen = po->rx_ring.frame_size - macoff;if ((int )snaplen <0 ) {
@@ -3434,6 +3437,8 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,sock_recv_ts_and_drops (msg, sk, skb);if (msg->msg_name) { +const size_t max_len =min (sizeof (skb->cb), +sizeof (struct sockaddr_storage ));int copy_len;/* If the address length field is there to be filled
@@ -3456,6 +3461,10 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, msg->msg_namelen =sizeof (struct sockaddr_ll ); } } +if (WARN_ON_ONCE (copy_len > max_len)) { + copy_len = max_len; + msg->msg_namelen = copy_len; + }memcpy (msg->msg_name, &PACKET_SKB_CB (skb)->sa, copy_len); }
net/vmw_vsock/af_vsock.c +7 -2
@@ -333,7 +333,8 @@ void vsock_remove_sock(struct vsock_sock *vsk) }EXPORT_SYMBOL_GPL (vsock_remove_sock); -void vsock_for_each_connected_socket (void (*fn)(struct sock *sk)) +void vsock_for_each_connected_socket (struct vsock_transport *transport, +void (*fn)(struct sock *sk)) {int i;
@@ -342,8 +343,12 @@ void vsock_for_each_connected_socket(void (*fn)(struct sock *sk))for (i =0 ; i <ARRAY_SIZE (vsock_connected_table); i++) {struct vsock_sock *vsk;list_for_each_entry (vsk, &vsock_connected_table[i], - connected_table) + connected_table) { +if (vsk->transport != transport) +continue ; +fn (sk_vsock (vsk)); + } }spin_unlock_bh (&vsock_table_lock);
net/vmw_vsock/virtio_transport.c +5 -2
@@ -24,6 +24,7 @@static struct workqueue_struct *virtio_vsock_workqueue;static struct virtio_vsock __rcu *the_virtio_vsock;static DEFINE_MUTEX (the_virtio_vsock_mutex);/* protects the_virtio_vsock */ +static struct virtio_transport virtio_transport;/* forward declaration */ struct virtio_vsock {struct virtio_device *vdev;
@@ -383,7 +384,8 @@ static void virtio_vsock_event_handle(struct virtio_vsock *vsock,switch (le32_to_cpu (event->id)) {case VIRTIO_VSOCK_EVENT_TRANSPORT_RESET :virtio_vsock_update_guest_cid (vsock); -vsock_for_each_connected_socket (virtio_vsock_reset_sock); +vsock_for_each_connected_socket (&virtio_transport.transport, + virtio_vsock_reset_sock);break ; } }
@@ -635,7 +637,8 @@ static void virtio_vsock_remove(struct virtio_device *vdev)synchronize_rcu ();/* Reset all connected sockets when the device disappear */ -vsock_for_each_connected_socket (virtio_vsock_reset_sock); +vsock_for_each_connected_socket (&virtio_transport.transport, + virtio_vsock_reset_sock);/* Stop all work handlers to make sure no one is accessing the device, * so we can safely call vdev->config->reset().
net/vmw_vsock/vmci_transport.c +4 -1
@@ -75,6 +75,8 @@ static u32 vmci_transport_qp_resumed_sub_id = VMCI_INVALID_ID;static int PROTOCOL_OVERRIDE =-1 ; +static struct vsock_transport vmci_transport;/* forward declaration */ +/* Helper function to convert from a VMCI error code to a VSock error code. */ static s32 vmci_transport_error_to_vsock_error (s32 vmci_error)
@@ -882,7 +884,8 @@ static void vmci_transport_qp_resumed_cb(u32 sub_id,const struct vmci_event_data *e_data, void *client_data) { - vsock_for_each_connected_socket(vmci_transport_handle_detach); + vsock_for_each_connected_socket(&vmci_transport, +vmci_transport_handle_detach ); }static void vmci_transport_recv_pkt_work (struct work_struct *work)
tools/perf/util/symbol.c +1 -1
@@ -231,7 +231,7 @@ void symbols__fixup_end(struct rb_root_cached *symbols) prev = curr; curr = rb_entry(nd, struct symbol, rb_node); -if (prev->end == prev->start && prev->end != curr->start) +if (prev->end == prev->start || prev->end != curr->start)arch__symbols__fixup_end (prev, curr); }
tools/testing/selftests/bpf/prog_tests/timer_crash.c deleted +0 -32
@@ -1,32 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -#include <test_progs.h> -#include "timer_crash.skel.h" - -enum { -MODE_ARRAY , -MODE_HASH , -}; - -static void test_timer_crash_mode (int mode) -{ -struct timer_crash *skel; - - skel =timer_crash__open_and_load (); -if (!ASSERT_OK_PTR (skel,"timer_crash__open_and_load" )) -return ; - skel->bss->pid =getpid (); - skel->bss->crash_map = mode; -if (!ASSERT_OK (timer_crash__attach (skel),"timer_crash__attach" )) - goto end; -usleep (1 ); -end: -timer_crash__destroy (skel); -} - -void test_timer_crash (void ) -{ -if (test__start_subtest ("array" )) -test_timer_crash_mode (MODE_ARRAY ); -if (test__start_subtest ("hash" )) -test_timer_crash_mode (MODE_HASH ); -}
tools/testing/selftests/bpf/progs/timer_crash.c deleted +0 -54
54 lines not on this page · raw message