Linux 6.6.75
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.75 kernel.
All users of the 6.6 kernel series must upgrade.
The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.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/ioctl.c | 9 drivers/ata/libahci.c | 12 drivers/ata/libata-core.c | 8 drivers/cpufreq/amd-pstate.c | 7 drivers/gpu/drm/amd/display/dc/dce/dmub_hw_lock_mgr.c | 3 drivers/gpu/drm/v3d/v3d_irq.c | 16 drivers/hid/hid-ids.h | 1 drivers/hid/hid-multitouch.c | 8 drivers/hwmon/drivetemp.c | 2 drivers/infiniband/hw/bnxt_re/main.c | 10 drivers/input/joystick/xpad.c | 9 drivers/input/keyboard/atkbd.c | 2 drivers/irqchip/irq-sunxi-nmi.c | 3 drivers/of/unittest-data/tests-platform.dtsi | 13 drivers/of/unittest.c | 14 drivers/scsi/scsi_transport_iscsi.c | 4 drivers/scsi/storvsc_drv.c | 8 drivers/usb/gadget/function/u_serial.c | 8 drivers/usb/serial/quatech2.c | 2 drivers/vfio/platform/vfio_platform_common.c | 10 fs/ext4/super.c | 3 fs/gfs2/file.c | 1 fs/libfs.c | 177 +++++-- fs/smb/client/smb2inode.c | 92 ++- include/linux/fs.h | 2 include/linux/seccomp.h | 2 mm/filemap.c | 19 mm/shmem.c | 3 net/ipv4/ip_tunnel.c | 2 net/ipv6/ip6_fib.c | 8 net/ipv6/route.c | 45 + net/sched/sch_ets.c | 2 sound/soc/codecs/Kconfig | 1 sound/soc/samsung/Kconfig | 6 sound/usb/quirks.c | 2 tools/testing/selftests/net/Makefile | 1 tools/testing/selftests/net/ipv6_route_update_soft_lockup.sh | 262 +++++++++++ 38 files changed, 645 insertions(+), 134 deletions(-)
Alex Williamson (1):
vfio/platform: check the bounds of read/write syscalls
Alexey Dobriyan (1):
block: fix integer overflow in BLKSECDISCARD
Anastasia Belova (1):
cpufreq: amd-pstate: add check for cpufreq_cpu_get's return value
Andreas Gruenbacher (1):
gfs2: Truncate address space when flipping GFS2_DIF_JDATA flag
Charles Keepax (3):
ASoC: wm8994: Add depends on MFD core
ASoC: samsung: Add missing selects for MFD_WM8994
ASoC: samsung: Add missing depends on I2C
Chuck Lever (10):
libfs: Re-arrange locking in offset_iterate_dir()
libfs: Define a minimum directory offset
libfs: Add simple_offset_empty()
libfs: Fix simple_offset_rename_exchange()
libfs: Add simple_offset_rename() API
shmem: Fix shmem_rename2()
libfs: Return ENOSPC when the directory offset range is exhausted Revert "libfs: Add simple_offset_empty()"
libfs: Replace simple_offset end-of-directory detection
libfs: Use d_children list to iterate simple_offset directories
Easwar Hariharan (1):
scsi: storvsc: Ratelimit warning logs to prevent VM denial of service
Greg Kroah-Hartman (2):
Revert "usb: gadget: u_serial: Disable ep before setting port to null to fix the crash caused by port being null" Linux 6.6.75
Ido Schimmel (1):
ipv4: ip_tunnel: Fix suspicious RCU usage warning in ip_tunnel_find()
Igor Pylypiv (1):
ata: libata-core: Set ATA_QCFLAG_RTF_FILLED in fill_result_tf()
Jack Greiner (1):
Input: xpad - add support for wooting two he (arm)
Jamal Hadi Salim (1):
net: sched: fix ets qdisc OOB Indexing
Jiri Kosina (1):
Revert "HID: multitouch: Add support for lenovo Y9000P Touchpad"
Leonardo Brondani Schenkel (1):
Input: xpad - improve name of 8BitDo controller 2dc8:3106
Lianqin Hu (1):
ALSA: usb-audio: Add delay quirk for USB Audio Device
Linus Torvalds (1):
cachestat: fix page cache statistics permission checking
Linus Walleij (1):
seccomp: Stub for !CONFIG_SECCOMP
Luis Henriques (SUSE) (1):
ext4: fix access to uninitialised lock in fc replay path
Mark Pearson (1):
Input: atkbd - map F23 key to support default copilot shortcut
Matheos Mattsson (1):
Input: xpad - add support for Nacon Evol-X Xbox One Controller
Maíra Canal (1):
drm/v3d: Assign job pointer to NULL before signaling the fence
Nicolas Nobelis (1):
Input: xpad - add support for Nacon Pro Compact
Nilton Perim Neto (1):
Input: xpad - add unofficial Xbox 360 wireless receiver clone
Omid Ehtemam-Haghighi (1):
ipv6: Fix soft lockups in fib6_select_path under high next hop churn
Paulo Alcantara (1):
smb: client: handle lack of EA support in smb2_query_path_info()
Philippe Simons (1):
irqchip/sunxi-nmi: Add missing SKIP_WAKE flag
Pierre-Loup A. Griffais (1):
Input: xpad - add QH Electronics VID/PID
Qasim Ijaz (1):
USB: serial: quatech2: fix null-ptr-deref in qt2_process_read_urb()
Rob Herring (Arm) (1):
of/unittest: Add test that of_address_to_resource() fails on non-translatable address
Russell Harmon (1):
hwmon: (drivetemp) Set scsi command timeout to 10s
Selvin Xavier (1):
RDMA/bnxt_re: Avoid CPU lockups due fifo occupancy check loop
Tom Chung (1):
drm/amd/display: Use HW lock mgr for PSR1
Xiang Zhang (1):
scsi: iscsi: Fix redundant response for ISCSI_UEVENT_GET_HOST_STATS request
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 74 +SUBLEVEL = 75 EXTRAVERSION = NAME = Pinguïn Aangedreven
block/ioctl.c +5 -4
@@ -115,7 +115,7 @@ static int blk_ioctl_discard(struct block_device *bdev, blk_mode_t mode,return -EINVAL ;filemap_invalidate_lock (inode->i_mapping); - err =truncate_bdev_range (bdev, mode, start, start + len -1 ); + err =truncate_bdev_range (bdev, mode, start, end -1 );if (err) goto fail; err =blkdev_issue_discard (bdev, start >>9 , len >>9 ,GFP_KERNEL );
@@ -127,7 +127,7 @@ static int blk_ioctl_discard(struct block_device *bdev, blk_mode_t mode,static int blk_ioctl_secure_erase (struct block_device *bdev,blk_mode_t mode,void __user *argp) { -uint64_t start, len; +uint64_t start, len, end;uint64_t range[2 ];int err;
@@ -142,11 +142,12 @@ static int blk_ioctl_secure_erase(struct block_device *bdev, blk_mode_t mode, len = range[1 ];if ((start &511 ) || (len &511 ))return -EINVAL ; -if (start + len >bdev_nr_bytes (bdev)) +if (check_add_overflow (start, len, &end) || + end >bdev_nr_bytes (bdev))return -EINVAL ;filemap_invalidate_lock (bdev->bd_inode->i_mapping); - err =truncate_bdev_range (bdev, mode, start, start + len -1 ); + err =truncate_bdev_range (bdev, mode, start, end -1 );if (!err) err =blkdev_issue_secure_erase (bdev, start >>9 , len >>9 ,GFP_KERNEL );
drivers/ata/libahci.c +2 -10
@@ -2082,13 +2082,6 @@ static void ahci_qc_fill_rtf(struct ata_queued_cmd *qc)struct ahci_port_priv *pp = qc->ap->private_data;u8 *rx_fis = pp->rx_fis; -/* -* rtf may already be filled (e.g. for successful NCQ commands). -* If that is the case, we have nothing to do. -*/ -if (qc->flags &ATA_QCFLAG_RTF_FILLED ) -return ; -if (pp->fbs_enabled) rx_fis += qc->dev->link->pmp *AHCI_RX_FIS_SZ ;
@@ -2102,7 +2095,6 @@ static void ahci_qc_fill_rtf(struct ata_queued_cmd *qc) !(qc->flags & ATA_QCFLAG_EH)) {ata_tf_from_fis (rx_fis +RX_FIS_PIO_SETUP , &qc->result_tf); qc->result_tf.status = (rx_fis +RX_FIS_PIO_SETUP )[15 ]; - qc->flags |=ATA_QCFLAG_RTF_FILLED ;return ; }
@@ -2125,12 +2117,10 @@ static void ahci_qc_fill_rtf(struct ata_queued_cmd *qc)*/ qc->result_tf.status = fis[2 ]; qc->result_tf.error = fis[3 ]; - qc->flags |=ATA_QCFLAG_RTF_FILLED ;return ; }ata_tf_from_fis (rx_fis +RX_FIS_D2H_REG , &qc->result_tf); - qc->flags |=ATA_QCFLAG_RTF_FILLED ; }static void ahci_qc_ncq_fill_rtf (struct ata_port *ap,u64 done_mask)
@@ -2165,6 +2155,7 @@ static void ahci_qc_ncq_fill_rtf(struct ata_port *ap, u64 done_mask)if (qc &&ata_is_ncq (qc->tf.protocol)) { qc->result_tf.status = status; qc->result_tf.error = error; + qc->result_tf.flags = qc->tf.flags; qc->flags |=ATA_QCFLAG_RTF_FILLED ; } done_mask &= ~(1ULL << tag);
@@ -2189,6 +2180,7 @@ static void ahci_qc_ncq_fill_rtf(struct ata_port *ap, u64 done_mask) fis +=RX_FIS_SDB ; qc->result_tf.status = fis[2 ]; qc->result_tf.error = fis[3 ]; + qc->result_tf.flags = qc->tf.flags; qc->flags |=ATA_QCFLAG_RTF_FILLED ; } done_mask &= ~(1ULL << tag);
drivers/ata/libata-core.c +8 -0
@@ -4792,8 +4792,16 @@ static void fill_result_tf(struct ata_queued_cmd *qc) {struct ata_port *ap = qc->ap; +/* +* rtf may already be filled (e.g. for successful NCQ commands). +* If that is the case, we have nothing to do. +*/ +if (qc->flags &ATA_QCFLAG_RTF_FILLED ) +return ; + qc->result_tf.flags = qc->tf.flags; ap->ops->qc_fill_rtf (qc); + qc->flags |=ATA_QCFLAG_RTF_FILLED ; }static void ata_verify_xfer (struct ata_queued_cmd *qc)
drivers/cpufreq/amd-pstate.c +6 -1
@@ -579,8 +579,13 @@ static void amd_pstate_adjust_perf(unsigned int cpu,unsigned long max_perf, min_perf, des_perf, cap_perf, lowest_nonlinear_perf, max_freq;struct cpufreq_policy *policy =cpufreq_cpu_get (cpu); -struct amd_cpudata *cpudata = policy->driver_data;unsigned int target_freq; +struct amd_cpudata *cpudata; + +if (!policy) +return ; + + cpudata = policy->driver_data;if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)amd_pstate_update_min_max_limit (policy);
drivers/gpu/drm/amd/display/dc/dce/dmub_hw_lock_mgr.c +2 -1
@@ -63,7 +63,8 @@ void dmub_hw_lock_mgr_inbox0_cmd(struct dc_dmub_srv *dmub_srv,bool should_use_dmub_lock (struct dc_link *link) { -if (link->psr_settings.psr_version ==DC_PSR_VERSION_SU_1 ) +if (link->psr_settings.psr_version ==DC_PSR_VERSION_SU_1 || + link->psr_settings.psr_version ==DC_PSR_VERSION_1 )return true;return false; }
drivers/gpu/drm/v3d/v3d_irq.c +12 -4
@@ -102,8 +102,10 @@ v3d_irq(int irq, void *arg)to_v3d_fence (v3d->bin_job->base.irq_fence);trace_v3d_bcl_irq (&v3d->drm, fence->seqno); -dma_fence_signal (&fence->base); + v3d->bin_job =NULL ; +dma_fence_signal (&fence->base); + status =IRQ_HANDLED ; }
@@ -112,8 +114,10 @@ v3d_irq(int irq, void *arg)to_v3d_fence (v3d->render_job->base.irq_fence);trace_v3d_rcl_irq (&v3d->drm, fence->seqno); -dma_fence_signal (&fence->base); + v3d->render_job =NULL ; +dma_fence_signal (&fence->base); + status =IRQ_HANDLED ; }
@@ -122,8 +126,10 @@ v3d_irq(int irq, void *arg)to_v3d_fence (v3d->csd_job->base.irq_fence);trace_v3d_csd_irq (&v3d->drm, fence->seqno); -dma_fence_signal (&fence->base); + v3d->csd_job =NULL ; +dma_fence_signal (&fence->base); + status =IRQ_HANDLED ; }
@@ -159,8 +165,10 @@ v3d_hub_irq(int irq, void *arg)to_v3d_fence (v3d->tfu_job->base.irq_fence);trace_v3d_tfu_irq (&v3d->drm, fence->seqno); -dma_fence_signal (&fence->base); + v3d->tfu_job =NULL ; +dma_fence_signal (&fence->base); + status =IRQ_HANDLED ; }
drivers/hid/hid-ids.h +0 -1
@@ -506,7 +506,6 @@#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100 0xe100#define I2C_VENDOR_ID_GOODIX 0x27c6 -#define I2C_DEVICE_ID_GOODIX_01E0 0x01e0#define I2C_DEVICE_ID_GOODIX_01E8 0x01e8#define I2C_DEVICE_ID_GOODIX_01E9 0x01e9#define I2C_DEVICE_ID_GOODIX_01F0 0x01f0
drivers/hid/hid-multitouch.c +2 -6
@@ -1447,8 +1447,7 @@ static __u8 *mt_report_fixup(struct hid_device *hdev, __u8 *rdesc, {if (hdev->vendor ==I2C_VENDOR_ID_GOODIX && (hdev->product ==I2C_DEVICE_ID_GOODIX_01E8 || - hdev->product ==I2C_DEVICE_ID_GOODIX_01E9 || - hdev->product ==I2C_DEVICE_ID_GOODIX_01E0 )) { + hdev->product ==I2C_DEVICE_ID_GOODIX_01E9 )) {if (rdesc[607 ] ==0x15 ) { rdesc[607 ] =0x25 ; dev_info(
@@ -2073,10 +2072,7 @@ static const struct hid_device_id mt_devices[] = { I2C_DEVICE_ID_GOODIX_01E8) }, { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,HID_DEVICE (BUS_I2C ,HID_GROUP_ANY ,I2C_VENDOR_ID_GOODIX , - I2C_DEVICE_ID_GOODIX_01E9) }, - { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU, -HID_DEVICE (BUS_I2C ,HID_GROUP_ANY ,I2C_VENDOR_ID_GOODIX , - I2C_DEVICE_ID_GOODIX_01E0) }, + I2C_DEVICE_ID_GOODIX_01E8) }, /* GoodTouch panels */ { .driver_data = MT_CLS_NSMU,
drivers/hwmon/drivetemp.c +1 -1
@@ -194,7 +194,7 @@ static int drivetemp_scsi_command(struct drivetemp_data *st, scsi_cmd[14 ] = ata_command; err =scsi_execute_cmd (st->sdev, scsi_cmd, op, st->smartdata, -ATA_SECT_SIZE ,HZ ,5 ,NULL ); +ATA_SECT_SIZE ,10 *HZ ,5 ,NULL );if (err >0 ) err = -EIO ;return err;
drivers/infiniband/hw/bnxt_re/main.c +10 -0
@@ -485,6 +485,8 @@ static void bnxt_re_set_default_pacing_data(struct bnxt_re_dev *rdev)static void __wait_for_fifo_occupancy_below_th (struct bnxt_re_dev *rdev) {u32 read_val, fifo_occup; +struct bnxt_qplib_db_pacing_data *pacing_data = rdev->qplib_res.pacing_data; +u32 retry_fifo_check =1000 ;/* loop shouldn't run infintely as the occupancy usually goes * below pacing algo threshold as soon as pacing kicks in.
@@ -500,6 +502,14 @@ static void __wait_for_fifo_occupancy_below_th(struct bnxt_re_dev *rdev)if (fifo_occup < rdev->qplib_res.pacing_data->pacing_th)break ; +if (!retry_fifo_check--) { +dev_info_once (rdev_to_dev (rdev), +"%s: fifo_occup = 0x%xfifo_max_depth = 0x%x pacing_th = 0x%x\n" , + __func__, fifo_occup, pacing_data->fifo_max_depth, + pacing_data->pacing_th); +break ; + } + } }
drivers/input/joystick/xpad.c +8 -1
@@ -150,6 +150,7 @@ static const struct xpad_device { { 0x045e, 0x028e, "Microsoft X-Box 360 pad", 0, XTYPE_XBOX360 }, { 0x045e, 0x028f, "Microsoft X-Box 360 pad v2", 0, XTYPE_XBOX360 }, { 0x045e, 0x0291, "Xbox 360 Wireless Receiver (XBOX)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W }, + { 0x045e, 0x02a9, "Xbox 360 Wireless Receiver (Unofficial)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W }, { 0x045e, 0x02d1, "Microsoft X-Box One pad", 0, XTYPE_XBOXONE }, { 0x045e, 0x02dd, "Microsoft X-Box One pad (Firmware 2015)", 0, XTYPE_XBOXONE }, { 0x045e, 0x02e3, "Microsoft X-Box One Elite pad", MAP_PADDLES, XTYPE_XBOXONE },
@@ -305,6 +306,7 @@ static const struct xpad_device { { 0x1689, 0xfe00, "Razer Sabertooth", 0, XTYPE_XBOX360 }, { 0x17ef, 0x6182, "Lenovo Legion Controller for Windows", 0, XTYPE_XBOX360 }, { 0x1949, 0x041a, "Amazon Game Controller", 0, XTYPE_XBOX360 }, + { 0x1a86, 0xe310, "QH Electronics Controller", 0, XTYPE_XBOX360 }, { 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 }, { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, { 0x1bad, 0x0130, "Ion Drum Rocker", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
@@ -372,16 +374,19 @@ static const struct xpad_device { { 0x294b, 0x3303, "Snakebyte GAMEPAD BASE X", 0, XTYPE_XBOXONE }, { 0x294b, 0x3404, "Snakebyte GAMEPAD RGB X", 0, XTYPE_XBOXONE }, { 0x2dc8, 0x2000, "8BitDo Pro 2 Wired Controller fox Xbox", 0, XTYPE_XBOXONE }, - { 0x2dc8, 0x3106, "8BitDo Pro 2 Wired Controller", 0, XTYPE_XBOX360 }, + { 0x2dc8, 0x3106, "8BitDo Ultimate Wireless / Pro 2 Wired Controller", 0, XTYPE_XBOX360 }, { 0x2dc8, 0x310a, "8BitDo Ultimate 2C Wireless Controller", 0, XTYPE_XBOX360 }, { 0x2e24, 0x0652, "Hyperkin Duke X-Box One pad", 0, XTYPE_XBOXONE }, { 0x31e3, 0x1100, "Wooting One", 0, XTYPE_XBOX360 }, { 0x31e3, 0x1200, "Wooting Two", 0, XTYPE_XBOX360 }, { 0x31e3, 0x1210, "Wooting Lekker", 0, XTYPE_XBOX360 }, { 0x31e3, 0x1220, "Wooting Two HE", 0, XTYPE_XBOX360 }, + { 0x31e3, 0x1230, "Wooting Two HE (ARM)", 0, XTYPE_XBOX360 }, { 0x31e3, 0x1300, "Wooting 60HE (AVR)", 0, XTYPE_XBOX360 }, { 0x31e3, 0x1310, "Wooting 60HE (ARM)", 0, XTYPE_XBOX360 }, { 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 }, + { 0x3285, 0x0646, "Nacon Pro Compact", 0, XTYPE_XBOXONE }, + { 0x3285, 0x0663, "Nacon Evol-X", 0, XTYPE_XBOXONE }, { 0x3537, 0x1004, "GameSir T4 Kaleid", 0, XTYPE_XBOX360 }, { 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX }, { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
@@ -513,6 +518,7 @@ static const struct usb_device_id xpad_table[] = {XPAD_XBOX360_VENDOR (0x1689 ),/* Razer Onza */ XPAD_XBOX360_VENDOR (0x17ef ),/* Lenovo */ XPAD_XBOX360_VENDOR (0x1949 ),/* Amazon controllers */ +XPAD_XBOX360_VENDOR (0x1a86 ),/* QH Electronics */ XPAD_XBOX360_VENDOR (0x1bad ),/* Harmonix Rock Band guitar and drums */ XPAD_XBOX360_VENDOR (0x20d6 ),/* PowerA controllers */ XPAD_XBOXONE_VENDOR(0x20d6), /* PowerA controllers */
@@ -528,6 +534,7 @@ static const struct usb_device_id xpad_table[] = {XPAD_XBOX360_VENDOR (0x2f24 ),/* GameSir controllers */ XPAD_XBOX360_VENDOR (0x31e3 ),/* Wooting Keyboards */ XPAD_XBOX360_VENDOR (0x3285 ),/* Nacon GC-100 */ +XPAD_XBOXONE_VENDOR (0x3285 ),/* Nacon Evol-X */ XPAD_XBOX360_VENDOR (0x3537 ),/* GameSir Controllers */ XPAD_XBOXONE_VENDOR(0x3537), /* GameSir Controllers */ { }
drivers/input/keyboard/atkbd.c +1 -1
@@ -89,7 +89,7 @@ static const unsigned short atkbd_set2_keycode[ATKBD_KEYMAP_SIZE] = {0 ,46 ,45 ,32 ,18 ,5 ,4 ,95 ,0 ,57 ,47 ,33 ,20 ,19 ,6 ,183 ,0 ,49 ,48 ,35 ,34 ,21 ,7 ,184 ,0 ,0 ,50 ,36 ,22 ,8 ,9 ,185 ,0 ,51 ,37 ,23 ,24 ,11 ,10 ,0 ,0 ,52 ,53 ,38 ,39 ,25 ,12 ,0 , -0 ,89 ,40 ,0 ,26 ,13 ,0 ,0 ,58 ,54 ,28 ,27 ,0 ,43 ,0 ,85 , +0 ,89 ,40 ,0 ,26 ,13 ,0 ,193 ,58 ,54 ,28 ,27 ,0 ,43 ,0 ,85 ,0 ,86 ,91 ,90 ,92 ,0 ,14 ,94 ,0 ,79 ,124 ,75 ,71 ,121 ,0 ,0 , 82, 83, 80, 76, 77, 72, 1, 69, 87, 78, 81, 74, 55, 73, 70, 99,
drivers/irqchip/irq-sunxi-nmi.c +2 -1
@@ -186,7 +186,8 @@ static int __init sunxi_sc_nmi_irq_init(struct device_node *node, gc->chip_types[0 ].chip.irq_unmask = irq_gc_mask_set_bit; gc->chip_types[0 ].chip.irq_eoi = irq_gc_ack_set_bit; gc->chip_types[0 ].chip.irq_set_type = sunxi_sc_nmi_set_type; - gc->chip_types[0 ].chip.flags =IRQCHIP_EOI_THREADED |IRQCHIP_EOI_IF_HANDLED ; + gc->chip_types[0 ].chip.flags =IRQCHIP_EOI_THREADED |IRQCHIP_EOI_IF_HANDLED | +IRQCHIP_SKIP_SET_WAKE ; gc->chip_types[0 ].regs.ack = reg_offs->pend; gc->chip_types[0 ].regs.mask = reg_offs->enable; gc->chip_types[0 ].regs.type = reg_offs->ctrl;
drivers/of/unittest-data/tests-platform.dtsi +13 -0
@@ -34,5 +34,18 @@ dev@100 { }; }; }; + + platform-tests-2 { + // No #address-cells or #size-cells + node { + #address-cells = <1>; + #size-cells = <1>; + + test-device@100 { + compatible = "test-sub-device"; + reg = <0x100 1>; + }; + }; + }; }; };
drivers/of/unittest.c +14 -0
@@ -1186,6 +1186,7 @@ static void __init of_unittest_bus_3cell_ranges(void)static void __init of_unittest_reg (void ) {struct device_node *np; +struct resource res;int ret;u64 addr, size;
@@ -1202,6 +1203,19 @@ static void __init of_unittest_reg(void) np, addr);of_node_put (np); + + np =of_find_node_by_path ("/testcase-data/platform-tests-2/node/test-device@100" ); +if (!np) { +pr_err ("missing testcase data\n" ); +return ; + } + + ret =of_address_to_resource (np,0 , &res); +unittest (ret == -EINVAL ,"of_address_to_resource(%pOF) expected error on untranslatable address\n" , + np); + +of_node_put (np); + }static void __init of_unittest_parse_interrupts (void )
drivers/scsi/scsi_transport_iscsi.c +3 -1
@@ -4103,7 +4103,7 @@ iscsi_if_rx(struct sk_buff *skb) } do { /* - * special case for GET_STATS: + * special case for GET_STATS, GET_CHAP and GET_HOST_STATS: * on success - sending reply and stats from * inside of if_recv_msg(), * on error - fall through.
@@ -4112,6 +4112,8 @@ iscsi_if_rx(struct sk_buff *skb)break ;if (ev->type ==ISCSI_UEVENT_GET_CHAP && !err)break ; +if (ev->type ==ISCSI_UEVENT_GET_HOST_STATS && !err) +break ; err =iscsi_if_send_reply (portid, nlh->nlmsg_type, ev,sizeof (*ev));if (err == -EAGAIN && --retries <0 ) {
drivers/scsi/storvsc_drv.c +7 -1
@@ -171,6 +171,12 @@ do { \ dev_warn(&(dev)->device, fmt, ##__VA_ARGS__); \ } while (0) +#define storvsc_log_ratelimited (dev, level, fmt, ...) \ +do { \ + if (do_logging(level)) \ + dev_warn_ratelimited(&(dev)->device, fmt, ##__VA_ARGS__); \ +} while (0) +struct vmscsi_request {u16 length;u8 srb_status;
@@ -1177,7 +1183,7 @@ static void storvsc_on_io_completion(struct storvsc_device *stor_device,int loglevel = (stor_pkt->vm_srb.cdb[0 ] ==TEST_UNIT_READY ) ?STORVSC_LOGGING_WARN :STORVSC_LOGGING_ERROR ; - storvsc_log(device, loglevel, + storvsc_log_ratelimited(device, loglevel, "tag#%d cmd 0x%x status: scsi 0x%x srb 0x%x hv 0x%x\n", scsi_cmd_to_rq(request->cmd)->tag, stor_pkt->vm_srb.cdb[0],
drivers/usb/gadget/function/u_serial.c +4 -4
@@ -1398,10 +1398,6 @@ void gserial_disconnect(struct gserial *gser)/* REVISIT as above: how best to track this? */ port->port_line_coding = gser->port_line_coding; -/* disable endpoints, aborting down any active I/O */ -usb_ep_disable (gser->out); -usb_ep_disable (gser->in); - port->port_usb =NULL ; gser->ioport =NULL ;if (port->port.count >0 ) {
@@ -1413,6 +1409,10 @@ void gserial_disconnect(struct gserial *gser)spin_unlock (&port->port_lock);spin_unlock_irqrestore (&serial_port_lock, flags); +/* disable endpoints, aborting down any active I/O */ +usb_ep_disable (gser->out); +usb_ep_disable (gser->in); +/* finally, free any unused/unusable I/O buffers */ spin_lock_irqsave (&port->port_lock, flags);if (port->port.count ==0 )
drivers/usb/serial/quatech2.c +1 -1
@@ -503,7 +503,7 @@ static void qt2_process_read_urb(struct urb *urb) newport = *(ch +3 ); -if (newport > serial->num_ports) { +if (newport >= serial->num_ports) {dev_err (&port->dev,"%s - port change to invalid port: %i\n" , __func__, newport);
drivers/vfio/platform/vfio_platform_common.c +10 -0
@@ -388,6 +388,11 @@ static ssize_t vfio_platform_read_mmio(struct vfio_platform_region *reg, {unsigned int done =0 ; +if (off >= reg->size) +return -EINVAL ; + + count =min_t (size_t, count, reg->size - off); +if (!reg->ioaddr) { reg->ioaddr =ioremap (reg->addr, reg->size);
@@ -467,6 +472,11 @@ static ssize_t vfio_platform_write_mmio(struct vfio_platform_region *reg, {unsigned int done =0 ; +if (off >= reg->size) +return -EINVAL ; + + count =min_t (size_t, count, reg->size - off); +if (!reg->ioaddr) { reg->ioaddr =ioremap (reg->addr, reg->size);
fs/ext4/super.c +2 -1
@@ -5366,6 +5366,8 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)INIT_LIST_HEAD (&sbi->s_orphan);/* unlinked but open files */ mutex_init (&sbi->s_orphan_lock); +spin_lock_init (&sbi->s_bdev_wb_lock); +ext4_fast_commit_init (sb); sb->s_root =NULL ;
@@ -5586,7 +5588,6 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)* Save the original bdev mapping's wb_err value which could be * used to detect the metadata async write error. */ -spin_lock_init (&sbi->s_bdev_wb_lock);errseq_check_and_advance (&sb->s_bdev->bd_inode->i_mapping->wb_err, &sbi->s_bdev_wb_err);EXT4_SB (sb)->s_mount_state |=EXT4_ORPHAN_FS ;
fs/gfs2/file.c +1 -0
@@ -251,6 +251,7 @@ static int do_gfs2_set_flags(struct inode *inode, u32 reqflags, u32 mask) error =filemap_fdatawait (inode->i_mapping);if (error) goto out; +truncate_inode_pages (inode->i_mapping,0 );if (new_flags &GFS2_DIF_JDATA )gfs2_ordered_del_inode (ip); }
fs/libfs.c +131 -46
271 lines not on this page · raw message
fs/smb/client/smb2inode.c +69 -23
162 lines not on this page · raw message
include/linux/fs.h +2 -0
@@ -3197,6 +3197,8 @@ struct offset_ctx {void simple_offset_init (struct offset_ctx *octx);int simple_offset_add (struct offset_ctx *octx,struct dentry *dentry);void simple_offset_remove (struct offset_ctx *octx,struct dentry *dentry); +int simple_offset_rename (struct inode *old_dir,struct dentry *old_dentry, +struct inode *new_dir,struct dentry *new_dentry); int simple_offset_rename_exchange(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir,
include/linux/seccomp.h +1 -1
@@ -70,10 +70,10 @@ struct seccomp_data;#ifdef CONFIG_HAVE_ARCH_SECCOMP_FILTER static inline int secure_computing (void ) {return 0 ; } -static inline int __secure_computing (const struct seccomp_data *sd) {return 0 ; }#else static inline void secure_computing_strict (int this_syscall) {return ; }#endif +static inline int __secure_computing (const struct seccomp_data *sd) {return 0 ; }static inline long prctl_get_seccomp (void ) {
mm/filemap.c +19 -0
@@ -4270,6 +4270,20 @@ static void filemap_cachestat(struct address_space *mapping,rcu_read_unlock (); } +/* +* See mincore: reveal pagecache information only for files +* that the calling process has write access to, or could (if +* tried) open for writing. +*/ +static inline bool can_do_cachestat (struct file *f) +{ +if (f->f_mode &FMODE_WRITE ) +return true; +if (inode_owner_or_capable (file_mnt_idmap (f),file_inode (f))) +return true; +return file_permission (f,MAY_WRITE ) ==0 ; +} +/* * The cachestat(2) system call. *
@@ -4329,6 +4343,11 @@ SYSCALL_DEFINE4(cachestat, unsigned int, fd,return -EOPNOTSUPP ; } +if (!can_do_cachestat (f.file)) { +fdput (f); +return -EPERM ; + } +if (flags !=0 ) {fdput (f);return -EINVAL ;
mm/shmem.c +1 -2
@@ -3434,8 +3434,7 @@ static int shmem_rename2(struct mnt_idmap *idmap,return error; } -simple_offset_remove (shmem_get_offset_ctx (old_dir), old_dentry); - error =simple_offset_add (shmem_get_offset_ctx (new_dir), old_dentry); + error =simple_offset_rename (old_dir, old_dentry, new_dir, new_dentry);if (error)return error;
net/ipv4/ip_tunnel.c +1 -1
@@ -218,7 +218,7 @@ static struct ip_tunnel *ip_tunnel_find(struct ip_tunnel_net *itn,struct ip_tunnel *t =NULL ;struct hlist_head *head =ip_bucket (itn, parms); -hlist_for_each_entry_rcu (t, head, hash_node) { +hlist_for_each_entry_rcu (t, head, hash_node,lockdep_rtnl_is_held ()) { if (local == t->parms.iph.saddr && remote == t->parms.iph.daddr && link == READ_ONCE(t->parms.link) &&
net/ipv6/ip6_fib.c +4 -4
@@ -1179,8 +1179,8 @@ static int fib6_add_rt2node(struct fib6_node *fn, struct fib6_info *rt,while (sibling) {if (sibling->fib6_metric == rt->fib6_metric &&rt6_qualify_for_ecmp (sibling)) { -list_add_tail (&rt->fib6_siblings, - &sibling->fib6_siblings); +list_add_tail_rcu (&rt->fib6_siblings, + &sibling->fib6_siblings);break ; } sibling = rcu_dereference_protected(sibling->fib6_next,
@@ -1241,7 +1241,7 @@ static int fib6_add_rt2node(struct fib6_node *fn, struct fib6_info *rt, fib6_siblings) sibling->fib6_nsiblings--; rt->fib6_nsiblings =0 ; -list_del_init (&rt->fib6_siblings); +list_del_rcu (&rt->fib6_siblings);rt6_multipath_rebalance (next_sibling);return err; }
@@ -1954,7 +1954,7 @@ static void fib6_del_route(struct fib6_table *table, struct fib6_node *fn, &rt->fib6_siblings, fib6_siblings) sibling->fib6_nsiblings--; rt->fib6_nsiblings =0 ; -list_del_init (&rt->fib6_siblings); +list_del_rcu (&rt->fib6_siblings);rt6_multipath_rebalance (next_sibling); }
net/ipv6/route.c +30 -15
112 lines not on this page · raw message
net/sched/sch_ets.c +2 -0
@@ -91,6 +91,8 @@ ets_class_from_arg(struct Qdisc *sch, unsigned long arg) {struct ets_sched *q =qdisc_priv (sch); +if (arg ==0 || arg > q->nbands) +return NULL ;return &q->classes[arg -1 ]; }
sound/soc/codecs/Kconfig +1 -0
@@ -2209,6 +2209,7 @@ config SND_SOC_WM8993 config SND_SOC_WM8994 tristate + depends on MFD_WM8994 config SND_SOC_WM8995 tristate
sound/soc/samsung/Kconfig +4 -2
@@ -127,8 +127,9 @@ config SND_SOC_SAMSUNG_TM2_WM5110 config SND_SOC_SAMSUNG_ARIES_WM8994 tristate "SoC I2S Audio support for WM8994 on Aries" - depends on SND_SOC_SAMSUNG && MFD_WM8994 && IIO && EXTCON + depends on SND_SOC_SAMSUNG && I2C && IIO && EXTCON select SND_SOC_BT_SCO + select MFD_WM8994 select SND_SOC_WM8994 select SND_SAMSUNG_I2S help
@@ -140,8 +141,9 @@ config SND_SOC_SAMSUNG_ARIES_WM8994 config SND_SOC_SAMSUNG_MIDAS_WM1811 tristate "SoC I2S Audio support for Midas boards" - depends on SND_SOC_SAMSUNG + depends on SND_SOC_SAMSUNG && I2C select SND_SAMSUNG_I2S + select MFD_WM8994 select SND_SOC_WM8994 help Say Y if you want to add support for SoC audio on the Midas boards.
sound/usb/quirks.c +2 -0
@@ -2139,6 +2139,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = { QUIRK_FLAG_CTL_MSG_DELAY_1M),DEVICE_FLG (0x0c45 ,0x6340 ,/* Sonix HD USB Camera */ QUIRK_FLAG_GET_SAMPLE_RATE ), +DEVICE_FLG (0x0d8c ,0x0014 ,/* USB Audio Device */ +QUIRK_FLAG_CTL_MSG_DELAY_1M ),DEVICE_FLG (0x0ecb ,0x205c ,/* JBL Quantum610 Wireless */ QUIRK_FLAG_FIXED_RATE ), DEVICE_FLG(0x0ecb, 0x2069, /* JBL Quantum810 Wireless */
tools/testing/selftests/net/Makefile +1 -0
@@ -91,6 +91,7 @@ TEST_PROGS += test_vxlan_mdb.sh TEST_PROGS += test_bridge_neigh_suppress.sh TEST_PROGS += test_vxlan_nolocalbypass.sh TEST_PROGS += test_bridge_backup_port.sh +TEST_PROGS += ipv6_route_update_soft_lockup.sh TEST_FILES := settings TEST_FILES += in_netns.sh lib.sh net_helper.sh setup_loopback.sh setup_veth.sh
tools/testing/selftests/net/ipv6_route_update_soft_lockup.sh new file +262 -0
262 lines not on this page · raw message