Linux 5.10.250
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.250 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/arm/include/asm/string.h | 5 - block/bfq-cgroup.c | 2 drivers/android/binderfs.c | 8 - drivers/block/rbd.c | 33 ++++-- drivers/hid/hid-ids.h | 4 drivers/hid/hid-multitouch.c | 1 drivers/hid/hid-quirks.c | 2 drivers/hid/intel-ish-hid/ishtp-hid-client.c | 1 drivers/hwmon/occ/common.c | 1 drivers/net/ethernet/cavium/liquidio/lio_main.c | 39 ++++---- drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 4 drivers/net/ethernet/google/gve/gve_ethtool.c | 46 ++++++--- drivers/net/ethernet/google/gve/gve_main.c | 4 drivers/net/macvlan.c | 5 - drivers/net/usb/sr9700.c | 5 + drivers/net/wireless/ti/wlcore/tx.c | 5 + drivers/nvme/target/tcp.c | 100 ++++++++++----------- drivers/platform/x86/intel_telemetry_debugfs.c | 4 drivers/platform/x86/intel_telemetry_pltdrv.c | 2 drivers/platform/x86/toshiba_haps.c | 2 drivers/target/iscsi/iscsi_target_util.c | 10 +- kernel/trace/ring_buffer.c | 2 kernel/trace/trace.h | 7 + kernel/trace/trace_entries.h | 14 +- kernel/trace/trace_export.c | 21 +++- net/mac80211/key.c | 3 net/mac80211/ocb.c | 3 net/mac80211/sta_info.c | 7 - net/netfilter/nft_set_pipapo.c | 8 + net/tipc/crypto.c | 4 net/wireless/util.c | 8 + sound/pci/hda/patch_realtek.c | 1 sound/soc/amd/renoir/acp3x-pdm-dma.c | 2 sound/soc/codecs/tlv320adcx140.c | 3 sound/soc/ti/davinci-evm.c | 39 ++++++-- virt/kvm/eventfd.c | 34 ++----- 37 files changed, 271 insertions(+), 170 deletions(-)
Arnd Bergmann (1):
hwmon: (occ) Mark occ_init_attribute() as __printf
Baochen Qiang (1):
wifi: mac80211: collect station statistics earlier when disconnect
Carlos Llamas (1):
binderfs: fix ida_alloc_max() upper bound
Chris Bainbridge (1):
ASoC: amd: fix memory leak in acp3x pdm dma ops
Chris Chiu (1):
HID: quirks: Add another Chicony HP 5MP Cameras to hid_ignore_list
Daniel Hodges (1):
tipc: use kfree_sensitive() for session key material
DaytonCL (1):
HID: multitouch: add MT_QUIRK_STICKY_FINGERS to MT_CLS_VTL
Debarghya Kundu (1):
gve: Fix stats report corruption on queue count change
Dimitrios Katsaros (1):
ASoC: tlv320adcx140: Propagate error codes during probe
Eric Dumazet (1):
macvlan: fix error recovery in macvlan_common_newlink()
Ethan Nelson-Moore (1):
net: usb: sr9700: support devices with virtual driver CD
Fabio M. De Francesco (1):
nvmet-tcp: don't map pages which can't come from HIGHMEM
Greg Kroah-Hartman (1):
Linux 5.10.250
Ilya Dryomov (1):
rbd: check for EOD after exclusive lock is ensured to be held
Kaushlendra Kumar (2):
platform/x86: intel_telemetry: Fix PSS event register mask platform/x86: intel_telemetry: Fix swapped arrays in PSS output
Kery Qi (1):
ASoC: davinci-evm: Fix reference leak in davinci_evm_probe
Maurizio Lombardi (4):
scsi: target: iscsi: Fix use-after-free in iscsit_dec_session_usage_count()
scsi: target: iscsi: Fix use-after-free in iscsit_dec_conn_usage_count()
nvmet-tcp: add an helper to free the cmd buffers
nvmet-tcp: fix memory leak when performing a controller reset
Max Yuan (1):
gve: Correct ethtool rx_dropped calculation
Miri Korenblit (1):
wifi: mac80211: don't increment crypto_tx_tailroom_needed_cnt twice
Moon Hee Lee (1):
wifi: mac80211: ocb: skip rx_no_sta when interface is not joined
Pablo Neira Ayuso (1):
netfilter: nft_set_pipapo: clamp maximum map bucket size to INT_MAX
Peter Åstrand (1):
wifi: wlcore: ensure skb headroom before skb_push
Rafael J. Wysocki (1):
platform/x86: toshiba_haps: Fix memory leaks in add/remove routines
Rodrigo Lugathe da Conceição Alves (1):
HID: Apply quirk HID_QUIRK_ALWAYS_POLL to Edifier QR30 (2d99:a101)
Ruslan Krupitsa (1):
ALSA: hda/realtek: add HP Laptop 15s-eq1xxx mute LED quirk
Sagi Grimberg (1):
nvmet-tcp: fix regression in data_digest calculation
Sean Christopherson (1):
KVM: Don't clobber irqfd routing type when deassigning irqfd
Steven Rostedt (1):
tracing: Fix ftrace event field alignments
Thomas Weissschuh (1):
ARM: 9468/1: fix memset64() on big-endian
Varun Prakash (1):
nvmet-tcp: pass iov_len instead of sg->length to bvec_set_page()
Veerendranath Jakkam (1):
wifi: cfg80211: Fix bitrate calculation overflow for HE rates
Wupeng Ma (1):
ring-buffer: Avoid softlockup in ring_buffer_resize() during memory free
YunJe Shin (1):
nvmet-tcp: add bounds checks in nvmet_tcp_build_pdu_iovec
Zhang Lixu (1):
HID: intel-ish-hid: Reset enum_devices_done before enumeration
Zilin Guan (3):
net: liquidio: Initialize netdev pointer before queue setup
net: liquidio: Fix off-by-one error in PF setup_nic_devices() cleanup
net: liquidio: Fix off-by-one error in VF setup_nic_devices() cleanup
shechenglong (1):
block,bfq: fix aux stat accumulation destination
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 249 +SUBLEVEL = 250 EXTRAVERSION = NAME = Dare mighty things
arch/arm/include/asm/string.h +4 -1
@@ -36,7 +36,10 @@ static inline void *memset32(uint32_t *p, uint32_t v, __kernel_size_t n)extern void *__memset64 (uint64_t *,uint32_t low,__kernel_size_t ,uint32_t hi);static inline void *memset64 (uint64_t *p,uint64_t v,__kernel_size_t n) { -return __memset64 (p, v, n *8 , v >>32 ); +if (IS_ENABLED (CONFIG_CPU_LITTLE_ENDIAN )) +return __memset64 (p, v, n *8 , v >>32 ); +else +return __memset64 (p, v >>32 , n *8 , v); }#endif
block/bfq-cgroup.c +1 -1
@@ -387,7 +387,7 @@ static void bfqg_stats_add_aux(struct bfqg_stats *to, struct bfqg_stats *from)blkg_rwstat_add_aux (&to->merged, &from->merged);blkg_rwstat_add_aux (&to->service_time, &from->service_time);blkg_rwstat_add_aux (&to->wait_time, &from->wait_time); -bfq_stat_add_aux (&from->time, &from->time); +bfq_stat_add_aux (&to->time, &from->time);bfq_stat_add_aux (&to->avg_queue_size_sum, &from->avg_queue_size_sum);bfq_stat_add_aux (&to->avg_queue_size_samples, &from->avg_queue_size_samples);
drivers/android/binderfs.c +4 -4
@@ -122,8 +122,8 @@ static int binderfs_binder_device_create(struct inode *ref_inode,mutex_lock (&binderfs_minors_mutex);if (++info->device_count <= info->mount_opts.max) minor =ida_alloc_max (&binderfs_minors, - use_reserve ?BINDERFS_MAX_MINOR : -BINDERFS_MAX_MINOR_CAPPED , + use_reserve ?BINDERFS_MAX_MINOR -1 : +BINDERFS_MAX_MINOR_CAPPED -1 ,GFP_KERNEL );else minor = -ENOSPC ;
@@ -423,8 +423,8 @@ static int binderfs_binder_ctl_create(struct super_block *sb)/* Reserve a new minor number for the new device. */ mutex_lock (&binderfs_minors_mutex); minor =ida_alloc_max (&binderfs_minors, - use_reserve ?BINDERFS_MAX_MINOR : -BINDERFS_MAX_MINOR_CAPPED , + use_reserve ?BINDERFS_MAX_MINOR -1 : +BINDERFS_MAX_MINOR_CAPPED -1 ,GFP_KERNEL );mutex_unlock (&binderfs_minors_mutex);if (minor <0 ) {
drivers/block/rbd.c +21 -12
@@ -3560,11 +3560,29 @@ static void rbd_img_object_requests(struct rbd_img_request *img_req)rbd_assert (!need_exclusive_lock (img_req) ||__rbd_is_lock_owner (rbd_dev)); -if (rbd_img_is_write (img_req)) { -rbd_assert (!img_req->snapc); +if (test_bit (IMG_REQ_CHILD , &img_req->flags)) { +rbd_assert (!rbd_img_is_write (img_req)); + }else { +struct request *rq =blk_mq_rq_from_pdu (img_req); +u64 off = (u64 )blk_rq_pos (rq) <<SECTOR_SHIFT ; +u64 len =blk_rq_bytes (rq); +u64 mapping_size; +down_read (&rbd_dev->header_rwsem); - img_req->snapc =ceph_get_snap_context (rbd_dev->header.snapc); + mapping_size = rbd_dev->mapping.size; +if (rbd_img_is_write (img_req)) { +rbd_assert (!img_req->snapc); + img_req->snapc = +ceph_get_snap_context (rbd_dev->header.snapc); + }up_read (&rbd_dev->header_rwsem); + +if (unlikely (off + len > mapping_size)) { +rbd_warn (rbd_dev,"beyond EOD (%llu~%llu > %llu)" , + off, len, mapping_size); + img_req->pending.result = -EIO ; +return ; + } }for_each_obj_request (img_req, obj_req) {
@@ -4781,7 +4799,6 @@ static void rbd_queue_workfn(struct work_struct *work)struct request *rq =blk_mq_rq_from_pdu (img_request);u64 offset = (u64 )blk_rq_pos (rq) <<SECTOR_SHIFT ;u64 length =blk_rq_bytes (rq); -u64 mapping_size;int result;/* Ignore/skip any zero-length requests */
@@ -4794,17 +4811,9 @@ static void rbd_queue_workfn(struct work_struct *work)blk_mq_start_request (rq);down_read (&rbd_dev->header_rwsem); - mapping_size = rbd_dev->mapping.size;rbd_img_capture_header (img_request);up_read (&rbd_dev->header_rwsem); -if (offset + length > mapping_size) { -rbd_warn (rbd_dev,"beyond EOD (%llu~%llu > %llu)" , offset, - length, mapping_size); - result = -EIO ; - goto err_img_request; - } -dout ("%s rbd_dev %p img_req %p %s %llu~%llu\n" , __func__, rbd_dev, img_request,obj_op_name (op_type), offset, length);
drivers/hid/hid-ids.h +4 -0
@@ -280,6 +280,7 @@#define USB_DEVICE_ID_CHICONY_ACER_SWITCH12 0x1421#define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA 0xb824#define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA2 0xb82c +#define USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA3 0xb882#define USB_VENDOR_ID_CHUNGHWAT 0x2247#define USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH 0x0001
@@ -396,6 +397,9 @@#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001 0xa001#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C002 0xc002 +#define USB_VENDOR_ID_EDIFIER 0x2d99 +#define USB_DEVICE_ID_EDIFIER_QR30 0xa101/* EDIFIER Hal0 2.0 SE */ +#define USB_VENDOR_ID_ELAN 0x04f3#define USB_DEVICE_ID_TOSHIBA_CLICK_L9W 0x0401#define USB_DEVICE_ID_HP_X2 0x074d
drivers/hid/hid-multitouch.c +1 -0
@@ -349,6 +349,7 @@ static const struct mt_class mt_classes[] = { { .name = MT_CLS_VTL, .quirks = MT_QUIRK_ALWAYS_VALID | MT_QUIRK_CONTACT_CNT_ACCURATE | + MT_QUIRK_STICKY_FINGERS | MT_QUIRK_FORCE_GET_FEATURE, }, { .name = MT_CLS_GOOGLE,
drivers/hid/hid-quirks.c +2 -0
@@ -81,6 +81,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER), HID_QUIRK_MULTI_INPUT | HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_EDIFIER, USB_DEVICE_ID_EDIFIER_QR30), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_ELAN, HID_ANY_ID), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700), HID_QUIRK_NOGET }, { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II), HID_QUIRK_MULTI_INPUT },
@@ -738,6 +739,7 @@ static const struct hid_device_id hid_ignore_list[] = { { HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) }, { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA) }, { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA2) }, + { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_HP_5MP_CAMERA3) }, { HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) }, { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) }, { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI4713) },
drivers/hid/intel-ish-hid/ishtp-hid-client.c +1 -0
@@ -488,6 +488,7 @@ static int ishtp_enum_enum_devices(struct ishtp_cl *hid_ishtp_cl)int rv;/* Send HOSTIF_DM_ENUM_DEVICES */ + client_data->enum_devices_done = false;memset (&msg,0 ,sizeof (struct hostif_msg )); msg.hdr.command =HOSTIF_DM_ENUM_DEVICES ; rv = ishtp_cl_send(hid_ishtp_cl, (unsigned char *)&msg,
drivers/hwmon/occ/common.c +1 -0
@@ -755,6 +755,7 @@ static ssize_t occ_show_extended(struct device *dev,* are dynamically allocated, we cannot use the existing kernel macros which * stringify the name argument. */ +__printf(7, 8) static void occ_init_attribute(struct occ_attribute *attr, int mode, ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf), ssize_t (*store)(struct device *dev, struct device_attribute *attr,
drivers/net/ethernet/cavium/liquidio/lio_main.c +20 -19
@@ -3531,6 +3531,23 @@ static int setup_nic_devices(struct octeon_device *octeon_dev)*/ netdev->netdev_ops = &lionetdevops; + lio =GET_LIO (netdev); + +memset (lio,0 ,sizeof (struct lio )); + + lio->ifidx = ifidx_or_pfnum; + + props = &octeon_dev->props[i]; + props->gmxport = resp->cfg_info.linfo.gmxport; + props->netdev = netdev; + +/* Point to the properties for octeon device to which this +* interface belongs. +*/ + lio->oct_dev = octeon_dev; + lio->octprops = props; + lio->netdev = netdev; + retval =netif_set_real_num_rx_queues (netdev, num_oqueues);if (retval) { dev_err(&octeon_dev->pci_dev->dev,
@@ -3547,16 +3564,6 @@ static int setup_nic_devices(struct octeon_device *octeon_dev) goto setup_nic_dev_free; } - lio =GET_LIO (netdev); - -memset (lio,0 ,sizeof (struct lio )); - - lio->ifidx = ifidx_or_pfnum; - - props = &octeon_dev->props[i]; - props->gmxport = resp->cfg_info.linfo.gmxport; - props->netdev = netdev; - lio->linfo.num_rxpciq = num_oqueues; lio->linfo.num_txpciq = num_iqueues;for (j =0 ; j < num_oqueues; j++) {
@@ -3622,13 +3629,6 @@ static int setup_nic_devices(struct octeon_device *octeon_dev) netdev->min_mtu =LIO_MIN_MTU_SIZE ; netdev->max_mtu =LIO_MAX_MTU_SIZE ; -/* Point to the properties for octeon device to which this -* interface belongs. -*/ - lio->oct_dev = octeon_dev; - lio->octprops = props; - lio->netdev = netdev; -dev_dbg (&octeon_dev->pci_dev->dev,"if%d gmx: %d hw_addr: 0x%llx\n" , i, lio->linfo.gmxport,CVM_CAST64 (lio->linfo.hw_addr));
@@ -3773,6 +3773,7 @@ static int setup_nic_devices(struct octeon_device *octeon_dev) sizeof(struct lio_devlink_priv));if (!devlink) {dev_err (&octeon_dev->pci_dev->dev,"devlink alloc failed\n" ); + i--; goto setup_nic_dev_free; }
@@ -3793,11 +3794,11 @@ static int setup_nic_devices(struct octeon_device *octeon_dev) setup_nic_dev_free: -while (i--) { +do {dev_err (&octeon_dev->pci_dev->dev,"NIC ifidx:%d Setup failed\n" , i);liquidio_destroy_nic_device (octeon_dev, i); - } + }while (i--); setup_nic_dev_done:
drivers/net/ethernet/cavium/liquidio/lio_vf_main.c +2 -2
@@ -2232,11 +2232,11 @@ static int setup_nic_devices(struct octeon_device *octeon_dev) setup_nic_dev_free: -while (i--) { +do {dev_err (&octeon_dev->pci_dev->dev,"NIC ifidx:%d Setup failed\n" , i);liquidio_destroy_nic_device (octeon_dev, i); - } + }while (i--); setup_nic_dev_done:
drivers/net/ethernet/google/gve/gve_ethtool.c +30 -16
79 lines not on this page · raw message
drivers/net/ethernet/google/gve/gve_main.c +2 -2
@@ -124,9 +124,9 @@ static int gve_alloc_stats_report(struct gve_priv *priv)int tx_stats_num, rx_stats_num; tx_stats_num = (GVE_TX_STATS_REPORT_NUM +NIC_TX_STATS_REPORT_NUM ) * - priv->tx_cfg.num_queues; + priv->tx_cfg.max_queues; rx_stats_num = (GVE_RX_STATS_REPORT_NUM +NIC_RX_STATS_REPORT_NUM ) * - priv->rx_cfg.num_queues; + priv->rx_cfg.max_queues; priv->stats_report_len =struct_size (priv->stats_report, stats,size_add (tx_stats_num, rx_stats_num)); priv->stats_report =
drivers/net/macvlan.c +3 -2
@@ -1519,9 +1519,10 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,/* the macvlan port may be freed by macvlan_uninit when fail to register. * so we destroy the macvlan port only when it's valid. */ -if (create &&macvlan_port_get_rtnl (lowerdev)) { +if (macvlan_port_get_rtnl (lowerdev)) {macvlan_flush_sources (port, vlan); -macvlan_port_destroy (port->dev); +if (create) +macvlan_port_destroy (port->dev); }return err; }
drivers/net/usb/sr9700.c +5 -0
@@ -538,6 +538,11 @@ static const struct usb_device_id products[] = { USB_DEVICE(0x0fe6, 0x9700), /* SR9700 device */ .driver_info = (unsigned long)&sr9700_driver_info, }, + { +/* SR9700 with virtual driver CD-ROM - interface 0 is the CD-ROM device */ + USB_DEVICE_INTERFACE_NUMBER(0x0fe6, 0x9702, 1), + .driver_info = (unsigned long)&sr9700_driver_info, + }, {}, /* END */ };
drivers/net/wireless/ti/wlcore/tx.c +5 -0
@@ -210,6 +210,11 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct wl12xx_vif *wlvif, total_blocks =wlcore_hw_calc_tx_blocks (wl, total_len, spare_blocks);if (total_blocks <= wl->tx_blocks_available) { +if (skb_headroom (skb) < (total_len - skb->len) && +pskb_expand_head (skb, (total_len - skb->len),0 ,GFP_ATOMIC )) { +wl1271_free_tx_id (wl, id); +return -EAGAIN ; + } desc =skb_push (skb, total_len - skb->len); wlcore_hw_set_tx_desc_blocks(wl, desc, total_blocks,
drivers/nvme/target/tcp.c +48 -52
217 lines not on this page · raw message
drivers/platform/x86/intel_telemetry_debugfs.c +2 -2
@@ -449,7 +449,7 @@ static int telem_pss_states_show(struct seq_file *s, void *unused)for (index =0 ; index < debugfs_conf->pss_ltr_evts; index++) {seq_printf (s,"%-32s\t%u\n" , debugfs_conf->pss_ltr_data[index].name, - pss_s0ix_wakeup[index]); + pss_ltr_blkd[index]); }seq_puts (s,"\n--------------------------------------\n" );
@@ -459,7 +459,7 @@ static int telem_pss_states_show(struct seq_file *s, void *unused)for (index =0 ; index < debugfs_conf->pss_wakeup_evts; index++) {seq_printf (s,"%-32s\t%u\n" , debugfs_conf->pss_wakeup[index].name, - pss_ltr_blkd[index]); + pss_s0ix_wakeup[index]); }return 0 ;
drivers/platform/x86/intel_telemetry_pltdrv.c +1 -1
@@ -610,7 +610,7 @@ static int telemetry_setup(struct platform_device *pdev)/* Get telemetry Info */ events = (read_buf &TELEM_INFO_SRAMEVTS_MASK ) >>TELEM_INFO_SRAMEVTS_SHIFT ; - event_regs = read_buf &TELEM_INFO_SRAMEVTS_MASK ; + event_regs = read_buf &TELEM_INFO_NENABLES_MASK ;if ((events <TELEM_MAX_EVENTS_SRAM ) || (event_regs <TELEM_MAX_EVENTS_SRAM )) {dev_err (&pdev->dev,"PSS:Insufficient Space for SRAM Trace\n" );
drivers/platform/x86/toshiba_haps.c +1 -1
@@ -185,7 +185,7 @@ static int toshiba_haps_add(struct acpi_device *acpi_dev)pr_info ("Toshiba HDD Active Protection Sensor device\n" ); - haps =kzalloc (sizeof (struct toshiba_haps_dev ),GFP_KERNEL ); + haps =devm_kzalloc (&acpi_dev->dev,sizeof (*haps),GFP_KERNEL );if (!haps)return -ENOMEM ;
drivers/target/iscsi/iscsi_target_util.c +8 -2
@@ -801,8 +801,11 @@ void iscsit_dec_session_usage_count(struct iscsi_session *sess)spin_lock_bh (&sess->session_usage_lock); sess->session_usage_count--; -if (!sess->session_usage_count && sess->session_waiting_on_uc) +if (!sess->session_usage_count && sess->session_waiting_on_uc) { +spin_unlock_bh (&sess->session_usage_lock);complete (&sess->session_waiting_on_uc_comp); +return ; + }spin_unlock_bh (&sess->session_usage_lock); }
@@ -870,8 +873,11 @@ void iscsit_dec_conn_usage_count(struct iscsi_conn *conn)spin_lock_bh (&conn->conn_usage_lock); conn->conn_usage_count--; -if (!conn->conn_usage_count && conn->conn_waiting_on_uc) +if (!conn->conn_usage_count && conn->conn_waiting_on_uc) { +spin_unlock_bh (&conn->conn_usage_lock);complete (&conn->conn_waiting_on_uc_comp); +return ; + }spin_unlock_bh (&conn->conn_usage_lock); }
kernel/trace/ring_buffer.c +2 -0
@@ -2255,6 +2255,8 @@ int ring_buffer_resize(struct trace_buffer *buffer, unsigned long size, list) {list_del_init (&bpage->list);free_buffer_page (bpage); + +cond_resched (); } } out_err_unlock:
kernel/trace/trace.h +5 -2
@@ -56,14 +56,17 @@ enum trace_type {#undef __field_fn#define __field_fn (type, item) type item; +#undef __field_packed +#define __field_packed (type, item) type item; +#undef __field_struct#define __field_struct (type, item) __field(type, item)#undef __field_desc#define __field_desc (type, container, item) -#undef __field_packed -#define __field_packed (type, container, item) +#undef __field_desc_packed +#define __field_desc_packed (type, container, item)#undef __array#define __array (type, item, size) type item[size];
kernel/trace/trace_entries.h +7 -7
@@ -78,8 +78,8 @@ FTRACE_ENTRY_PACKED(funcgraph_entry, ftrace_graph_ent_entry, F_STRUCT( __field_struct( struct ftrace_graph_ent, graph_ent ) - __field_packed( unsigned long, graph_ent, func ) - __field_packed( int, graph_ent, depth ) + __field_desc_packed( unsigned long, graph_ent, func ) + __field_desc_packed( int, graph_ent, depth ) ), F_printk("--> %ps (%d)", (void *)__entry->func, __entry->depth)
@@ -92,11 +92,11 @@ FTRACE_ENTRY_PACKED(funcgraph_exit, ftrace_graph_ret_entry, F_STRUCT( __field_struct( struct ftrace_graph_ret, ret ) - __field_packed( unsigned long, ret, func ) - __field_packed( unsigned long, ret, overrun ) - __field_packed( unsigned long long, ret, calltime) - __field_packed( unsigned long long, ret, rettime ) - __field_packed( int, ret, depth ) + __field_desc_packed( unsigned long, ret, func ) + __field_desc_packed( unsigned long, ret, overrun ) + __field_desc_packed( unsigned long long, ret, calltime) + __field_desc_packed( unsigned long long, ret, rettime ) + __field_desc_packed( int, ret, depth ) ), F_printk("<-- %ps (%d) (start: %llx end: %llx) over: %d",
kernel/trace/trace_export.c +15 -6
@@ -42,11 +42,14 @@ static int ftrace_event_register(struct trace_event_call *call,#undef __field_fn#define __field_fn (type, item) type item; +#undef __field_packed +#define __field_packed (type, item) type item; +#undef __field_desc#define __field_desc (type, container, item) type item; -#undef __field_packed -#define __field_packed (type, container, item) type item; +#undef __field_desc_packed +#define __field_desc_packed (type, container, item) type item;#undef __array#define __array (type, item, size) type item[size];
@@ -101,11 +104,14 @@ static void __always_unused ____ftrace_check_##name(void) \#undef __field_fn#define __field_fn (_type, _item) __field_ext(_type, _item, FILTER_TRACE_FN) +#undef __field_packed +#define __field_packed (_type, _item) __field_ext_packed(_type, _item, FILTER_OTHER) +#undef __field_desc#define __field_desc (_type, _container, _item) __field_ext(_type, _item, FILTER_OTHER) -#undef __field_packed -#define __field_packed (_type, _container, _item) __field_ext_packed(_type, _item, FILTER_OTHER) +#undef __field_desc_packed +#define __field_desc_packed (_type, _container, _item) __field_ext_packed(_type, _item, FILTER_OTHER)#undef __array#define __array (_type, _item, _len) { \
@@ -139,11 +145,14 @@ static struct trace_event_fields ftrace_event_fields_##name[] = { \#undef __field_fn#define __field_fn (type, item) +#undef __field_packed +#define __field_packed (type, item) +#undef __field_desc#define __field_desc (type, container, item) -#undef __field_packed -#define __field_packed (type, container, item) +#undef __field_desc_packed +#define __field_desc_packed (type, container, item)#undef __array#define __array (type, item, len)
net/mac80211/key.c +2 -1
@@ -910,7 +910,8 @@ void ieee80211_reenable_keys(struct ieee80211_sub_if_data *sdata)if (ieee80211_sdata_running (sdata)) {list_for_each_entry (key, &sdata->key_list, list) { -increment_tailroom_need_count (sdata); +if (!(key->flags &KEY_FLAG_TAINTED )) +increment_tailroom_need_count (sdata);ieee80211_key_enable_hw_accel (key); } }
net/mac80211/ocb.c +3 -0
@@ -47,6 +47,9 @@ void ieee80211_ocb_rx_no_sta(struct ieee80211_sub_if_data *sdata,struct sta_info *sta;int band; +if (!ifocb->joined) +return ; +/* XXX: Consider removing the least recently used entry and * allow new one to be added. */
net/mac80211/sta_info.c +4 -3
@@ -1105,6 +1105,10 @@ static void __sta_info_destroy_part2(struct sta_info *sta) } } + sinfo =kzalloc (sizeof (*sinfo),GFP_KERNEL ); +if (sinfo) +sta_set_sinfo (sta, sinfo, true); +if (sta->uploaded) { ret =drv_sta_state (local, sdata, sta,IEEE80211_STA_NONE ,IEEE80211_STA_NOTEXIST );
@@ -1113,9 +1117,6 @@ static void __sta_info_destroy_part2(struct sta_info *sta)sta_dbg (sdata,"Removed STA %pM\n" , sta->sta.addr); - sinfo =kzalloc (sizeof (*sinfo),GFP_KERNEL ); -if (sinfo) -sta_set_sinfo (sta, sinfo, true);cfg80211_del_sta_sinfo (sdata->dev, sta->sta.addr, sinfo,GFP_KERNEL );kfree (sinfo);
net/netfilter/nft_set_pipapo.c +8 -0
@@ -665,6 +665,11 @@ static int pipapo_resize(struct nft_pipapo_field *f, int old_rules, int rules) } mt: +if (rules > (INT_MAX /sizeof (*new_mt))) { +kvfree (new_lt); +return -ENOMEM ; + } + new_mt =kvmalloc (rules *sizeof (*new_mt),GFP_KERNEL );if (!new_mt) {kvfree (new_lt);
@@ -1358,6 +1363,9 @@ static struct nft_pipapo_match *pipapo_clone(struct nft_pipapo_match *old) src->bsize *sizeof (*dst->lt) * src->groups * NFT_PIPAPO_BUCKETS(src->bb)); +if (src->rules > (INT_MAX /sizeof (*src->mt))) + goto out_mt; + dst->mt =kvmalloc (src->rules *sizeof (*src->mt),GFP_KERNEL );if (!dst->mt) goto out_mt;
net/tipc/crypto.c +2 -2
@@ -1223,7 +1223,7 @@ void tipc_crypto_key_flush(struct tipc_crypto *c) rx = c; tx =tipc_net (rx->net)->crypto_tx;if (cancel_delayed_work (&rx->work)) { -kfree (rx->skey); +kfree_sensitive (rx->skey); rx->skey =NULL ;atomic_xchg (&rx->key_distr,0 );tipc_node_put (rx->node);
@@ -2398,7 +2398,7 @@ static void tipc_crypto_work_rx(struct work_struct *work)break ;default :synchronize_rcu (); -kfree (rx->skey); +kfree_sensitive (rx->skey); rx->skey =NULL ;break ; }
net/wireless/util.c +5 -3
@@ -1389,12 +1389,14 @@ static u32 cfg80211_calculate_bitrate_he(struct rate_info *rate) tmp = result; tmp *=SCALE ;do_div (tmp, mcs_divisors[rate->mcs]); - result = tmp;/* and take NSS, DCM into account */ - result = (result * rate->nss) /8 ; + tmp *= rate->nss; +do_div (tmp,8 );if (rate->he_dcm) - result /=2 ; +do_div (tmp,2 ); + + result = tmp;return result /10000 ; }
sound/pci/hda/patch_realtek.c +1 -0
@@ -9270,6 +9270,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x103c ,0x863e ,"HP Spectre x360 15-df1xxx" ,ALC285_FIXUP_HP_SPECTRE_X360_DF1 ),SND_PCI_QUIRK (0x103c ,0x86e8 ,"HP Spectre x360 15-eb0xxx" ,ALC285_FIXUP_HP_SPECTRE_X360_EB1 ),SND_PCI_QUIRK (0x103c ,0x86f9 ,"HP Spectre x360 13-aw0xxx" ,ALC285_FIXUP_HP_SPECTRE_X360_MUTE_LED ), +SND_PCI_QUIRK (0x103c ,0x8706 ,"HP Laptop 15s-eq1xxx" ,ALC236_FIXUP_HP_MUTE_LED_COEFBIT2 ),SND_PCI_QUIRK (0x103c ,0x8716 ,"HP Elite Dragonfly G2 Notebook PC" ,ALC285_FIXUP_HP_GPIO_AMP_INIT ),SND_PCI_QUIRK (0x103c ,0x8720 ,"HP EliteBook x360 1040 G8 Notebook PC" ,ALC285_FIXUP_HP_GPIO_AMP_INIT ), SND_PCI_QUIRK(0x103c, 0x8724, "HP EliteBook 850 G7", ALC285_FIXUP_HP_GPIO_LED),
sound/soc/amd/renoir/acp3x-pdm-dma.c +2 -0
@@ -308,9 +308,11 @@ static int acp_pdm_dma_close(struct snd_soc_component *component, struct snd_pcm_substream *substream) {struct pdm_dev_data *adata =dev_get_drvdata (component->dev); +struct pdm_stream_instance *rtd = substream->runtime->private_data;disable_pdm_interrupts (adata->acp_base); adata->capture_stream =NULL ; +kfree (rtd);return 0 ; }
sound/soc/codecs/tlv320adcx140.c +3 -0
@@ -1096,6 +1096,9 @@ static int adcx140_i2c_probe(struct i2c_client *i2c, adcx140->gpio_reset =devm_gpiod_get_optional (adcx140->dev,"reset" ,GPIOD_OUT_LOW );if (IS_ERR (adcx140->gpio_reset)) +return dev_err_probe (&i2c->dev,PTR_ERR (adcx140->gpio_reset), +"Failed to get Reset GPIO\n" ); +if (!adcx140->gpio_reset)dev_info (&i2c->dev,"Reset GPIO not defined\n" ); adcx140->supply_areg = devm_regulator_get_optional(adcx140->dev,
sound/soc/ti/davinci-evm.c +31 -8
@@ -405,27 +405,32 @@ static int davinci_evm_probe(struct platform_device *pdev)return -EINVAL ; dai->cpus->of_node =of_parse_phandle (np,"ti,mcasp-controller" ,0 ); -if (!dai->cpus->of_node) -return -EINVAL ; +if (!dai->cpus->of_node) { + ret = -EINVAL ; + goto err_put; + } dai->platforms->of_node = dai->cpus->of_node; evm_soc_card.dev = &pdev->dev; ret =snd_soc_of_parse_card_name (&evm_soc_card,"ti,model" );if (ret) -return ret; + goto err_put; mclk =devm_clk_get (&pdev->dev,"mclk" );if (PTR_ERR (mclk) == -EPROBE_DEFER ) { -return -EPROBE_DEFER ; + ret = -EPROBE_DEFER ; + goto err_put; }else if (IS_ERR (mclk)) {dev_dbg (&pdev->dev,"mclk not found.\n" ); mclk =NULL ; } drvdata =devm_kzalloc (&pdev->dev,sizeof (*drvdata),GFP_KERNEL ); -if (!drvdata) -return -ENOMEM ; +if (!drvdata) { + ret = -ENOMEM ; + goto err_put; + } drvdata->mclk = mclk;
@@ -435,7 +440,8 @@ static int davinci_evm_probe(struct platform_device *pdev)if (!drvdata->mclk) {dev_err (&pdev->dev,"No clock or clock rate defined.\n" ); -return -EINVAL ; + ret = -EINVAL ; + goto err_put; } drvdata->sysclk =clk_get_rate (drvdata->mclk); }else if (drvdata->mclk) {
@@ -451,8 +457,25 @@ static int davinci_evm_probe(struct platform_device *pdev)snd_soc_card_set_drvdata (&evm_soc_card, drvdata); ret =devm_snd_soc_register_card (&pdev->dev, &evm_soc_card); -if (ret) +if (ret) {dev_err (&pdev->dev,"snd_soc_register_card failed (%d)\n" , ret); + goto err_put; + } + +return ret; + +err_put: + dai->platforms->of_node =NULL ; + +if (dai->cpus->of_node) { +of_node_put (dai->cpus->of_node); + dai->cpus->of_node =NULL ; + } + +if (dai->codecs->of_node) { +of_node_put (dai->codecs->of_node); + dai->codecs->of_node =NULL ; + }return ret; }
virt/kvm/eventfd.c +14 -20
@@ -147,21 +147,18 @@ irqfd_shutdown(struct work_struct *work) } -/* assumes kvm->irqfds.lock is held */ -static bool -irqfd_is_active (struct kvm_kernel_irqfd *irqfd) +static bool irqfd_is_active (struct kvm_kernel_irqfd *irqfd) {return list_empty (&irqfd->list) ? false : true; }/* * Mark the irqfd as inactive and schedule it for removal -* -* assumes kvm->irqfds.lock is held */ -static void -irqfd_deactivate (struct kvm_kernel_irqfd *irqfd) +static void irqfd_deactivate (struct kvm_kernel_irqfd *irqfd) { +lockdep_assert_held (&irqfd->kvm->irqfds.lock); +BUG_ON (!irqfd_is_active (irqfd));list_del_init (&irqfd->list);
@@ -198,8 +195,15 @@ irqfd_wakeup(wait_queue_entry_t *wait, unsigned mode, int sync, void *key) seq =read_seqcount_begin (&irqfd->irq_entry_sc); irq = irqfd->irq_entry; }while (read_seqcount_retry (&irqfd->irq_entry_sc, seq)); -/* An event has been signaled, inject an interrupt */ -if (kvm_arch_set_irq_inatomic (&irq, kvm, + +/* +* An event has been signaled, inject an interrupt unless the +* irqfd is being deassigned (isn't active), in which case the +* routing information may be stale (once the irqfd is removed +* from the list, it will stop receiving routing updates). +*/ +if (unlikely (!irqfd_is_active (irqfd)) || +kvm_arch_set_irq_inatomic (&irq, kvm,KVM_USERSPACE_IRQ_SOURCE_ID ,1 , false) == -EWOULDBLOCK )schedule_work (&irqfd->inject);
@@ -536,18 +540,8 @@ kvm_irqfd_deassign(struct kvm *kvm, struct kvm_irqfd *args)spin_lock_irq (&kvm->irqfds.lock);list_for_each_entry_safe (irqfd, tmp, &kvm->irqfds.items, list) { -if (irqfd->eventfd == eventfd && irqfd->gsi == args->gsi) { -/* -* This clearing of irq_entry.type is needed for when -* another thread calls kvm_irq_routing_update before -* we flush workqueue below (we synchronize with -* kvm_irq_routing_update using irqfds.lock). -*/ -write_seqcount_begin (&irqfd->irq_entry_sc); - irqfd->irq_entry.type =0 ; -write_seqcount_end (&irqfd->irq_entry_sc); +if (irqfd->eventfd == eventfd && irqfd->gsi == args->gsi)irqfd_deactivate (irqfd); - } }spin_unlock_irq (&kvm->irqfds.lock);