commit:     f8c5a72e91e1e6f4e9449798dcbf6ea0aaf47357
Author:     Arisu Tachibana <alicef <AT> gentoo <DOT> org>
AuthorDate: Mon Oct  6 11:07:09 2025 +0000
Commit:     Arisu Tachibana <alicef <AT> gentoo <DOT> org>
CommitDate: Mon Oct  6 11:07:09 2025 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=f8c5a72e

Linux patch 6.6.110

Signed-off-by: Arisu Tachibana <alicef <AT> gentoo.org>

 0000_README              |   4 +
 1109_linux-6.6.110.patch | 327 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 331 insertions(+)

diff --git a/0000_README b/0000_README
index bb7a0367..1f95f7bf 100644
--- a/0000_README
+++ b/0000_README
@@ -479,6 +479,10 @@ Patch:  1108_linux-6.6.109.patch
 From:   https://www.kernel.org
 Desc:   Linux 6.6.109
 
+Patch:  1109_linux-6.6.110.patch
+From:   https://www.kernel.org
+Desc:   Linux 6.6.110
+
 Patch:  1510_fs-enable-link-security-restrictions-by-default.patch
 From:   
http://sources.debian.net/src/linux/3.16.7-ckt4-3/debian/patches/debian/fs-enable-link-security-restrictions-by-default.patch
 Desc:   Enable link security restrictions by default.

