Linux 6.16.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.16.11 kernel.
All users of the 6.16 kernel series must upgrade.
The updated 6.16.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.16.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 block/blk-mq-tag.c | 1 drivers/media/i2c/tc358743.c | 4 - drivers/media/pci/b2c2/flexcop-pci.c | 2 drivers/media/platform/qcom/iris/iris_buffer.c | 10 +++ drivers/media/platform/st/stm32/stm32-csi.c | 4 - drivers/media/rc/imon.c | 27 ++++++--- drivers/media/tuners/xc5000.c | 2 drivers/media/usb/uvc/uvc_driver.c | 73 +++++++++++++++---------- drivers/media/usb/uvc/uvcvideo.h | 2 drivers/net/wireless/ath/ath11k/qmi.c | 2 drivers/target/target_core_configfs.c | 2 mm/swapfile.c | 3 + scripts/gcc-plugins/gcc-common.h | 7 ++ sound/soc/qcom/qdsp6/topology.c | 4 - sound/usb/midi.c | 9 +-- 16 files changed, 104 insertions(+), 50 deletions(-)
Chandra Mohan Sundar (1):
media: stm32-csi: Fix dereference before NULL check
Charan Teja Kalla (1):
mm: swap: check for stable address space before operating on the VMA
Dikshita Agarwal (1):
media: iris: Fix memory leak by freeing untracked persist buffer
Duoming Zhou (3):
media: b2c2: Fix use-after-free causing by irq_check_work in flexcop_pci_remove
media: i2c: tc358743: Fix use-after-free bugs caused by orphan timer in probe
media: tuner: xc5000: Fix use-after-free in xc5000_release
Greg Kroah-Hartman (1):
Linux 6.16.11
Jeongjun Park (1):
ALSA: usb-audio: fix race condition to UAF in snd_usbmidi_free
Kees Cook (1):
gcc-plugins: Remove TODO_verify_il for GCC >= 16
Larshin Sergey (1):
media: rc: fix races with imon_disconnect()
Matvey Kovalev (1):
wifi: ath11k: fix NULL dereference in ath11k_qmi_m3_load()
Srinivas Kandagatla (1):
ASoC: qcom: audioreach: fix potential null pointer dereference
Thadeu Lima de Souza Cascardo (1):
media: uvcvideo: Mark invalid entities with id UVC_INVALID_ENTITY_ID
Wang Haoran (1):
scsi: target: target_core_configfs: Add length check to avoid buffer overflow
Yu Kuai (1):
blk-mq: fix blk_mq_tags double free while nr_requests grown
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 16 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Baby Opossum Posse
block/blk-mq-tag.c +1 -0
@@ -622,6 +622,7 @@ int blk_mq_tag_update_depth(struct blk_mq_hw_ctx *hctx,return -ENOMEM ;blk_mq_free_map_and_rqs (set, *tagsptr, hctx->queue_num); + hctx->queue->elevator->et->tags[hctx->queue_num] = new; *tagsptr = new; }else {/*
drivers/media/i2c/tc358743.c +2 -2
@@ -2225,10 +2225,10 @@ static int tc358743_probe(struct i2c_client *client) err_work_queues:cec_unregister_adapter (state->cec_adap);if (!state->i2c_client->irq) { -timer_delete (&state->timer); +timer_delete_sync (&state->timer);flush_work (&state->work_i2c_poll); } -cancel_delayed_work (&state->delayed_work_enable_hotplug); +cancel_delayed_work_sync (&state->delayed_work_enable_hotplug);mutex_destroy (&state->confctl_mutex); err_hdl:media_entity_cleanup (&sd->entity);
drivers/media/pci/b2c2/flexcop-pci.c +1 -1
@@ -411,7 +411,7 @@ static void flexcop_pci_remove(struct pci_dev *pdev)struct flexcop_pci *fc_pci =pci_get_drvdata (pdev);if (irq_chk_intv >0 ) -cancel_delayed_work (&fc_pci->irq_check_work); +cancel_delayed_work_sync (&fc_pci->irq_check_work);flexcop_pci_dma_exit (fc_pci);flexcop_device_exit (fc_pci->fc_dev);
drivers/media/platform/qcom/iris/iris_buffer.c +10 -0
@@ -410,6 +410,16 @@ static int iris_destroy_internal_buffers(struct iris_inst *inst, u32 plane, bool } } +if (force) { + buffers = &inst->buffers[BUF_PERSIST ]; + +list_for_each_entry_safe (buf, next, &buffers->list, list) { + ret =iris_destroy_internal_buffer (inst, buf); +if (ret) +return ret; + } + } +return 0 ; }
drivers/media/platform/st/stm32/stm32-csi.c +2 -2
@@ -443,8 +443,7 @@ static void stm32_csi_phy_reg_write(struct stm32_csi_dev *csidev,static int stm32_csi_start (struct stm32_csi_dev *csidev,struct v4l2_subdev_state *state) { -struct media_pad *src_pad = - &csidev->s_subdev->entity.pads[csidev->s_subdev_pad_nb]; +struct media_pad *src_pad;const struct stm32_csi_mbps_phy_reg *phy_regs =NULL ;struct v4l2_mbus_framefmt *sink_fmt;const struct stm32_csi_fmts *fmt;
@@ -466,6 +465,7 @@ static int stm32_csi_start(struct stm32_csi_dev *csidev,if (!csidev->s_subdev)return -EIO ; + src_pad = &csidev->s_subdev->entity.pads[csidev->s_subdev_pad_nb]; link_freq =v4l2_get_link_freq (src_pad, fmt->bpp,2 * csidev->num_lanes);if (link_freq <0 )
drivers/media/rc/imon.c +20 -7
@@ -536,7 +536,9 @@ static int display_open(struct inode *inode, struct file *file)mutex_lock (&ictx->lock); -if (!ictx->display_supported) { +if (ictx->disconnected) { + retval = -ENODEV ; + }else if (!ictx->display_supported) {pr_err ("display not supported by device\n" ); retval = -ENODEV ; }else if (ictx->display_isopen) {
@@ -598,6 +600,9 @@ static int send_packet(struct imon_context *ictx)int retval =0 ;struct usb_ctrlrequest *control_req =NULL ; +if (ictx->disconnected) +return -ENODEV ; +/* Check if we need to use control or interrupt urb */ if (!ictx->tx_control) { pipe = usb_sndintpipe(ictx->usbdev_intf0,
@@ -949,12 +954,14 @@ static ssize_t vfd_write(struct file *file, const char __user *buf,static const unsigned char vfd_packet6[] = {0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFF ,0xFF }; -if (ictx->disconnected) -return -ENODEV ; -if (mutex_lock_interruptible (&ictx->lock))return -ERESTARTSYS ; +if (ictx->disconnected) { + retval = -ENODEV ; + goto exit; + } +if (!ictx->dev_present_intf0) {pr_err_ratelimited ("no iMON device present\n" ); retval = -ENODEV ;
@@ -1029,11 +1036,13 @@ static ssize_t lcd_write(struct file *file, const char __user *buf,int retval =0 ;struct imon_context *ictx = file->private_data; -if (ictx->disconnected) -return -ENODEV ; -mutex_lock (&ictx->lock); +if (ictx->disconnected) { + retval = -ENODEV ; + goto exit; + } +if (!ictx->display_supported) {pr_err_ratelimited ("no iMON display present\n" ); retval = -ENODEV ;
@@ -2499,7 +2508,11 @@ static void imon_disconnect(struct usb_interface *interface)int ifnum; ictx =usb_get_intfdata (interface); + +mutex_lock (&ictx->lock); ictx->disconnected = true; +mutex_unlock (&ictx->lock); + dev = ictx->dev; ifnum = interface->cur_altsetting->desc.bInterfaceNumber;
drivers/media/tuners/xc5000.c +1 -1
@@ -1304,7 +1304,7 @@ static void xc5000_release(struct dvb_frontend *fe)mutex_lock (&xc5000_list_mutex);if (priv) { -cancel_delayed_work (&priv->timer_sleep); +cancel_delayed_work_sync (&priv->timer_sleep);hybrid_tuner_release_state (priv); }
drivers/media/usb/uvc/uvc_driver.c +46 -27
139 lines not on this page · raw message
drivers/media/usb/uvc/uvcvideo.h +2 -0
@@ -41,6 +41,8 @@#define UVC_EXT_GPIO_UNIT 0x7ffe#define UVC_EXT_GPIO_UNIT_ID 0x100 +#define UVC_INVALID_ENTITY_ID 0xffff +/* ------------------------------------------------------------------------ * Driver specific constants. */
drivers/net/wireless/ath/ath11k/qmi.c +1 -1
@@ -2555,7 +2555,7 @@ static int ath11k_qmi_m3_load(struct ath11k_base *ab) GFP_KERNEL);if (!m3_mem->vaddr) {ath11k_err (ab,"failed to allocate memory for M3 with size %zu\n" , - fw->size); + m3_len); ret = -ENOMEM ; goto out; }
drivers/target/target_core_configfs.c +1 -1
@@ -2774,7 +2774,7 @@ static ssize_t target_lu_gp_members_show(struct config_item *item, char *page) config_item_name(&dev->dev_group.cg_item)); cur_len++;/* Extra byte for NULL terminator */ -if ((cur_len + len) >PAGE_SIZE ) { +if ((cur_len + len) >PAGE_SIZE || cur_len >LU_GROUP_NAME_BUF ) {pr_warn ("Ran out of lu_gp_show_attr" "_members buffer\n" );break ;
mm/swapfile.c +3 -0
@@ -2244,6 +2244,8 @@ static int unuse_mm(struct mm_struct *mm, unsigned int type)VMA_ITERATOR (vmi, mm,0 );mmap_read_lock (mm); +if (check_stable_address_space (mm)) + goto unlock;for_each_vma (vmi, vma) {if (vma->anon_vma && !is_vm_hugetlb_page (vma)) { ret =unuse_vma (vma, type);
@@ -2253,6 +2255,7 @@ static int unuse_mm(struct mm_struct *mm, unsigned int type)cond_resched (); } +unlock:mmap_read_unlock (mm);return ret; }
scripts/gcc-plugins/gcc-common.h +7 -0
@@ -173,10 +173,17 @@ static inline opt_pass *get_pass_for_id(int id)return g->get_passes ()->get_pass_for_id (id); } +#if BUILDING_GCC_VERSION <16000 #define TODO_verify_ssa TODO_verify_il#define TODO_verify_flow TODO_verify_il#define TODO_verify_stmts TODO_verify_il#define TODO_verify_rtl_sharing TODO_verify_il +#else +#define TODO_verify_ssa 0 +#define TODO_verify_flow 0 +#define TODO_verify_stmts 0 +#define TODO_verify_rtl_sharing 0 +#endif #define INSN_DELETED_P (insn) (insn)->deleted()
sound/soc/qcom/qdsp6/topology.c +2 -2
@@ -587,8 +587,8 @@ static int audioreach_widget_load_module_common(struct snd_soc_component *componreturn PTR_ERR (cont); mod =audioreach_parse_common_tokens (apm, cont, &tplg_w->priv, w); -if (IS_ERR (mod)) -return PTR_ERR (mod); +if (IS_ERR_OR_NULL (mod)) +return mod ?PTR_ERR (mod) : -ENODEV ; dobj = &w->dobj; dobj->private = mod;
sound/usb/midi.c +4 -5
@@ -1522,15 +1522,14 @@ static void snd_usbmidi_free(struct snd_usb_midi *umidi) {int i; +if (!umidi->disconnected) +snd_usbmidi_disconnect (&umidi->list); +for (i =0 ; i <MIDI_MAX_ENDPOINTS ; ++i) {struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i]; -if (ep->out) -snd_usbmidi_out_endpoint_delete (ep->out); -if (ep->in) -snd_usbmidi_in_endpoint_delete (ep->in); +kfree (ep->out); }mutex_destroy (&umidi->mutex); -timer_shutdown_sync (&umidi->error_timer);kfree (umidi); }