commit:     abcc341ce6663d9a5df5ae4968a9f123bb850e35
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Sun Nov 17 18:18:00 2024 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Sun Nov 17 18:18:00 2024 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=abcc341c

Linux patch 5.15.173

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README               |   4 +
 1172_linux-5.15.173.patch | 631 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 635 insertions(+)

diff --git a/0000_README b/0000_README
index 35c500f5..0bd0dc0c 100644
--- a/0000_README
+++ b/0000_README
@@ -731,6 +731,10 @@ Patch:  1171_linux-5.15.172.patch
 From:   https://www.kernel.org
 Desc:   Linux 5.15.172
 
+Patch:  1172_linux-5.15.173.patch
+From:   https://www.kernel.org
+Desc:   Linux 5.15.173
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1172_linux-5.15.173.patch b/1172_linux-5.15.173.patch
new file mode 100644
index 00000000..1cfcc9f2
--- /dev/null
+++ b/1172_linux-5.15.173.patch
@@ -0,0 +1,631 @@
+diff --git a/Makefile b/Makefile
+index 87744128698719..36f61a73e1e32e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 5
+ PATCHLEVEL = 15
+-SUBLEVEL = 172
++SUBLEVEL = 173
+ EXTRAVERSION =
+ NAME = Trick or Treat
+ 
+diff --git a/arch/powerpc/platforms/powernv/opal-irqchip.c 
b/arch/powerpc/platforms/powernv/opal-irqchip.c
+index 391f505352007e..e9849d70aee4af 100644
+--- a/arch/powerpc/platforms/powernv/opal-irqchip.c
++++ b/arch/powerpc/platforms/powernv/opal-irqchip.c
+@@ -282,6 +282,7 @@ int __init opal_event_init(void)
+                                name, NULL);
+               if (rc) {
+                       pr_warn("Error %d requesting OPAL irq %d\n", rc, 
(int)r->start);
++                      kfree(name);
+                       continue;
+               }
+       }
+diff --git a/block/elevator.c b/block/elevator.c
+index 1b5e57f6115f3c..a98e8356f1b87f 100644
+--- a/block/elevator.c
++++ b/block/elevator.c
+@@ -620,7 +620,7 @@ int elevator_switch_mq(struct request_queue *q,
+ static inline bool elv_support_iosched(struct request_queue *q)
+ {
+       if (!queue_is_mq(q) ||
+-          (q->tag_set && (q->tag_set->flags & BLK_MQ_F_NO_SCHED)))
++          (q->tag_set->flags & BLK_MQ_F_NO_SCHED))
+               return false;
+       return true;
+ }
+@@ -631,7 +631,7 @@ static inline bool elv_support_iosched(struct 
request_queue *q)
+  */
+ static struct elevator_type *elevator_get_default(struct request_queue *q)
+ {
+-      if (q->tag_set && q->tag_set->flags & BLK_MQ_F_NO_SCHED_BY_DEFAULT)
++      if (q->tag_set->flags & BLK_MQ_F_NO_SCHED_BY_DEFAULT)
+               return NULL;
+ 
+       if (q->nr_hw_queues != 1 &&
+diff --git a/drivers/crypto/marvell/cesa/hash.c 
b/drivers/crypto/marvell/cesa/hash.c
+index c72b0672fc7103..84c1065092796b 100644
+--- a/drivers/crypto/marvell/cesa/hash.c
++++ b/drivers/crypto/marvell/cesa/hash.c
+@@ -947,7 +947,7 @@ struct ahash_alg mv_md5_alg = {
+               .base = {
+                       .cra_name = "md5",
+                       .cra_driver_name = "mv-md5",
+-                      .cra_priority = 300,
++                      .cra_priority = 0,
+                       .cra_flags = CRYPTO_ALG_ASYNC |
+                                    CRYPTO_ALG_ALLOCATES_MEMORY |
+                                    CRYPTO_ALG_KERN_DRIVER_ONLY,
+@@ -1018,7 +1018,7 @@ struct ahash_alg mv_sha1_alg = {
+               .base = {
+                       .cra_name = "sha1",
+                       .cra_driver_name = "mv-sha1",
+-                      .cra_priority = 300,
++                      .cra_priority = 0,
+                       .cra_flags = CRYPTO_ALG_ASYNC |
+                                    CRYPTO_ALG_ALLOCATES_MEMORY |
+                                    CRYPTO_ALG_KERN_DRIVER_ONLY,
+@@ -1092,7 +1092,7 @@ struct ahash_alg mv_sha256_alg = {
+               .base = {
+                       .cra_name = "sha256",
+                       .cra_driver_name = "mv-sha256",
+-                      .cra_priority = 300,
++                      .cra_priority = 0,
+                       .cra_flags = CRYPTO_ALG_ASYNC |
+                                    CRYPTO_ALG_ALLOCATES_MEMORY |
+                                    CRYPTO_ALG_KERN_DRIVER_ONLY,
+@@ -1327,7 +1327,7 @@ struct ahash_alg mv_ahmac_md5_alg = {
+               .base = {
+                       .cra_name = "hmac(md5)",
+                       .cra_driver_name = "mv-hmac-md5",
+-                      .cra_priority = 300,
++                      .cra_priority = 0,
+                       .cra_flags = CRYPTO_ALG_ASYNC |
+                                    CRYPTO_ALG_ALLOCATES_MEMORY |
+                                    CRYPTO_ALG_KERN_DRIVER_ONLY,
+@@ -1398,7 +1398,7 @@ struct ahash_alg mv_ahmac_sha1_alg = {
+               .base = {
+                       .cra_name = "hmac(sha1)",
+                       .cra_driver_name = "mv-hmac-sha1",
+-                      .cra_priority = 300,
++                      .cra_priority = 0,
+                       .cra_flags = CRYPTO_ALG_ASYNC |
+                                    CRYPTO_ALG_ALLOCATES_MEMORY |
+                                    CRYPTO_ALG_KERN_DRIVER_ONLY,
+@@ -1469,7 +1469,7 @@ struct ahash_alg mv_ahmac_sha256_alg = {
+               .base = {
+                       .cra_name = "hmac(sha256)",
+                       .cra_driver_name = "mv-hmac-sha256",
+-                      .cra_priority = 300,
++                      .cra_priority = 0,
+                       .cra_flags = CRYPTO_ALG_ASYNC |
+                                    CRYPTO_ALG_ALLOCATES_MEMORY |
+                                    CRYPTO_ALG_KERN_DRIVER_ONLY,
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h 
b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+index 7bb7a69321d30d..9c60bb2aefe1fa 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+@@ -59,7 +59,7 @@
+ #define VMWGFX_DRIVER_MINOR 19
+ #define VMWGFX_DRIVER_PATCHLEVEL 0
+ #define VMWGFX_FIFO_STATIC_SIZE (1024*1024)
+-#define VMWGFX_MAX_DISPLAYS 16
++#define VMWGFX_NUM_DISPLAY_UNITS 8
+ #define VMWGFX_CMD_BOUNCE_INIT_SIZE 32768
+ 
+ #define VMWGFX_PCI_ID_SVGA2              0x0405
+@@ -71,7 +71,7 @@
+ #define VMWGFX_NUM_GB_CONTEXT 256
+ #define VMWGFX_NUM_GB_SHADER 20000
+ #define VMWGFX_NUM_GB_SURFACE 32768
+-#define VMWGFX_NUM_GB_SCREEN_TARGET VMWGFX_MAX_DISPLAYS
++#define VMWGFX_NUM_GB_SCREEN_TARGET VMWGFX_NUM_DISPLAY_UNITS
+ #define VMWGFX_NUM_DXCONTEXT 256
+ #define VMWGFX_NUM_DXQUERY 512
+ #define VMWGFX_NUM_MOB (VMWGFX_NUM_GB_CONTEXT +\
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c 
b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+index 23010d60edfe4d..8a9b61920496a3 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+@@ -2295,7 +2295,7 @@ int vmw_kms_update_layout_ioctl(struct drm_device *dev, 
void *data,
+       struct drm_mode_config *mode_config = &dev->mode_config;
+       struct drm_vmw_update_layout_arg *arg =
+               (struct drm_vmw_update_layout_arg *)data;
+-      void __user *user_rects;
++      const void __user *user_rects;
+       struct drm_vmw_rect *rects;
+       struct drm_rect *drm_rects;
+       unsigned rects_size;
+@@ -2308,6 +2308,8 @@ int vmw_kms_update_layout_ioctl(struct drm_device *dev, 
void *data,
+                             def_rect.x2, def_rect.y2);
+               vmw_du_update_layout(dev_priv, 1, &def_rect);
+               return 0;
++      } else if (arg->num_outputs > VMWGFX_NUM_DISPLAY_UNITS) {
++              return -E2BIG;
+       }
+ 
+       rects_size = arg->num_outputs * sizeof(struct drm_vmw_rect);
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h 
b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
+index 23c2dc943caf09..85595d0bcfcec5 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
+@@ -198,9 +198,6 @@ struct vmw_kms_dirty {
+       s32 unit_y2;
+ };
+ 
+-#define VMWGFX_NUM_DISPLAY_UNITS 8
+-
+-
+ #define vmw_framebuffer_to_vfb(x) \
+       container_of(x, struct vmw_framebuffer, base)
+ #define vmw_framebuffer_to_vfbs(x) \
+diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
+index 110c59622a2d8f..81db294dda4081 100644
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -831,6 +831,7 @@
+ #define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1     0xc539
+ #define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1_1   0xc53f
+ #define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_POWERPLAY        0xc53a
++#define USB_DEVICE_ID_LOGITECH_BOLT_RECEIVER  0xc548
+ #define USB_DEVICE_ID_SPACETRAVELLER  0xc623
+ #define USB_DEVICE_ID_SPACENAVIGATOR  0xc626
+ #define USB_DEVICE_ID_DINOVO_DESKTOP  0xc704
+diff --git a/drivers/hid/hid-lenovo.c b/drivers/hid/hid-lenovo.c
+index 44fd4a05ace387..9536f468b42c5c 100644
+--- a/drivers/hid/hid-lenovo.c
++++ b/drivers/hid/hid-lenovo.c
+@@ -343,6 +343,7 @@ static int lenovo_input_mapping(struct hid_device *hdev,
+               return lenovo_input_mapping_tp10_ultrabook_kbd(hdev, hi, field,
+                                                              usage, bit, max);
+       case USB_DEVICE_ID_LENOVO_X1_TAB:
++      case USB_DEVICE_ID_LENOVO_X1_TAB3:
+               return lenovo_input_mapping_x1_tab_kbd(hdev, hi, field, usage, 
bit, max);
+       default:
+               return 0;
+@@ -431,6 +432,7 @@ static ssize_t attr_fn_lock_store(struct device *dev,
+               break;
+       case USB_DEVICE_ID_LENOVO_TP10UBKBD:
+       case USB_DEVICE_ID_LENOVO_X1_TAB:
++      case USB_DEVICE_ID_LENOVO_X1_TAB3:
+               ret = lenovo_led_set_tp10ubkbd(hdev, TP10UBKBD_FN_LOCK_LED, 
value);
+               if (ret)
+                       return ret;
+@@ -614,6 +616,7 @@ static int lenovo_event(struct hid_device *hdev, struct 
hid_field *field,
+               return lenovo_event_cptkbd(hdev, field, usage, value);
+       case USB_DEVICE_ID_LENOVO_TP10UBKBD:
+       case USB_DEVICE_ID_LENOVO_X1_TAB:
++      case USB_DEVICE_ID_LENOVO_X1_TAB3:
+               return lenovo_event_tp10ubkbd(hdev, field, usage, value);
+       default:
+               return 0;
+@@ -896,6 +899,7 @@ static int lenovo_led_brightness_set(struct led_classdev 
*led_cdev,
+               break;
+       case USB_DEVICE_ID_LENOVO_TP10UBKBD:
+       case USB_DEVICE_ID_LENOVO_X1_TAB:
++      case USB_DEVICE_ID_LENOVO_X1_TAB3:
+               ret = lenovo_led_set_tp10ubkbd(hdev, tp10ubkbd_led[led_nr], 
value);
+               break;
+       }
+@@ -1136,6 +1140,7 @@ static int lenovo_probe(struct hid_device *hdev,
+               break;
+       case USB_DEVICE_ID_LENOVO_TP10UBKBD:
+       case USB_DEVICE_ID_LENOVO_X1_TAB:
++      case USB_DEVICE_ID_LENOVO_X1_TAB3:
+               ret = lenovo_probe_tp10ubkbd(hdev);
+               break;
+       default:
+@@ -1202,6 +1207,7 @@ static void lenovo_remove(struct hid_device *hdev)
+               break;
+       case USB_DEVICE_ID_LENOVO_TP10UBKBD:
+       case USB_DEVICE_ID_LENOVO_X1_TAB:
++      case USB_DEVICE_ID_LENOVO_X1_TAB3:
+               lenovo_remove_tp10ubkbd(hdev);
+               break;
+       }
+@@ -1247,6 +1253,8 @@ static const struct hid_device_id lenovo_devices[] = {
+        */
+       { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
+                    USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB) },
++      { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
++                   USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB3) },
+       { }
+ };
+ 
+diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
+index 6a3f4371bd1095..57e4ff1ab275d2 100644
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -2017,6 +2017,10 @@ static const struct hid_device_id mt_devices[] = {
+               HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
+                       USB_VENDOR_ID_ELAN, 0x3148) },
+ 
++      { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
++              HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
++                      USB_VENDOR_ID_ELAN, 0x32ae) },
++
+       /* Elitegroup panel */
+       { .driver_data = MT_CLS_SERIAL,
+               MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
+@@ -2083,6 +2087,11 @@ static const struct hid_device_id mt_devices[] = {
+               HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
+                       0x347d, 0x7853) },
+ 
++      /* HONOR MagicBook Art 14 touchpad */
++      { .driver_data = MT_CLS_VTL,
++              HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
++                      0x35cc, 0x0104) },
++
+       /* Ilitek dual touch panel */
+       {  .driver_data = MT_CLS_NSMU,
+               MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
+@@ -2125,6 +2134,10 @@ static const struct hid_device_id mt_devices[] = {
+               HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH_WIN_8,
+                       USB_VENDOR_ID_LOGITECH,
+                       USB_DEVICE_ID_LOGITECH_CASA_TOUCHPAD) },
++      { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
++              HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
++                      USB_VENDOR_ID_LOGITECH,
++                      USB_DEVICE_ID_LOGITECH_BOLT_RECEIVER) },
+ 
+       /* MosArt panels */
+       { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
+diff --git a/drivers/irqchip/irq-mscc-ocelot.c 
b/drivers/irqchip/irq-mscc-ocelot.c
+index 4d0c3532dbe735..c19ab379e8c5ea 100644
+--- a/drivers/irqchip/irq-mscc-ocelot.c
++++ b/drivers/irqchip/irq-mscc-ocelot.c
+@@ -37,7 +37,7 @@ static struct chip_props ocelot_props = {
+       .reg_off_ena_clr        = 0x1c,
+       .reg_off_ena_set        = 0x20,
+       .reg_off_ident          = 0x38,
+-      .reg_off_trigger        = 0x5c,
++      .reg_off_trigger        = 0x4,
+       .n_irq                  = 24,
+ };
+ 
+@@ -70,7 +70,7 @@ static struct chip_props jaguar2_props = {
+       .reg_off_ena_clr        = 0x1c,
+       .reg_off_ena_set        = 0x20,
+       .reg_off_ident          = 0x38,
+-      .reg_off_trigger        = 0x5c,
++      .reg_off_trigger        = 0x4,
+       .n_irq                  = 29,
+ };
+ 
+diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
+index ae84aaa1645c24..bdd5a564e31911 100644
+--- a/drivers/md/raid10.c
++++ b/drivers/md/raid10.c
+@@ -3443,7 +3443,6 @@ static sector_t raid10_sync_request(struct mddev *mddev, 
sector_t sector_nr,
+                       sector_t sect;
+                       int must_sync;
+                       int any_working;
+-                      int need_recover = 0;
+                       struct raid10_info *mirror = &conf->mirrors[i];
+                       struct md_rdev *mrdev, *mreplace;
+ 
+@@ -3451,14 +3450,13 @@ static sector_t raid10_sync_request(struct mddev 
*mddev, sector_t sector_nr,
+                       mrdev = rcu_dereference(mirror->rdev);
+                       mreplace = rcu_dereference(mirror->replacement);
+ 
+-                      if (mrdev != NULL &&
+-                          !test_bit(Faulty, &mrdev->flags) &&
+-                          !test_bit(In_sync, &mrdev->flags))
+-                              need_recover = 1;
++                      if (mrdev && (test_bit(Faulty, &mrdev->flags) ||
++                          test_bit(In_sync, &mrdev->flags)))
++                              mrdev = NULL;
+                       if (mreplace && test_bit(Faulty, &mreplace->flags))
+                               mreplace = NULL;
+ 
+-                      if (!need_recover && !mreplace) {
++                      if (!mrdev && !mreplace) {
+                               rcu_read_unlock();
+                               continue;
+                       }
+@@ -3492,7 +3490,8 @@ static sector_t raid10_sync_request(struct mddev *mddev, 
sector_t sector_nr,
+                               rcu_read_unlock();
+                               continue;
+                       }
+-                      atomic_inc(&mrdev->nr_pending);
++                      if (mrdev)
++                              atomic_inc(&mrdev->nr_pending);
+                       if (mreplace)
+                               atomic_inc(&mreplace->nr_pending);
+                       rcu_read_unlock();
+@@ -3579,7 +3578,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, 
sector_t sector_nr,
+                               r10_bio->devs[1].devnum = i;
+                               r10_bio->devs[1].addr = to_addr;
+ 
+-                              if (need_recover) {
++                              if (mrdev) {
+                                       bio = r10_bio->devs[1].bio;
+                                       bio->bi_next = biolist;
+                                       biolist = bio;
+@@ -3624,7 +3623,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, 
sector_t sector_nr,
+                                       for (k = 0; k < conf->copies; k++)
+                                               if (r10_bio->devs[k].devnum == 
i)
+                                                       break;
+-                                      if (!test_bit(In_sync,
++                                      if (mrdev && !test_bit(In_sync,
+                                                     &mrdev->flags)
+                                           && !rdev_set_badblocks(
+                                                   mrdev,
+@@ -3650,12 +3649,14 @@ static sector_t raid10_sync_request(struct mddev 
*mddev, sector_t sector_nr,
+                               if (rb2)
+                                       atomic_dec(&rb2->remaining);
+                               r10_bio = rb2;
+-                              rdev_dec_pending(mrdev, mddev);
++                              if (mrdev)
++                                      rdev_dec_pending(mrdev, mddev);
+                               if (mreplace)
+                                       rdev_dec_pending(mreplace, mddev);
+                               break;
+                       }
+-                      rdev_dec_pending(mrdev, mddev);
++                      if (mrdev)
++                              rdev_dec_pending(mrdev, mddev);
+                       if (mreplace)
+                               rdev_dec_pending(mreplace, mddev);
+                       if (r10_bio->devs[0].bio->bi_opf & MD_FAILFAST) {
+diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
+index 71ee7a3c3f5b8d..74e3ba53f5b447 100644
+--- a/drivers/net/usb/qmi_wwan.c
++++ b/drivers/net/usb/qmi_wwan.c
+@@ -1421,6 +1421,7 @@ static const struct usb_device_id products[] = {
+       {QMI_FIXED_INTF(0x2c7c, 0x0296, 4)},    /* Quectel BG96 */
+       {QMI_QUIRK_SET_DTR(0x2c7c, 0x030e, 4)}, /* Quectel EM05GV2 */
+       {QMI_QUIRK_SET_DTR(0x2cb7, 0x0104, 4)}, /* Fibocom NL678 series */
++      {QMI_QUIRK_SET_DTR(0x2cb7, 0x0112, 0)}, /* Fibocom FG132 */
+       {QMI_FIXED_INTF(0x0489, 0xe0b4, 0)},    /* Foxconn T77W968 LTE */
+       {QMI_FIXED_INTF(0x0489, 0xe0b5, 0)},    /* Foxconn T77W968 LTE with 
eSIM support*/
+       {QMI_FIXED_INTF(0x2692, 0x9025, 4)},    /* Cellient MPL200 (rebranded 
Qualcomm 05c6:9025) */
+diff --git a/drivers/vdpa/ifcvf/ifcvf_base.c b/drivers/vdpa/ifcvf/ifcvf_base.c
+index 5091ff9d6c93fc..bdadc5714e0e49 100644
+--- a/drivers/vdpa/ifcvf/ifcvf_base.c
++++ b/drivers/vdpa/ifcvf/ifcvf_base.c
+@@ -105,7 +105,7 @@ int ifcvf_init_hw(struct ifcvf_hw *hw, struct pci_dev 
*pdev)
+       u32 i;
+ 
+       ret = pci_read_config_byte(pdev, PCI_CAPABILITY_LIST, &pos);
+-      if (ret < 0) {
++      if (ret) {
+               IFCVF_ERR(pdev, "Failed to read PCI capability list\n");
+               return -EIO;
+       }
+diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
+index fc1e929ae03814..3c9316bf8a695e 100644
+--- a/fs/ocfs2/file.c
++++ b/fs/ocfs2/file.c
+@@ -1132,9 +1132,12 @@ int ocfs2_setattr(struct user_namespace *mnt_userns, 
struct dentry *dentry,
+       trace_ocfs2_setattr(inode, dentry,
+                           (unsigned long long)OCFS2_I(inode)->ip_blkno,
+                           dentry->d_name.len, dentry->d_name.name,
+-                          attr->ia_valid, attr->ia_mode,
+-                          from_kuid(&init_user_ns, attr->ia_uid),
+-                          from_kgid(&init_user_ns, attr->ia_gid));
++                          attr->ia_valid,
++                              attr->ia_valid & ATTR_MODE ? attr->ia_mode : 0,
++                              attr->ia_valid & ATTR_UID ?
++                                      from_kuid(&init_user_ns, attr->ia_uid) 
: 0,
++                              attr->ia_valid & ATTR_GID ?
++                                      from_kgid(&init_user_ns, attr->ia_gid) 
: 0);
+ 
+       /* ensuring we don't even attempt to truncate a symlink */
+       if (S_ISLNK(inode->i_mode))
+diff --git a/fs/udf/directory.c b/fs/udf/directory.c
+index e97ffae0783301..4f6c7b546bea68 100644
+--- a/fs/udf/directory.c
++++ b/fs/udf/directory.c
+@@ -19,6 +19,7 @@
+ #include <linux/bio.h>
+ #include <linux/crc-itu-t.h>
+ #include <linux/iversion.h>
++#include <linux/slab.h>
+ 
+ static int udf_verify_fi(struct udf_fileident_iter *iter)
+ {
+@@ -248,9 +249,17 @@ int udf_fiiter_init(struct udf_fileident_iter *iter, 
struct inode *dir,
+       iter->elen = 0;
+       iter->epos.bh = NULL;
+       iter->name = NULL;
++      /*
++       * When directory is verified, we don't expect directory iteration to
++       * fail and it can be difficult to undo without corrupting filesystem.
++       * So just do not allow memory allocation failures here.
++       */
++      iter->namebuf = kmalloc(UDF_NAME_LEN_CS0, GFP_KERNEL | __GFP_NOFAIL);
+ 
+-      if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
+-              return udf_copy_fi(iter);
++      if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) {
++              err = udf_copy_fi(iter);
++              goto out;
++      }
+ 
+       if (inode_bmap(dir, iter->pos >> dir->i_blkbits, &iter->epos,
+                      &iter->eloc, &iter->elen, &iter->loffset) !=
+@@ -260,17 +269,17 @@ int udf_fiiter_init(struct udf_fileident_iter *iter, 
struct inode *dir,
+               udf_err(dir->i_sb,
+                       "position %llu not allocated in directory (ino %lu)\n",
+                       (unsigned long long)pos, dir->i_ino);
+-              return -EFSCORRUPTED;
++              err = -EFSCORRUPTED;
++              goto out;
+       }
+       err = udf_fiiter_load_bhs(iter);
+       if (err < 0)
+-              return err;
++              goto out;
+       err = udf_copy_fi(iter);
+-      if (err < 0) {
++out:
++      if (err < 0)
+               udf_fiiter_release(iter);
+-              return err;
+-      }
+-      return 0;
++      return err;
+ }
+ 
+ int udf_fiiter_advance(struct udf_fileident_iter *iter)
+@@ -307,6 +316,8 @@ void udf_fiiter_release(struct udf_fileident_iter *iter)
+       brelse(iter->bh[0]);
+       brelse(iter->bh[1]);
+       iter->bh[0] = iter->bh[1] = NULL;
++      kfree(iter->namebuf);
++      iter->namebuf = NULL;
+ }
+ 
+ static void udf_copy_to_bufs(void *buf1, int len1, void *buf2, int len2,
+diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h
+index f764b4d15094d4..d35aa42bb57778 100644
+--- a/fs/udf/udfdecl.h
++++ b/fs/udf/udfdecl.h
+@@ -99,7 +99,7 @@ struct udf_fileident_iter {
+       struct extent_position epos;    /* Position after the above extent */
+       struct fileIdentDesc fi;        /* Copied directory entry */
+       uint8_t *name;                  /* Pointer to entry name */
+-      uint8_t namebuf[UDF_NAME_LEN_CS0]; /* Storage for entry name in case
++      uint8_t *namebuf;               /* Storage for entry name in case
+                                        * the name is split between two blocks
+                                        */
+ };
+diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c
+index b53099b595cc79..43dd54c576d68f 100644
+--- a/io_uring/io_uring.c
++++ b/io_uring/io_uring.c
+@@ -10822,8 +10822,10 @@ static int io_register_iowq_max_workers(struct 
io_ring_ctx *ctx,
+       }
+ 
+       if (sqd) {
++              mutex_unlock(&ctx->uring_lock);
+               mutex_unlock(&sqd->lock);
+               io_put_sq_data(sqd);
++              mutex_lock(&ctx->uring_lock);
+       }
+ 
+       if (copy_to_user(arg, new_count, sizeof(new_count)))
+@@ -10848,8 +10850,11 @@ static int io_register_iowq_max_workers(struct 
io_ring_ctx *ctx,
+       return 0;
+ err:
+       if (sqd) {
++              mutex_unlock(&ctx->uring_lock);
+               mutex_unlock(&sqd->lock);
+               io_put_sq_data(sqd);
++              mutex_lock(&ctx->uring_lock);
++
+       }
+       return ret;
+ }
+diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
+index 88b38db5f626dc..e29c0581f93ad7 100644
+--- a/kernel/bpf/verifier.c
++++ b/kernel/bpf/verifier.c
+@@ -14013,7 +14013,7 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr 
*attr, bpfptr_t uattr)
+       /* 'struct bpf_verifier_env' can be global, but since it's not small,
+        * allocate/free it every time bpf_check() is called
+        */
+-      env = kzalloc(sizeof(struct bpf_verifier_env), GFP_KERNEL);
++      env = kvzalloc(sizeof(struct bpf_verifier_env), GFP_KERNEL);
+       if (!env)
+               return -ENOMEM;
+       log = &env->log;
+@@ -14228,6 +14228,6 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr 
*attr, bpfptr_t uattr)
+               mutex_unlock(&bpf_verifier_lock);
+       vfree(env->insn_aux_data);
+ err_free_env:
+-      kfree(env);
++      kvfree(env);
+       return ret;
+ }
+diff --git a/mm/memory.c b/mm/memory.c
+index 6d058973a97e93..4785aecca9a806 100644
+--- a/mm/memory.c
++++ b/mm/memory.c
+@@ -903,6 +903,17 @@ copy_present_page(struct vm_area_struct *dst_vma, struct 
vm_area_struct *src_vma
+       if (likely(!page_needs_cow_for_dma(src_vma, page)))
+               return 1;
+ 
++      /*
++       * The vma->anon_vma of the child process may be NULL
++       * because the entire vma does not contain anonymous pages.
++       * A BUG will occur when the copy_present_page() passes
++       * a copy of a non-anonymous page of that vma to the
++       * page_add_new_anon_rmap() to set up new anonymous rmap.
++       * Return 1 if the page is not an anonymous page.
++       */
++      if (!PageAnon(page))
++              return 1;
++
+       new_page = *prealloc;
+       if (!new_page)
+               return -EAGAIN;
+diff --git a/mm/slab_common.c b/mm/slab_common.c
+index 3173c8a1790464..f684b06649c3ee 100644
+--- a/mm/slab_common.c
++++ b/mm/slab_common.c
+@@ -1213,7 +1213,7 @@ static __always_inline void *__do_krealloc(const void 
*p, size_t new_size,
+               /* Zero out spare memory. */
+               if (want_init_on_alloc(flags)) {
+                       kasan_disable_current();
+-                      memset((void *)p + new_size, 0, ks - new_size);
++                      memset(kasan_reset_tag(p) + new_size, 0, ks - new_size);
+                       kasan_enable_current();
+               }
+ 
+diff --git a/net/9p/client.c b/net/9p/client.c
+index bf29462c919bb9..5f0b3fdc70e298 100644
+--- a/net/9p/client.c
++++ b/net/9p/client.c
+@@ -1003,8 +1003,10 @@ static int p9_client_version(struct p9_client *c)
+ struct p9_client *p9_client_create(const char *dev_name, char *options)
+ {
+       int err;
++      static atomic_t seqno = ATOMIC_INIT(0);
+       struct p9_client *clnt;
+       char *client_id;
++      char *cache_name;
+ 
+       err = 0;
+       clnt = kmalloc(sizeof(*clnt), GFP_KERNEL);
+@@ -1057,15 +1059,23 @@ struct p9_client *p9_client_create(const char 
*dev_name, char *options)
+       if (err)
+               goto close_trans;
+ 
++      cache_name = kasprintf(GFP_KERNEL,
++              "9p-fcall-cache-%u", atomic_inc_return(&seqno));
++      if (!cache_name) {
++              err = -ENOMEM;
++              goto close_trans;
++      }
++
+       /* P9_HDRSZ + 4 is the smallest packet header we can have that is
+        * followed by data accessed from userspace by read
+        */
+       clnt->fcall_cache =
+-              kmem_cache_create_usercopy("9p-fcall-cache", clnt->msize,
++              kmem_cache_create_usercopy(cache_name, clnt->msize,
+                                          0, 0, P9_HDRSZ + 4,
+                                          clnt->msize - (P9_HDRSZ + 4),
+                                          NULL);
+ 
++      kfree(cache_name);
+       return clnt;
+ 
+ close_trans:
+diff --git a/sound/Kconfig b/sound/Kconfig
+index 1903c35d799e11..5848eedcc3c9f6 100644
+--- a/sound/Kconfig
++++ b/sound/Kconfig
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0-only
+ menuconfig SOUND
+       tristate "Sound card support"
+-      depends on HAS_IOMEM || UML
++      depends on HAS_IOMEM || INDIRECT_IOMEM
+       help
+         If you have a sound card in your computer, i.e. if it can say more
+         than an occasional beep, say Y.

Reply via email to