Linux 5.10.92
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.92 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/boot/dts/exynos4210-i9100.dts | 2 drivers/bluetooth/bfusb.c | 3 drivers/bluetooth/btusb.c | 22 +++++ drivers/char/random.c | 117 ++++++++++++++++++------------- drivers/gpu/drm/i915/intel_pm.c | 6 - drivers/md/md.c | 57 +++------------ drivers/md/md.h | 1 drivers/media/usb/uvc/uvc_driver.c | 7 - drivers/mfd/intel-lpss-acpi.c | 7 + drivers/mmc/host/sdhci-pci-core.c | 1 drivers/mmc/host/sdhci-pci.h | 1 drivers/net/can/usb/gs_usb.c | 5 + drivers/net/veth.c | 1 drivers/net/wireless/ath/ath11k/wmi.c | 6 - drivers/staging/greybus/audio_topology.c | 92 +++++++++++------------- drivers/staging/wlan-ng/hfa384x_usb.c | 22 ++--- drivers/usb/core/hcd.c | 9 ++ drivers/usb/core/hub.c | 2 kernel/bpf/verifier.c | 6 - kernel/workqueue.c | 9 ++ net/can/isotp.c | 4 - 22 files changed, 206 insertions(+), 176 deletions(-)
Aaron Ma (2):
Bluetooth: btusb: Add support for Foxconn MT7922A
Bluetooth: btusb: Add support for Foxconn QCA 0xe0d0
Adrian Hunter (1):
mmc: sdhci-pci: Add PCI ID for Intel ADL
Alan Stern (2):
USB: core: Fix bug in resuming hub's handling of wakeup requests
USB: Fix "slab-out-of-bounds Write" bug in usb_hcd_poll_rh_status
Andy Shevchenko (1):
mfd: intel-lpss: Fix too early PM enablement in the ACPI ->probe()
Arnd Bergmann (1):
staging: greybus: fix stack size warning with UBSAN
Brian Silverman (1):
can: gs_usb: gs_can_start_xmit(): zero-initialize hf->{flags,reserved}Daniel Borkmann (2):
bpf: Fix out of bounds access from invalid *_or_null type verification
veth: Do not record rx queue hint in veth_xmit
Dominik Brodowski (1):
random: fix crash on multiple early calls to add_bootloader_randomness()
Eric Biggers (2):
random: fix data race on crng_node_pool
random: fix data race on crng init time
Frederic Weisbecker (1):
workqueue: Fix unbind_workers() VS wq_worker_running() race
Greg Kroah-Hartman (1):
Linux 5.10.92
Guoqing Jiang (1):
md: revert io stats accounting
Johan Hovold (1):
Bluetooth: bfusb: fix division by zero in send path
Marc Kleine-Budde (2):
can: gs_usb: fix use of uninitialized variable, detach device on reception of invalid USB data
can: isotp: convert struct tpcon::{idx,len} to unsigned int
Mark-YW.Chen (1):
Bluetooth: btusb: fix memory leak in btusb_mtk_submit_wmt_recv_urb()
Nathan Chancellor (2):
staging: wlan-ng: Avoid bitwise vs logical OR warning in hfa384x_usb_throttlefn() drm/i915: Avoid bitwise vs logical OR warning in snb_wm_latency_quirk()
Paul Cercueil (1):
ARM: dts: exynos: Fix BCM4330 Bluetooth reset polarity in I9100
Ricardo Ribalda (1):
media: Revert "media: uvcvideo: Set unique vdev name based in type"
Sven Eckelmann (1):
ath11k: Fix buffer overflow when scanning with extraie
Zijun Hu (1):
Bluetooth: btusb: Add two more Bluetooth parts for WCN6855
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 91 +SUBLEVEL = 92 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/exynos4210-i9100.dts +1 -1
@@ -765,7 +765,7 @@ bluetooth { compatible = "brcm,bcm4330-bt"; shutdown-gpios = <&gpl0 4 GPIO_ACTIVE_HIGH>; - reset-gpios = <&gpl1 0 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpl1 0 GPIO_ACTIVE_LOW>; device-wakeup-gpios = <&gpx3 1 GPIO_ACTIVE_HIGH>; host-wakeup-gpios = <&gpx2 6 GPIO_ACTIVE_HIGH>; };
drivers/bluetooth/bfusb.c +3 -0
@@ -628,6 +628,9 @@ static int bfusb_probe(struct usb_interface *intf, const struct usb_device_id *i data->bulk_out_ep = bulk_out_ep->desc.bEndpointAddress; data->bulk_pkt_size =le16_to_cpu (bulk_out_ep->desc.wMaxPacketSize); +if (!data->bulk_pkt_size) + goto done; +rwlock_init (&data->lock); data->reassembly =NULL ;
drivers/bluetooth/btusb.c +22 -0
@@ -379,6 +379,15 @@ static const struct usb_device_id blacklist_table[] = { { USB_DEVICE(0x8087, 0x0aaa), .driver_info = BTUSB_INTEL_NEW |BTUSB_WIDEBAND_SPEECH | BTUSB_VALID_LE_STATES }, + { USB_DEVICE(0x10ab, 0x9309), .driver_info = BTUSB_QCA_WCN6855 | +BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES }, + { USB_DEVICE(0x10ab, 0x9409), .driver_info = BTUSB_QCA_WCN6855 | +BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES }, + { USB_DEVICE(0x0489, 0xe0d0), .driver_info = BTUSB_QCA_WCN6855 | +BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES },/* Other Intel Bluetooth devices */ { USB_VENDOR_AND_INTERFACE_INFO(0x8087, 0xe0, 0x01, 0x01),
@@ -400,6 +409,14 @@ static const struct usb_device_id blacklist_table[] = { BTUSB_WIDEBAND_SPEECH | BTUSB_VALID_LE_STATES }, +/* MediaTek MT7922A Bluetooth devices */ + { USB_DEVICE(0x0489, 0xe0d8), .driver_info = BTUSB_MEDIATEK | +BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES }, + { USB_DEVICE(0x0489, 0xe0d9), .driver_info = BTUSB_MEDIATEK | +BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES }, + /* Additional Realtek 8723AE Bluetooth devices */ { USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK }, { USB_DEVICE(0x13d3, 0x3394), .driver_info = BTUSB_REALTEK },
@@ -2845,6 +2862,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb) skb =bt_skb_alloc (HCI_WMT_MAX_EVENT_SIZE ,GFP_ATOMIC );if (!skb) { hdev->stat.err_rx++; +kfree (urb->setup_packet);return ; }
@@ -2865,6 +2883,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb) data->evt_skb =skb_clone (skb,GFP_ATOMIC );if (!data->evt_skb) {kfree_skb (skb); +kfree (urb->setup_packet);return ; } }
@@ -2873,6 +2892,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)if (err <0 ) {kfree_skb (data->evt_skb); data->evt_skb =NULL ; +kfree (urb->setup_packet);return ; }
@@ -2883,6 +2903,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)wake_up_bit (&data->flags,BTUSB_TX_WAIT_VND_EVT ); } +kfree (urb->setup_packet);return ; }else if (urb->status == -ENOENT ) {/* Avoid suspend failed when usb_kill_urb */
@@ -2903,6 +2924,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)usb_anchor_urb (urb, &data->ctrl_anchor); err =usb_submit_urb (urb,GFP_ATOMIC );if (err <0 ) { +kfree (urb->setup_packet);/* -EPERM: urb is being killed; * -ENODEV: device got disconnected */
drivers/char/random.c +69 -48
185 lines not on this page · raw message
drivers/gpu/drm/i915/intel_pm.c +3 -3
@@ -3044,9 +3044,9 @@ static void snb_wm_latency_quirk(struct drm_i915_private *dev_priv)* The BIOS provided WM memory latency values are often * inadequate for high resolution displays. Adjust them. */ - changed =ilk_increase_wm_latency (dev_priv, dev_priv->wm.pri_latency,12 ) | -ilk_increase_wm_latency (dev_priv, dev_priv->wm.spr_latency,12 ) | -ilk_increase_wm_latency (dev_priv, dev_priv->wm.cur_latency,12 ); + changed =ilk_increase_wm_latency (dev_priv, dev_priv->wm.pri_latency,12 ); + changed |=ilk_increase_wm_latency (dev_priv, dev_priv->wm.spr_latency,12 ); + changed |=ilk_increase_wm_latency (dev_priv, dev_priv->wm.cur_latency,12 );if (!changed)return ;
drivers/md/md.c +12 -45
90 lines not on this page · raw message
drivers/md/md.h +0 -1
@@ -487,7 +487,6 @@ struct mddev {struct bio_set sync_set;/* for sync operations like * metadata and bitmap writes */ -mempool_t md_io_pool;/* Generic flush handling. * The last to finish preflush schedules a worker to submit
drivers/media/usb/uvc/uvc_driver.c +1 -6
@@ -2065,7 +2065,6 @@ int uvc_register_video_device(struct uvc_device *dev,const struct v4l2_file_operations *fops, const struct v4l2_ioctl_ops *ioctl_ops) { - const char *name; int ret;/* Initialize the video buffers queue. */
@@ -2094,20 +2093,16 @@ int uvc_register_video_device(struct uvc_device *dev,case V4L2_BUF_TYPE_VIDEO_CAPTURE :default : vdev->device_caps =V4L2_CAP_VIDEO_CAPTURE |V4L2_CAP_STREAMING ; - name ="Video Capture" ;break ;case V4L2_BUF_TYPE_VIDEO_OUTPUT : vdev->device_caps =V4L2_CAP_VIDEO_OUTPUT |V4L2_CAP_STREAMING ; - name ="Video Output" ;break ;case V4L2_BUF_TYPE_META_CAPTURE : vdev->device_caps =V4L2_CAP_META_CAPTURE |V4L2_CAP_STREAMING ; - name ="Metadata" ;break ; } -snprintf (vdev->name,sizeof (vdev->name),"%s %u" , name, - stream->header.bTerminalLink); +strscpy (vdev->name, dev->name,sizeof (vdev->name));/* * Set the driver data before calling video_register_device, otherwise
drivers/mfd/intel-lpss-acpi.c +6 -1
@@ -102,6 +102,7 @@ static int intel_lpss_acpi_probe(struct platform_device *pdev) {struct intel_lpss_platform_info *info;const struct acpi_device_id *id; +int ret; id =acpi_match_device (intel_lpss_acpi_ids, &pdev->dev);if (!id)
@@ -115,10 +116,14 @@ static int intel_lpss_acpi_probe(struct platform_device *pdev) info->mem =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); info->irq =platform_get_irq (pdev,0 ); + ret =intel_lpss_probe (&pdev->dev, info); +if (ret) +return ret; +pm_runtime_set_active (&pdev->dev);pm_runtime_enable (&pdev->dev); -return intel_lpss_probe (&pdev->dev, info); +return 0 ; }static int intel_lpss_acpi_remove (struct platform_device *pdev)
drivers/mmc/host/sdhci-pci-core.c +1 -0
@@ -1932,6 +1932,7 @@ static const struct pci_device_id pci_ids[] = {SDHCI_PCI_DEVICE (INTEL ,JSL_SD , intel_byt_sd),SDHCI_PCI_DEVICE (INTEL ,LKF_EMMC , intel_glk_emmc),SDHCI_PCI_DEVICE (INTEL ,LKF_SD , intel_byt_sd), +SDHCI_PCI_DEVICE (INTEL ,ADL_EMMC , intel_glk_emmc),SDHCI_PCI_DEVICE (O2 ,8120 , o2),SDHCI_PCI_DEVICE (O2 ,8220 , o2), SDHCI_PCI_DEVICE(O2, 8221, o2),
drivers/mmc/host/sdhci-pci.h +1 -0
@@ -59,6 +59,7 @@#define PCI_DEVICE_ID_INTEL_JSL_SD 0x4df8#define PCI_DEVICE_ID_INTEL_LKF_EMMC 0x98c4#define PCI_DEVICE_ID_INTEL_LKF_SD 0x98f8 +#define PCI_DEVICE_ID_INTEL_ADL_EMMC 0x54c4#define PCI_DEVICE_ID_SYSKONNECT_8000 0x8000#define PCI_DEVICE_ID_VIA_95D0 0x95d0
drivers/net/can/usb/gs_usb.c +4 -1
@@ -320,7 +320,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)/* device reports out of range channel id */ if (hf->channel >=GS_MAX_INTF ) - goto resubmit_urb; + goto device_detach; dev = usbcan->canch[hf->channel];
@@ -405,6 +405,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)/* USB failure take down all interfaces */ if (rc == -ENODEV ) { + device_detach:for (rc =0 ; rc <GS_MAX_INTF ; rc++) {if (usbcan->canch[rc])netif_device_detach (usbcan->canch[rc]->netdev);
@@ -506,6 +507,8 @@ static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb, hf->echo_id = idx; hf->channel = dev->channel; + hf->flags =0 ; + hf->reserved =0 ; cf = (struct can_frame *)skb->data;
drivers/net/veth.c +0 -1
@@ -301,7 +301,6 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)if (rxq < rcv->real_num_rx_queues) { rq = &rcv_priv->rq[rxq]; rcv_xdp =rcu_access_pointer (rq->xdp_prog); -skb_record_rx_queue (skb, rxq); }skb_tx_timestamp (skb);
drivers/net/wireless/ath/ath11k/wmi.c +3 -3
@@ -2036,7 +2036,7 @@ int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar,void *ptr;int i, ret, len;u32 *tmp_ptr; -u8 extraie_len_with_pad =0 ; +u16 extraie_len_with_pad =0 ;struct hint_short_ssid *s_ssid =NULL ;struct hint_bssid *hint_bssid =NULL ;
@@ -2055,7 +2055,7 @@ int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar, len +=sizeof (*bssid) * params->num_bssid; len +=TLV_HDR_SIZE ; -if (params->extraie.len) +if (params->extraie.len && params->extraie.len <=0xFFFF ) extraie_len_with_pad =roundup (params->extraie.len,sizeof (u32)); len += extraie_len_with_pad;
@@ -2162,7 +2162,7 @@ int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar,FIELD_PREP (WMI_TLV_LEN , len); ptr +=TLV_HDR_SIZE ; -if (params->extraie.len) +if (extraie_len_with_pad)memcpy (ptr, params->extraie.ptr, params->extraie.len);
drivers/staging/greybus/audio_topology.c +45 -47
128 lines not on this page · raw message
drivers/staging/wlan-ng/hfa384x_usb.c +11 -11
@@ -3779,18 +3779,18 @@ static void hfa384x_usb_throttlefn(struct timer_list *t)spin_lock_irqsave (&hw->ctlxq.lock, flags); -/* -* We need to check BOTH the RX and the TX throttle controls, -* so we use the bitwise OR instead of the logical OR. -*/ pr_debug ("flags=0x%lx\n" , hw->usb_flags); -if (!hw->wlandev->hwremoved && - ((test_and_clear_bit (THROTTLE_RX , &hw->usb_flags) && - !test_and_set_bit (WORK_RX_RESUME , &hw->usb_flags)) | - (test_and_clear_bit (THROTTLE_TX , &hw->usb_flags) && - !test_and_set_bit (WORK_TX_RESUME , &hw->usb_flags)) - )) { -schedule_work (&hw->usb_work); +if (!hw->wlandev->hwremoved) { +bool rx_throttle =test_and_clear_bit (THROTTLE_RX , &hw->usb_flags) && + !test_and_set_bit (WORK_RX_RESUME , &hw->usb_flags); +bool tx_throttle =test_and_clear_bit (THROTTLE_TX , &hw->usb_flags) && + !test_and_set_bit (WORK_TX_RESUME , &hw->usb_flags); +/* +* We need to check BOTH the RX and the TX throttle controls, +* so we use the bitwise OR instead of the logical OR. +*/ +if (rx_throttle | tx_throttle) +schedule_work (&hw->usb_work); }spin_unlock_irqrestore (&hw->ctlxq.lock, flags);
drivers/usb/core/hcd.c +8 -1
@@ -754,6 +754,7 @@ void usb_hcd_poll_rh_status(struct usb_hcd *hcd) {struct urb *urb;int length; +int status;unsigned long flags;char buffer[6 ];/* Any root hubs with > 31 ports? */
@@ -771,11 +772,17 @@ void usb_hcd_poll_rh_status(struct usb_hcd *hcd)if (urb) {clear_bit (HCD_FLAG_POLL_PENDING , &hcd->flags); hcd->status_urb =NULL ; +if (urb->transfer_buffer_length >= length) { + status =0 ; + }else { + status = -EOVERFLOW ; + length = urb->transfer_buffer_length; + } urb->actual_length = length;memcpy (urb->transfer_buffer, buffer, length);usb_hcd_unlink_urb_from_ep (hcd, urb); -usb_hcd_giveback_urb (hcd, urb,0 ); +usb_hcd_giveback_urb (hcd, urb, status); }else { length =0 ;set_bit (HCD_FLAG_POLL_PENDING , &hcd->flags);
drivers/usb/core/hub.c +1 -1
@@ -1224,7 +1224,7 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)*/ if (portchange || (hub_is_superspeed (hub->hdev) && port_resumed)) -set_bit (port1, hub->change_bits); +set_bit (port1, hub->event_bits); }else if (udev->persist_enabled) {#ifdef CONFIG_PM
kernel/bpf/verifier.c +3 -3
@@ -6037,16 +6037,16 @@ static int adjust_ptr_min_max_vals(struct bpf_verifier_env *env, fallthrough;case PTR_TO_PACKET_END :case PTR_TO_SOCKET : -case PTR_TO_SOCKET_OR_NULL :case PTR_TO_SOCK_COMMON : -case PTR_TO_SOCK_COMMON_OR_NULL :case PTR_TO_TCP_SOCK : -case PTR_TO_TCP_SOCK_OR_NULL :case PTR_TO_XDP_SOCK : +reject:verbose (env,"R%d pointer arithmetic on %s prohibited\n" , dst, reg_type_str[ptr_reg->type]);return -EACCES ;default : +if (reg_type_may_be_null (ptr_reg->type)) + goto reject;break ; }
kernel/workqueue.c +9 -0
@@ -850,8 +850,17 @@ void wq_worker_running(struct task_struct *task)if (!worker->sleeping)return ; + +/* +* If preempted by unbind_workers() between the WORKER_NOT_RUNNING check +* and the nr_running increment below, we may ruin the nr_running reset +* and leave with an unexpected pool->nr_running == 1 on the newly unbound +* pool. Protect against such race. +*/ +preempt_disable ();if (!(worker->flags &WORKER_NOT_RUNNING ))atomic_inc (&worker->pool->nr_running); +preempt_enable (); worker->sleeping =0 ; }
net/can/isotp.c +2 -2
@@ -119,8 +119,8 @@ enum { };struct tpcon { -int idx; -int len; +unsigned int idx; +unsigned int len;u32 state;u8 bs;u8 sn;