Linux 6.1.118
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.118 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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/loongarch/include/asm/loongarch.h | 2 arch/powerpc/platforms/powernv/opal-irqchip.c | 1 block/elevator.c | 4 crypto/algapi.c | 2 drivers/crypto/marvell/cesa/hash.c | 12 - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 14 - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 2 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_device.c | 4 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_process.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 4 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 4 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 4 drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 3 drivers/hid/hid-ids.h | 1 drivers/hid/hid-lenovo.c | 8 drivers/hid/hid-multitouch.c | 13 + drivers/irqchip/irq-mscc-ocelot.c | 4 drivers/md/raid10.c | 23 +- drivers/net/usb/qmi_wwan.c | 1 drivers/nvme/host/core.c | 31 +-- drivers/nvme/host/multipath.c | 33 +++ drivers/nvme/host/nvme.h | 1 drivers/nvme/host/tcp.c | 7 drivers/platform/x86/x86-android-tablets.c | 3 drivers/vdpa/ifcvf/ifcvf_base.c | 2 fs/ext4/super.c | 2 fs/ntfs3/inode.c | 9 fs/ocfs2/file.c | 9 include/net/bluetooth/hci_core.h | 3 io_uring/io_uring.c | 5 kernel/bpf/verifier.c | 4 kernel/trace/trace_uprobe.c | 86 +++++---- mm/slab_common.c | 2 net/9p/client.c | 12 + net/bluetooth/af_bluetooth.c | 10 - net/bluetooth/hci_conn.c | 154 +++++++++++++---- net/bluetooth/hci_core.c | 50 +---- net/bluetooth/hci_event.c | 20 +- net/bluetooth/hci_sync.c | 44 +--- net/bluetooth/l2cap_core.c | 9 net/bluetooth/mgmt.c | 15 + net/core/filter.c | 2 sound/Kconfig | 2 47 files changed, 393 insertions(+), 238 deletions(-)
Alessandro Zanni (1):
fs: Fix uninitialized value issue in from_kuid and from_kgid
Andrii Nakryiko (1):
uprobes: encapsulate preparation of uprobe args buffer
Greg Joyce (1):
nvme: disable CC.CRIME (NVME_CC_CRIME)
Greg Kroah-Hartman (6):
Revert "Bluetooth: fix use-after-free in accessing skb after sending it" Revert "Bluetooth: hci_sync: Fix overwriting request callback" Revert "Bluetooth: af_bluetooth: Fix deadlock"
Revert "Bluetooth: hci_core: Fix possible buffer overflow" Revert "Bluetooth: hci_conn: Consolidate code for aborting connections" Linux 6.1.118
Hagar Hemdan (1):
io_uring: fix possible deadlock in io_register_iowq_max_workers()
Hannes Reinecke (1):
nvme: tcp: avoid race between queue_lock lock and destroy
Hans de Goede (2):
HID: lenovo: Add support for Thinkpad X1 Tablet Gen 3 keyboard platform/x86: x86-android-tablets: Fix use after free on platform_device_register() errors
Herbert Xu (2):
crypto: api - Fix liveliness check in crypto_alg_tested
crypto: marvell/cesa - Disable hash algorithms
Ian Forbes (1):
drm/vmwgfx: Limit display layout ioctl array size to VMWGFX_NUM_DISPLAY_UNITS
Jiawei Ye (1):
bpf: Fix mismatched RCU unlock flavour in bpf_out_neigh_v6
Julian Vetter (1):
sound: Make CONFIG_SND depend on INDIRECT_IOMEM instead of UML
Keith Busch (1):
nvme-multipath: defer partition scanning
Kenneth Albanowski (1):
HID: multitouch: Add quirk for Logitech Bolt receiver w/ Casa touchpad
Konstantin Komarov (1):
fs/ntfs3: Fix general protection fault in run_is_mapped_full
Li Nan (1):
md/raid10: improve code of mrdev in raid10_sync_request
Linus Torvalds (1):
9p: fix slab cache name creation for real
Luiz Augusto von Dentz (1):
Bluetooth: L2CAP: Fix uaf in l2cap_connect
Michael Ellerman (1):
powerpc/powernv: Free name on error in opal_event_init()
Nilay Shroff (1):
nvme: make keep-alive synchronous operation
Pedro Falcato (1):
9p: Avoid creating multiple slab caches with the same name
Philip Yang (1):
drm/amdkfd: amdkfd_free_gtt_mem clear the correct pointer
Qiao Ma (1):
uprobe: avoid out-of-bounds memory access of fetching args
Qun-Wei Lin (1):
mm: krealloc: Fix MTE false alarm in __do_krealloc
Reinhard Speyerer (1):
net: usb: qmi_wwan: add Fibocom FG132 0x0112 composition
Rik van Riel (1):
bpf: use kvzmalloc to allocate BPF verifier environment
Sergey Matsievskiy (1):
irqchip/ocelot: Fix trigger register address
Stefan Blum (1):
HID: multitouch: Add support for B2402FVA track point
SurajSonawane2415 (1):
block: Fix elevator_get_default() checking for NULL q->tag_set
WangYuli (1):
HID: multitouch: Add quirk for HONOR MagicBook Art 14 touchpad
Xiaxi Shen (1):
ext4: fix timer use-after-free on failed mount
Yanteng Si (1):
LoongArch: Use "Exception return address" to comment ERA
Yuan Can (1):
vDPA/ifcvf: Fix pci_read_config_byte() return code handling
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 117 +SUBLEVEL = 118 EXTRAVERSION = NAME = Curry Ramen
arch/loongarch/include/asm/loongarch.h +1 -1
@@ -325,7 +325,7 @@ static __always_inline void iocsr_write64(u64 val, u32 reg)#define CSR_ESTAT_IS_WIDTH 15#define CSR_ESTAT_IS (_ULCAST_(0x7fff) << CSR_ESTAT_IS_SHIFT) -#define LOONGARCH_CSR_ERA 0x6/* ERA */ +#define LOONGARCH_CSR_ERA 0x6/* Exception return address */ #define LOONGARCH_CSR_BADV 0x7/* Bad virtual address */
arch/powerpc/platforms/powernv/opal-irqchip.c +1 -0
@@ -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 ; } }
block/elevator.c +2 -2
@@ -624,7 +624,7 @@ static 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; }
@@ -635,7 +635,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 &&
crypto/algapi.c +1 -1
@@ -341,7 +341,7 @@ void crypto_alg_tested(const char *name, int err) q->cra_flags |=CRYPTO_ALG_DEAD ; alg = test->adult; -if (list_empty (&alg->cra_list)) +if (crypto_is_dead (alg)) goto complete;if (err == -ECANCELED )
drivers/crypto/marvell/cesa/hash.c +6 -6
@@ -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,
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +7 -7
@@ -344,15 +344,15 @@ int amdgpu_amdkfd_alloc_gtt_mem(struct amdgpu_device *adev, size_t size,return r; } -void amdgpu_amdkfd_free_gtt_mem (struct amdgpu_device *adev,void *mem_obj) +void amdgpu_amdkfd_free_gtt_mem (struct amdgpu_device *adev,void **mem_obj) { -struct amdgpu_bo *bo = (struct amdgpu_bo *) mem_obj; +struct amdgpu_bo **bo = (struct amdgpu_bo **) mem_obj; -amdgpu_bo_reserve (bo, true); -amdgpu_bo_kunmap (bo); -amdgpu_bo_unpin (bo); -amdgpu_bo_unreserve (bo); -amdgpu_bo_unref (&(bo)); +amdgpu_bo_reserve (*bo, true); +amdgpu_bo_kunmap (*bo); +amdgpu_bo_unpin (*bo); +amdgpu_bo_unreserve (*bo); +amdgpu_bo_unref (bo); } int amdgpu_amdkfd_alloc_gws(struct amdgpu_device *adev, size_t size,
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +1 -1
@@ -210,7 +210,7 @@ int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem, struct mm_struct *mm)int amdgpu_amdkfd_alloc_gtt_mem (struct amdgpu_device *adev,size_t size,void **mem_obj,uint64_t *gpu_addr,void **cpu_ptr,bool mqd_gfx9); -void amdgpu_amdkfd_free_gtt_mem (struct amdgpu_device *adev,void *mem_obj); +void amdgpu_amdkfd_free_gtt_mem (struct amdgpu_device *adev,void **mem_obj);int amdgpu_amdkfd_alloc_gws (struct amdgpu_device *adev,size_t size,void **mem_obj);void amdgpu_amdkfd_free_gws (struct amdgpu_device *adev,void *mem_obj);
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +1 -1
@@ -408,7 +408,7 @@ static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p, err_create_queue:if (wptr_bo) -amdgpu_amdkfd_free_gtt_mem (dev->adev, wptr_bo); +amdgpu_amdkfd_free_gtt_mem (dev->adev, (void **)&wptr_bo); err_wptr_map_gart: err_alloc_doorbells: err_bind_process:
drivers/gpu/drm/amd/amdkfd/kfd_device.c +2 -2
@@ -673,7 +673,7 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, kfd_doorbell_error:kfd_gtt_sa_fini (kfd); kfd_gtt_sa_init_error: -amdgpu_amdkfd_free_gtt_mem (kfd->adev, kfd->gtt_mem); +amdgpu_amdkfd_free_gtt_mem (kfd->adev, &kfd->gtt_mem); alloc_gtt_mem_failure:if (kfd->gws)amdgpu_amdkfd_free_gws (kfd->adev, kfd->gws);
@@ -693,7 +693,7 @@ void kgd2kfd_device_exit(struct kfd_dev *kfd)kfd_doorbell_fini (kfd);ida_destroy (&kfd->doorbell_ida);kfd_gtt_sa_fini (kfd); -amdgpu_amdkfd_free_gtt_mem (kfd->adev, kfd->gtt_mem); +amdgpu_amdkfd_free_gtt_mem (kfd->adev, &kfd->gtt_mem);if (kfd->gws)amdgpu_amdkfd_free_gws (kfd->adev, kfd->gws); }
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +1 -1
@@ -2392,7 +2392,7 @@ static void deallocate_hiq_sdma_mqd(struct kfd_dev *dev, {WARN (!mqd,"No hiq sdma mqd trunk to free" ); -amdgpu_amdkfd_free_gtt_mem (dev->adev, mqd->gtt_mem); +amdgpu_amdkfd_free_gtt_mem (dev->adev, &mqd->gtt_mem); }void device_queue_manager_uninit (struct device_queue_manager *dqm)
drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c +1 -1
@@ -204,7 +204,7 @@ void kfd_free_mqd_cp(struct mqd_manager *mm, void *mqd, struct kfd_mem_obj *mqd_mem_obj) {if (mqd_mem_obj->gtt_mem) { -amdgpu_amdkfd_free_gtt_mem (mm->dev->adev, mqd_mem_obj->gtt_mem); +amdgpu_amdkfd_free_gtt_mem (mm->dev->adev, &mqd_mem_obj->gtt_mem);kfree (mqd_mem_obj); }else {kfd_gtt_sa_free (mm->dev, mqd_mem_obj);
drivers/gpu/drm/amd/amdkfd/kfd_process.c +1 -1
@@ -1052,7 +1052,7 @@ static void kfd_process_destroy_pdds(struct kfd_process *p)if (pdd->dev->shared_resources.enable_mes)amdgpu_amdkfd_free_gtt_mem (pdd->dev->adev, - pdd->proc_ctx_bo); + &pdd->proc_ctx_bo);/* * before destroying pdd, make sure to report availability * for auto suspend
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +2 -2
@@ -441,9 +441,9 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid)if (dev->shared_resources.enable_mes) {amdgpu_amdkfd_free_gtt_mem (dev->adev, - pqn->q->gang_ctx_bo); + &pqn->q->gang_ctx_bo);if (pqn->q->wptr_bo) -amdgpu_amdkfd_free_gtt_mem (dev->adev, pqn->q->wptr_bo); +amdgpu_amdkfd_free_gtt_mem (dev->adev, (void **)&pqn->q->wptr_bo); }uninit_queue (pqn->q);
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +2 -2
@@ -59,7 +59,7 @@#define VMWGFX_DRIVER_MINOR 20#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_MIN_INITIAL_WIDTH 1280
@@ -79,7 +79,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 +\
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +3 -1
@@ -2261,7 +2261,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;
@@ -2273,6 +2273,8 @@ int vmw_kms_update_layout_ioctl(struct drm_device *dev, void *data, VMWGFX_MIN_INITIAL_HEIGHT};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 );
drivers/gpu/drm/vmwgfx/vmwgfx_kms.h +0 -3
@@ -199,9 +199,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) \
drivers/hid/hid-ids.h +1 -0
@@ -859,6 +859,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
drivers/hid/hid-lenovo.c +8 -0
@@ -473,6 +473,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 ;
@@ -583,6 +584,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;
@@ -777,6 +779,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 ;
@@ -1059,6 +1062,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 ; }
@@ -1289,6 +1293,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 :
@@ -1375,6 +1380,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 ; }
@@ -1424,6 +1430,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) }, { } };
drivers/hid/hid-multitouch.c +13 -0
@@ -2020,6 +2020,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,
@@ -2089,6 +2093,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,
@@ -2131,6 +2140,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,
drivers/irqchip/irq-mscc-ocelot.c +2 -2
@@ -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, };
drivers/md/raid10.c +12 -11
@@ -3432,7 +3432,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;
@@ -3440,14 +3439,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 ; }
@@ -3481,7 +3479,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 ();
@@ -3568,7 +3567,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;
@@ -3613,7 +3612,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,
@@ -3639,12 +3638,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 ) {
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1431,6 +1431,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) */
drivers/nvme/host/core.c +15 -16
@@ -1231,10 +1231,9 @@ static void nvme_queue_keep_alive_work(struct nvme_ctrl *ctrl) nvme_keep_alive_work_period(ctrl)); } -static enum rq_end_io_ret nvme_keep_alive_end_io (struct request *rq, -blk_status_t status) +static void nvme_keep_alive_finish (struct request *rq, +blk_status_t status,struct nvme_ctrl *ctrl) { -struct nvme_ctrl *ctrl = rq->end_io_data;unsigned long flags;bool startka = false;unsigned long rtt = jiffies - (rq->deadline - rq->timeout);
@@ -1252,13 +1251,11 @@ static enum rq_end_io_ret nvme_keep_alive_end_io(struct request *rq, delay =0 ; } -blk_mq_free_request (rq); -if (status) {dev_err (ctrl->device,"failed nvme_keep_alive_end_io error=%d\n" , status); -return RQ_END_IO_NONE ; +return ; } ctrl->ka_last_check_time = jiffies;
@@ -1270,7 +1267,6 @@ static enum rq_end_io_ret nvme_keep_alive_end_io(struct request *rq,spin_unlock_irqrestore (&ctrl->lock, flags);if (startka)queue_delayed_work (nvme_wq, &ctrl->ka_work, delay); -return RQ_END_IO_NONE ; }static void nvme_keep_alive_work (struct work_struct *work)
@@ -1279,6 +1275,7 @@ static void nvme_keep_alive_work(struct work_struct *work) struct nvme_ctrl, ka_work);bool comp_seen = ctrl->comp_seen;struct request *rq; +blk_status_t status; ctrl->ka_last_check_time = jiffies;
@@ -1301,9 +1298,9 @@ static void nvme_keep_alive_work(struct work_struct *work)nvme_init_request (rq, &ctrl->ka_cmd); rq->timeout = ctrl->kato *HZ ; - rq->end_io = nvme_keep_alive_end_io; - rq->end_io_data = ctrl; -blk_execute_rq_nowait (rq, false); + status =blk_execute_rq (rq, false); +nvme_keep_alive_finish (rq, status, ctrl); +blk_mq_free_request (rq); }static void nvme_start_keep_alive (struct nvme_ctrl *ctrl)
@@ -2394,8 +2391,13 @@ int nvme_enable_ctrl(struct nvme_ctrl *ctrl)else ctrl->ctrl_config =NVME_CC_CSS_NVM ; -if (ctrl->cap &NVME_CAP_CRMS_CRWMS && ctrl->cap &NVME_CAP_CRMS_CRIMS ) - ctrl->ctrl_config |=NVME_CC_CRIME ; +/* +* Setting CRIME results in CSTS.RDY before the media is ready. This +* makes it possible for media related commands to return the error +* NVME_SC_ADMIN_COMMAND_MEDIA_NOT_READY. Until the driver is +* restructured to handle retries, disable CC.CRIME. +*/ + ctrl->ctrl_config &= ~NVME_CC_CRIME ; ctrl->ctrl_config |= (NVME_CTRL_PAGE_SHIFT -12 ) <<NVME_CC_MPS_SHIFT ; ctrl->ctrl_config |=NVME_CC_AMS_RR |NVME_CC_SHN_NONE ;
@@ -2430,10 +2432,7 @@ int nvme_enable_ctrl(struct nvme_ctrl *ctrl)* devices are known to get this wrong. Use the larger of the * two values. */ -if (ctrl->ctrl_config &NVME_CC_CRIME ) - ready_timeout =NVME_CRTO_CRIMT (crto); -else - ready_timeout =NVME_CRTO_CRWMT (crto); + ready_timeout =NVME_CRTO_CRWMT (crto);if (ready_timeout < timeout) dev_warn_once(ctrl->device, "bad crto:%x cap:%llx\n",
drivers/nvme/host/multipath.c +33 -0
@@ -463,6 +463,20 @@ static int nvme_add_ns_head_cdev(struct nvme_ns_head *head)return ret; } +static void nvme_partition_scan_work (struct work_struct *work) +{ +struct nvme_ns_head *head = + container_of(work, struct nvme_ns_head, partition_scan_work); + +if (WARN_ON_ONCE (!test_and_clear_bit (GD_SUPPRESS_PART_SCAN , + &head->disk->state))) +return ; + +mutex_lock (&head->disk->open_mutex); +bdev_disk_changed (head->disk, false); +mutex_unlock (&head->disk->open_mutex); +} +static void nvme_requeue_work (struct work_struct *work) { struct nvme_ns_head *head =
@@ -489,6 +503,7 @@ int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *head)bio_list_init (&head->requeue_list);spin_lock_init (&head->requeue_lock);INIT_WORK (&head->requeue_work, nvme_requeue_work); +INIT_WORK (&head->partition_scan_work, nvme_partition_scan_work);/* * Add a multipath node if the subsystems supports multiple controllers.
@@ -504,6 +519,16 @@ int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *head)return -ENOMEM ; head->disk->fops = &nvme_ns_head_ops; head->disk->private_data = head; + +/* +* We need to suppress the partition scan from occuring within the +* controller's scan_work context. If a path error occurs here, the IO +* will wait until a path becomes available or all paths are torn down, +* but that action also occurs within scan_work, so it would deadlock. +* Defer the partion scan to a different context that does not block +* scan_work. +*/ +set_bit (GD_SUPPRESS_PART_SCAN , &head->disk->state);sprintf (head->disk->disk_name,"nvme%dn%d" , ctrl->subsys->instance, head->instance);
@@ -552,6 +577,7 @@ static void nvme_mpath_set_live(struct nvme_ns *ns)return ; }nvme_add_ns_head_cdev (head); +kblockd_schedule_work (&head->partition_scan_work); }mutex_lock (&head->lock);
@@ -851,6 +877,12 @@ void nvme_mpath_shutdown_disk(struct nvme_ns_head *head)kblockd_schedule_work (&head->requeue_work);if (test_bit (NVME_NSHEAD_DISK_LIVE , &head->flags)) {nvme_cdev_del (&head->cdev, &head->cdev_device); +/* +* requeue I/O after NVME_NSHEAD_DISK_LIVE has been cleared +* to allow multipath to fail all I/O. +*/ +synchronize_srcu (&head->srcu); +kblockd_schedule_work (&head->requeue_work);del_gendisk (head->disk); } }
@@ -862,6 +894,7 @@ void nvme_mpath_remove_disk(struct nvme_ns_head *head)/* make sure all pending bios are cleaned up */ kblockd_schedule_work (&head->requeue_work);flush_work (&head->requeue_work); +flush_work (&head->partition_scan_work);put_disk (head->disk); }
drivers/nvme/host/nvme.h +1 -0
@@ -460,6 +460,7 @@ struct nvme_ns_head {struct bio_list requeue_list;spinlock_t requeue_lock;struct work_struct requeue_work; +struct work_struct partition_scan_work;struct mutex lock;unsigned long flags;#define NVME_NSHEAD_DISK_LIVE 0
drivers/nvme/host/tcp.c +4 -3
@@ -2495,10 +2495,11 @@ static int nvme_tcp_get_address(struct nvme_ctrl *ctrl, char *buf, int size) len =nvmf_get_address (ctrl, buf, size); +if (!test_bit (NVME_TCP_Q_LIVE , &queue->flags)) +return len; +mutex_lock (&queue->queue_lock); -if (!test_bit (NVME_TCP_Q_LIVE , &queue->flags)) - goto done; ret =kernel_getsockname (queue->sock, (struct sockaddr *)&src_addr);if (ret >0 ) {if (len >0 )
@@ -2506,7 +2507,7 @@ static int nvme_tcp_get_address(struct nvme_ctrl *ctrl, char *buf, int size) len +=scnprintf (buf + len, size - len,"%ssrc_addr=%pISc\n" , (len) ?"," :"" , &src_addr); } -done: +mutex_unlock (&queue->queue_lock);return len;
drivers/platform/x86/x86-android-tablets.c +2 -1
@@ -1853,8 +1853,9 @@ static __init int x86_android_tablet_init(void)for (i =0 ; i < pdev_count; i++) { pdevs[i] =platform_device_register_full (&dev_info->pdev_info[i]);if (IS_ERR (pdevs[i])) { + ret =PTR_ERR (pdevs[i]);x86_android_tablet_cleanup (); -return PTR_ERR (pdevs[i]); +return ret; } }
drivers/vdpa/ifcvf/ifcvf_base.c +1 -1
@@ -78,7 +78,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 ; }
fs/ext4/super.c +1 -1
@@ -5617,8 +5617,8 @@ failed_mount9: __maybe_unused failed_mount3:/* flush s_error_work before sbi destroy */ flush_work (&sbi->s_error_work); -del_timer_sync (&sbi->s_err_report);ext4_stop_mmpd (sbi); +del_timer_sync (&sbi->s_err_report);ext4_group_desc_free (sbi); failed_mount:if (sbi->s_chksum_driver)
fs/ntfs3/inode.c +9 -0
@@ -1646,6 +1646,15 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, le16_to_cpu(new_de->key_size), sbi);/* ni_unlock(dir_ni); will be called later. */ out6: + attr =ni_find_attr (ni,NULL ,NULL ,ATTR_EA ,NULL ,0 ,NULL ,NULL ); +if (attr && attr->non_res) { +/* Delete ATTR_EA, if non-resident. */ +struct runs_tree run; +run_init (&run); +attr_set_size (ni,ATTR_EA ,NULL ,0 , &run,0 ,NULL , false,NULL ); +run_close (&run); + } +if (rp_inserted)ntfs_remove_reparse (sbi,IO_REPARSE_TAG_SYMLINK , &new_de->ref);
fs/ocfs2/file.c +6 -3
@@ -1129,9 +1129,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))
include/net/bluetooth/hci_core.h +1 -2
@@ -544,7 +544,6 @@ struct hci_dev {__u32 req_status;__u32 req_result;struct sk_buff *req_skb; -struct sk_buff *req_rsp;void *smp_data;void *smp_bredr_data;
@@ -735,7 +734,6 @@ struct hci_conn {unsigned long flags;enum conn_reasons conn_reason; -__u8 abort_reason;__u32 clock;__u16 clock_accuracy;
@@ -755,6 +753,7 @@ struct hci_conn {struct delayed_work auto_accept_work;struct delayed_work idle_work;struct delayed_work le_conn_timeout; +struct work_struct le_scan_cleanup;struct device dev;struct dentry *debugfs;
io_uring/io_uring.c +5 -0
@@ -3921,8 +3921,10 @@ static __cold 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)))
@@ -3947,8 +3949,11 @@ static __cold 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; }
kernel/bpf/verifier.c +2 -2
@@ -15500,7 +15500,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;
@@ -15721,6 +15721,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; }
kernel/trace/trace_uprobe.c +46 -40
213 lines not on this page · raw message
mm/slab_common.c +1 -1
@@ -1325,7 +1325,7 @@ __do_krealloc(const void *p, size_t new_size, gfp_t flags)/* 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 (); }
net/9p/client.c +11 -1
@@ -967,8 +967,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 );
@@ -1026,15 +1028,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:
net/bluetooth/af_bluetooth.c +7 -3
@@ -307,11 +307,14 @@ int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,if (flags &MSG_OOB )return -EOPNOTSUPP ; +lock_sock (sk); + skb =skb_recv_datagram (sk, flags, &err);if (!skb) {if (sk->sk_shutdown &RCV_SHUTDOWN ) err =0 ; +release_sock (sk);return err; }
@@ -337,6 +340,8 @@ int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,skb_free_datagram (sk, skb); +release_sock (sk); +if (flags &MSG_TRUNC ) copied = skblen;
@@ -559,11 +564,10 @@ int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)if (sk->sk_state ==BT_LISTEN )return -EINVAL ; -spin_lock (&sk->sk_receive_queue.lock); +lock_sock (sk); skb =skb_peek (&sk->sk_receive_queue); amount = skb ? skb->len :0 ; -spin_unlock (&sk->sk_receive_queue.lock); - +release_sock (sk); err =put_user (amount, (int __user *)arg);break ;
net/bluetooth/hci_conn.c +124 -30
188 lines not on this page · raw message
net/bluetooth/hci_core.c +17 -33
108 lines not on this page · raw message
net/bluetooth/hci_event.c +10 -10
@@ -3789,7 +3789,7 @@ static void hci_remote_features_evt(struct hci_dev *hdev, void *data, goto unlock; } -if (!ev->status && !test_bit (HCI_CONN_MGMT_CONNECTED , &conn->flags)) { +if (!ev->status) {struct hci_cp_remote_name_req cp;memset (&cp,0 ,sizeof (cp));bacpy (&cp.bdaddr, &conn->dst);
@@ -4354,7 +4354,7 @@ static void hci_cmd_status_evt(struct hci_dev *hdev, void *data,* (since for this kind of commands there will not be a command * complete event). */ -if (ev->status || (hdev->req_skb && !hci_skb_event (hdev->req_skb))) { +if (ev->status || (hdev->sent_cmd && !hci_skb_event (hdev->sent_cmd))) {hci_req_cmd_complete (hdev, *opcode, ev->status, req_complete, req_complete_skb);if (hci_dev_test_flag (hdev,HCI_CMD_PENDING )) {
@@ -7171,10 +7171,10 @@ static void hci_le_meta_evt(struct hci_dev *hdev, void *data,bt_dev_dbg (hdev,"subevent 0x%2.2x" , ev->subevent);/* Only match event if command OGF is for LE */ -if (hdev->req_skb && -hci_opcode_ogf (hci_skb_opcode (hdev->req_skb)) ==0x08 && -hci_skb_event (hdev->req_skb) == ev->subevent) { - *opcode =hci_skb_opcode (hdev->req_skb); +if (hdev->sent_cmd && +hci_opcode_ogf (hci_skb_opcode (hdev->sent_cmd)) ==0x08 && +hci_skb_event (hdev->sent_cmd) == ev->subevent) { + *opcode =hci_skb_opcode (hdev->sent_cmd);hci_req_cmd_complete (hdev, *opcode,0x00 , req_complete, req_complete_skb); }
@@ -7561,10 +7561,10 @@ void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb) }/* Only match event if command OGF is not for LE */ -if (hdev->req_skb && -hci_opcode_ogf (hci_skb_opcode (hdev->req_skb)) !=0x08 && -hci_skb_event (hdev->req_skb) == event) { -hci_req_cmd_complete (hdev,hci_skb_opcode (hdev->req_skb), +if (hdev->sent_cmd && +hci_opcode_ogf (hci_skb_opcode (hdev->sent_cmd)) !=0x08 && +hci_skb_event (hdev->sent_cmd) == event) { +hci_req_cmd_complete (hdev,hci_skb_opcode (hdev->sent_cmd), status, &req_complete, &req_complete_skb); req_evt = event; }
net/bluetooth/hci_sync.c +11 -33
104 lines not on this page · raw message
net/bluetooth/l2cap_core.c +0 -9
@@ -4300,18 +4300,9 @@ static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn,static int l2cap_connect_req (struct l2cap_conn *conn,struct l2cap_cmd_hdr *cmd,u16 cmd_len,u8 *data) { -struct hci_dev *hdev = conn->hcon->hdev; -struct hci_conn *hcon = conn->hcon; -if (cmd_len <sizeof (struct l2cap_conn_req ))return -EPROTO ; -hci_dev_lock (hdev); -if (hci_dev_test_flag (hdev,HCI_MGMT ) && - !test_and_set_bit (HCI_CONN_MGMT_CONNECTED , &hcon->flags)) -mgmt_device_connected (hdev, hcon,NULL ,0 ); -hci_dev_unlock (hdev); -l2cap_connect (conn, cmd, data,L2CAP_CONN_RSP ,0 );return 0 ; }
net/bluetooth/mgmt.c +14 -1
@@ -3600,6 +3600,18 @@ static int pair_device(struct sock *sk, struct hci_dev *hdev, void *data,return err; } +static int abort_conn_sync (struct hci_dev *hdev,void *data) +{ +struct hci_conn *conn; +u16 handle =PTR_ERR (data); + + conn =hci_conn_hash_lookup_handle (hdev, handle); +if (!conn) +return 0 ; + +return hci_abort_conn_sync (hdev, conn,HCI_ERROR_REMOTE_USER_TERM ); +} +static int cancel_pair_device (struct sock *sk,struct hci_dev *hdev,void *data,u16 len) {
@@ -3650,7 +3662,8 @@ static int cancel_pair_device(struct sock *sk, struct hci_dev *hdev, void *data, le_addr_type(addr->type));if (conn->conn_reason ==CONN_REASON_PAIR_DEVICE ) -hci_abort_conn (conn,HCI_ERROR_REMOTE_USER_TERM ); +hci_cmd_sync_queue (hdev, abort_conn_sync,ERR_PTR (conn->handle), +NULL ); unlock:hci_dev_unlock (hdev);
net/core/filter.c +1 -1
@@ -2226,7 +2226,7 @@ static int bpf_out_neigh_v6(struct net *net, struct sk_buff *skb,rcu_read_unlock ();return ret; } -rcu_read_unlock_bh (); +rcu_read_unlock ();if (dst)IP6_INC_STATS (net,ip6_dst_idev (dst),IPSTATS_MIB_OUTNOROUTES ); out_drop:
sound/Kconfig +1 -1
@@ -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.