diff --git a/1109_linux-6.6.110.patch b/1109_linux-6.6.110.patch
new file mode 100644
index 00000000..09637783
--- /dev/null
+++ b/1109_linux-6.6.110.patch
@@ -0,0 +1,327 @@
+diff --git a/Makefile b/Makefile
+index afeacf5efc9553..196343089737f3 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 6
+ PATCHLEVEL = 6
+-SUBLEVEL = 109
++SUBLEVEL = 110
+ EXTRAVERSION =
+ NAME = Pinguïn Aangedreven
+ 
+diff --git a/drivers/media/pci/b2c2/flexcop-pci.c 
b/drivers/media/pci/b2c2/flexcop-pci.c
+index 486c8ec0fa60d9..ab53c5b02c48df 100644
+--- a/drivers/media/pci/b2c2/flexcop-pci.c
++++ b/drivers/media/pci/b2c2/flexcop-pci.c
+@@ -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);
+diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
+index e5590a708f1c5d..f4deca8894e0f7 100644
+--- a/drivers/media/rc/imon.c
++++ b/drivers/media/rc/imon.c
+@@ -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;
+ 
+diff --git a/drivers/media/usb/uvc/uvc_driver.c 
b/drivers/media/usb/uvc/uvc_driver.c
+index 09753993068a95..c7cee6b185264d 100644
+--- a/drivers/media/usb/uvc/uvc_driver.c
++++ b/drivers/media/usb/uvc/uvc_driver.c
+@@ -135,6 +135,9 @@ struct uvc_entity *uvc_entity_by_id(struct uvc_device 
*dev, int id)
+ {
+       struct uvc_entity *entity;
+ 
++      if (id == UVC_INVALID_ENTITY_ID)
++              return NULL;
++
+       list_for_each_entry(entity, &dev->entities, list) {
+               if (entity->id == id)
+                       return entity;
+@@ -778,14 +781,27 @@ static const u8 uvc_media_transport_input_guid[16] =
+       UVC_GUID_UVC_MEDIA_TRANSPORT_INPUT;
+ static const u8 uvc_processing_guid[16] = UVC_GUID_UVC_PROCESSING;
+ 
+-static struct uvc_entity *uvc_alloc_entity(u16 type, u16 id,
+-              unsigned int num_pads, unsigned int extra_size)
++static struct uvc_entity *uvc_alloc_new_entity(struct uvc_device *dev, u16 
type,
++                                             u16 id, unsigned int num_pads,
++                                             unsigned int extra_size)
+ {
+       struct uvc_entity *entity;
+       unsigned int num_inputs;
+       unsigned int size;
+       unsigned int i;
+ 
++      /* Per UVC 1.1+ spec 3.7.2, the ID should be non-zero. */
++      if (id == 0) {
++              dev_err(&dev->intf->dev, "Found Unit with invalid ID 0\n");
++              id = UVC_INVALID_ENTITY_ID;
++      }
++
++      /* Per UVC 1.1+ spec 3.7.2, the ID is unique. */
++      if (uvc_entity_by_id(dev, id)) {
++              dev_err(&dev->intf->dev, "Found multiple Units with ID %u\n", 
id);
++              id = UVC_INVALID_ENTITY_ID;
++      }
++
+       extra_size = roundup(extra_size, sizeof(*entity->pads));
+       if (num_pads)
+               num_inputs = type & UVC_TERM_OUTPUT ? num_pads : num_pads - 1;
+@@ -795,7 +811,7 @@ static struct uvc_entity *uvc_alloc_entity(u16 type, u16 
id,
+            + num_inputs;
+       entity = kzalloc(size, GFP_KERNEL);
+       if (entity == NULL)
+-              return NULL;
++              return ERR_PTR(-ENOMEM);
+ 
+       entity->id = id;
+       entity->type = type;
+@@ -907,10 +923,10 @@ static int uvc_parse_vendor_control(struct uvc_device 
*dev,
+                       break;
+               }
+ 
+-              unit = uvc_alloc_entity(UVC_VC_EXTENSION_UNIT, buffer[3],
+-                                      p + 1, 2*n);
+-              if (unit == NULL)
+-                      return -ENOMEM;
++              unit = uvc_alloc_new_entity(dev, UVC_VC_EXTENSION_UNIT,
++                                          buffer[3], p + 1, 2 * n);
++              if (IS_ERR(unit))
++                      return PTR_ERR(unit);
+ 
+               memcpy(unit->guid, &buffer[4], 16);
+               unit->extension.bNumControls = buffer[20];
+@@ -1019,10 +1035,10 @@ static int uvc_parse_standard_control(struct 
uvc_device *dev,
+                       return -EINVAL;
+               }
+ 
+-              term = uvc_alloc_entity(type | UVC_TERM_INPUT, buffer[3],
+-                                      1, n + p);
+-              if (term == NULL)
+-                      return -ENOMEM;
++              term = uvc_alloc_new_entity(dev, type | UVC_TERM_INPUT,
++                                          buffer[3], 1, n + p);
++              if (IS_ERR(term))
++                      return PTR_ERR(term);
+ 
+               if (UVC_ENTITY_TYPE(term) == UVC_ITT_CAMERA) {
+                       term->camera.bControlSize = n;
+@@ -1078,10 +1094,10 @@ static int uvc_parse_standard_control(struct 
uvc_device *dev,
+                       return 0;
+               }
+ 
+-              term = uvc_alloc_entity(type | UVC_TERM_OUTPUT, buffer[3],
+-                                      1, 0);
+-              if (term == NULL)
+-                      return -ENOMEM;
++              term = uvc_alloc_new_entity(dev, type | UVC_TERM_OUTPUT,
++                                          buffer[3], 1, 0);
++              if (IS_ERR(term))
++                      return PTR_ERR(term);
+ 
+               memcpy(term->baSourceID, &buffer[7], 1);
+ 
+@@ -1100,9 +1116,10 @@ static int uvc_parse_standard_control(struct uvc_device 
*dev,
+                       return -EINVAL;
+               }
+ 
+-              unit = uvc_alloc_entity(buffer[2], buffer[3], p + 1, 0);
+-              if (unit == NULL)
+-                      return -ENOMEM;
++              unit = uvc_alloc_new_entity(dev, buffer[2], buffer[3],
++                                          p + 1, 0);
++              if (IS_ERR(unit))
++                      return PTR_ERR(unit);
+ 
+               memcpy(unit->baSourceID, &buffer[5], p);
+ 
+@@ -1122,9 +1139,9 @@ static int uvc_parse_standard_control(struct uvc_device 
*dev,
+                       return -EINVAL;
+               }
+ 
+-              unit = uvc_alloc_entity(buffer[2], buffer[3], 2, n);
+-              if (unit == NULL)
+-                      return -ENOMEM;
++              unit = uvc_alloc_new_entity(dev, buffer[2], buffer[3], 2, n);
++              if (IS_ERR(unit))
++                      return PTR_ERR(unit);
+ 
+               memcpy(unit->baSourceID, &buffer[4], 1);
+               unit->processing.wMaxMultiplier =
+@@ -1151,9 +1168,10 @@ static int uvc_parse_standard_control(struct uvc_device 
*dev,
+                       return -EINVAL;
+               }
+ 
+-              unit = uvc_alloc_entity(buffer[2], buffer[3], p + 1, n);
+-              if (unit == NULL)
+-                      return -ENOMEM;
++              unit = uvc_alloc_new_entity(dev, buffer[2], buffer[3],
++                                          p + 1, n);
++              if (IS_ERR(unit))
++                      return PTR_ERR(unit);
+ 
+               memcpy(unit->guid, &buffer[4], 16);
+               unit->extension.bNumControls = buffer[20];
+@@ -1293,9 +1311,10 @@ static int uvc_gpio_parse(struct uvc_device *dev)
+               return dev_err_probe(&dev->intf->dev, irq,
+                                    "No IRQ for privacy GPIO\n");
+ 
+-      unit = uvc_alloc_entity(UVC_EXT_GPIO_UNIT, UVC_EXT_GPIO_UNIT_ID, 0, 1);
+-      if (!unit)
+-              return -ENOMEM;
++      unit = uvc_alloc_new_entity(dev, UVC_EXT_GPIO_UNIT,
++                                  UVC_EXT_GPIO_UNIT_ID, 0, 1);
++      if (IS_ERR(unit))
++              return PTR_ERR(unit);
+ 
+       unit->gpio.gpio_privacy = gpio_privacy;
+       unit->gpio.irq = irq;
+diff --git a/drivers/media/usb/uvc/uvcvideo.h 
b/drivers/media/usb/uvc/uvcvideo.h
+index e99bfaa622669b..cbb5ce963cd097 100644
+--- a/drivers/media/usb/uvc/uvcvideo.h
++++ b/drivers/media/usb/uvc/uvcvideo.h
+@@ -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.
+  */
+diff --git a/drivers/target/target_core_configfs.c 
b/drivers/target/target_core_configfs.c
+index 9a88774836c9db..eddcfd09c05b86 100644
+--- a/drivers/target/target_core_configfs.c
++++ b/drivers/target/target_core_configfs.c
+@@ -2738,7 +2738,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;
+diff --git a/include/crypto/sha256_base.h b/include/crypto/sha256_base.h
+index ab904d82236fb8..0f5f3a6f79f0cf 100644
+--- a/include/crypto/sha256_base.h
++++ b/include/crypto/sha256_base.h
+@@ -44,7 +44,7 @@ static inline int lib_sha256_base_do_update(struct 
sha256_state *sctx,
+       sctx->count += len;
+ 
+       if (unlikely((partial + len) >= SHA256_BLOCK_SIZE)) {
+-              int blocks;
++              unsigned int blocks;
+ 
+               if (partial) {
+                       int p = SHA256_BLOCK_SIZE - partial;
+diff --git a/scripts/gcc-plugins/gcc-common.h 
b/scripts/gcc-plugins/gcc-common.h
+index 90e83d62adb547..de1e4c927cbc76 100644
+--- a/scripts/gcc-plugins/gcc-common.h
++++ b/scripts/gcc-plugins/gcc-common.h
+@@ -196,10 +196,17 @@ inline bool is_a_helper<const gassign 
*>::test(const_gimple gs)
+ }
+ #endif
+ 
++#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()
+ 
+diff --git a/sound/soc/qcom/qdsp6/topology.c b/sound/soc/qcom/qdsp6/topology.c
+index 70572c83e1017d..d4c3bc85fb3562 100644
+--- a/sound/soc/qcom/qdsp6/topology.c
++++ b/sound/soc/qcom/qdsp6/topology.c
+@@ -586,8 +586,8 @@ static int audioreach_widget_load_module_common(struct 
snd_soc_component *compon
+               return 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;

Reply via email to