Skip to content

[CBR-79] Multiple CVE fixes #460

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 53 commits into
base: ciqcbr7_9
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
518aa79
kbuild: fix error when building from src rpm
thefossguy-ciq Jul 30, 2025
c422529
net/sched: sch_qfq: Fix race condition on qfq_aggregate
thefossguy-ciq Jul 30, 2025
e9aeb82
drm/amdgpu: Fix potential fence use-after-free v2
thefossguy-ciq Jul 30, 2025
c3ea26a
nvme-rdma: fix possible use-after-free in transport error_recovery work
thefossguy-ciq Jul 30, 2025
63c5b11
vt: keyboard: avoid signed integer overflow in k_ascii
thefossguy-ciq Jul 30, 2025
12a4d42
ALSA: rawmidi: Fix racy buffer resize under concurrent accesses
thefossguy-ciq Jul 30, 2025
a827da9
HID: make arrays usage and value to be the same
thefossguy-ciq Jul 30, 2025
d61d2a1
net: mac802154: Fix general protection fault
thefossguy-ciq Jul 30, 2025
031b21d
bpf: Fix integer overflow in prealloc_elems_and_freelist()
thefossguy-ciq Jul 30, 2025
e072eff
nfp: fix use-after-free in area_cache_get()
thefossguy-ciq Jul 30, 2025
821755f
Bluetooth: cmtp: fix file refcount when cmtp_attach_device fails
thefossguy-ciq Jul 30, 2025
809cb32
dm ioctl: prevent potential spectre v1 gadget
thefossguy-ciq Jul 30, 2025
a861dfd
RDMA/iwcm: Fix a use-after-free related to destroying CM IDs
thefossguy-ciq Jul 30, 2025
2741a8c
jfs: Fix array-index-out-of-bounds in diFree
thefossguy-ciq Jul 30, 2025
d7903b6
net: af_can: do not leave a dangling sk pointer in can_create()
thefossguy-ciq Jul 30, 2025
d462138
ext4: fix off-by-one error in do_split
thefossguy-ciq Jul 30, 2025
a59aae4
wifi: mac80211: Update skb's control block key in ieee80211_tx_dequeue()
thefossguy-ciq Jul 30, 2025
97e2a29
vlan: enforce underlying device type
thefossguy-ciq Jul 30, 2025
172b40d
iscsi_ibft: Fix UBSAN shift-out-of-bounds warning in ibft_attr_show_n…
thefossguy-ciq Jul 30, 2025
e6c9dca
security/keys: fix slab-out-of-bounds in key_task_permission
thefossguy-ciq Jul 30, 2025
05480a3
wifi: ath9k: add range check for conn_rsp_epid in htc_connect_service()
thefossguy-ciq Jul 30, 2025
f65e972
af_unix: fix lockdep positive in sk_diag_dump_icons()
thefossguy-ciq Jul 31, 2025
91f84cd
drm/vmwgfx: Fix invalid reads in fence signaled events
thefossguy-ciq Jul 31, 2025
f1e8412
drm/amdgpu: fix mc_data out-of-bounds read warning
thefossguy-ciq Jul 31, 2025
675327b
drm/amdgpu: fix ucode out-of-bounds read warning
thefossguy-ciq Jul 31, 2025
5557f4e
ACPI: sysfs: validate return type of _STR method
thefossguy-ciq Jul 31, 2025
7927b6c
ext4: no need to continue when the number of entries is 1
thefossguy-ciq Jul 31, 2025
7866084
ppp: fix ppp_async_encode() illegal access
thefossguy-ciq Jul 31, 2025
ff6f609
sch_hfsc: make hfsc_qlen_notify() idempotent
thefossguy-ciq Jul 31, 2025
c36ec90
i40e: fix MMIO write access to an invalid page in i40e_clear_hw
thefossguy-ciq Jul 31, 2025
9faaa7d
ipc: fix to protect IPCS lookups using RCU
thefossguy-ciq Jul 31, 2025
b8b6b48
scsi: lpfc: Use memcpy() for BIOS version
thefossguy-ciq Jul 31, 2025
581d0d7
ACPICA: Refuse to evaluate a method if arguments are missing
thefossguy-ciq Jul 31, 2025
42a5363
vsock/vmci: Clear the vmci transport packet properly when initializin…
thefossguy-ciq Jul 31, 2025
9d63ab6
wifi: carl9170: do not ping device which has failed to load firmware
thefossguy-ciq Jul 31, 2025
f7b458a
atm: clip: Fix infinite recursive call of clip_push().
thefossguy-ciq Jul 31, 2025
63eecad
usb: net: sierra: check for no status endpoint
thefossguy-ciq Jul 31, 2025
a3b3cef
HID: core: do not bypass hid_hw_raw_request
thefossguy-ciq Jul 31, 2025
aede36e
HID: core: ensure the allocated report buffer can contain the reserve…
thefossguy-ciq Jul 31, 2025
3dacbe7
Bluetooth: Fix slab-out-of-bounds read in hci_extended_inquiry_result…
thefossguy-ciq Jul 31, 2025
afe6657
i40e: Fix use-after-free in i40e_client_subtask()
thefossguy-ciq Jul 31, 2025
d7e35c4
ext4: fix kernel infoleak via ext4_extent_header
thefossguy-ciq Jul 31, 2025
3bcb33f
af_key: add __GFP_ZERO flag for compose_sadb_supported in function pf…
thefossguy-ciq Jul 31, 2025
3f61ae9
Bluetooth: L2CAP: fix use-after-free in l2cap_conn_del()
thefossguy-ciq Jul 31, 2025
3174a95
drivers: net: slip: fix NPD bug in sl_tx_timeout()
thefossguy-ciq Jul 31, 2025
c7d0dc7
hwmon: (coretemp) fix pci device refcount leak in nv1a_ram_new()
thefossguy-ciq Jul 31, 2025
a556f65
wifi: cfg80211: fix buffer overflow in elem comparison
thefossguy-ciq Jul 31, 2025
3410bd8
mac80211: fix potential double free on mesh join
thefossguy-ciq Jul 31, 2025
e3abd26
driver: base: fix UAF when driver_attach failed
thefossguy-ciq Jul 31, 2025
eb6d966
wifi: mac80211: fix use-after-free in chanctx code
thefossguy-ciq Jul 31, 2025
1aa0fe9
misc/vmw_vmci: fix an infoleak in vmci_host_do_receive_datagram()
thefossguy-ciq Jul 31, 2025
d87dc45
net: vmxnet3: fix possible use-after-free bugs in vmxnet3_rq_alloc_rx…
thefossguy-ciq Jul 31, 2025
ca78f82
smb: client: fix OOB in smbCalcSize()
thefossguy-ciq Jul 31, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -1208,6 +1208,7 @@ help:
@echo ' gtags - Generate GNU GLOBAL index'
@echo ' kernelrelease - Output the release version string'
@echo ' kernelversion - Output the version stored in Makefile'
@echo ' image_name - Output the image name'
@echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
echo ' (default: $(INSTALL_HDR_PATH))'; \
echo ''
Expand Down Expand Up @@ -1402,7 +1403,7 @@ export_report:
endif #ifeq ($(config-targets),1)
endif #ifeq ($(mixed-targets),1)

PHONY += checkstack kernelrelease kernelversion
PHONY += checkstack kernelrelease kernelversion image_name

# UML needs a little special treatment here. It wants to use the host
# toolchain, so needs $(SUBARCH) passed to checkstack.pl. Everyone
Expand All @@ -1423,6 +1424,9 @@ kernelrelease:
kernelversion:
@echo $(KERNELVERSION)

image_name:
@echo $(KBUILD_IMAGE)

# Clear a bunch of variables before executing the submake
tools/: FORCE
$(Q)mkdir -p $(objtree)/tools
Expand Down
7 changes: 7 additions & 0 deletions drivers/acpi/acpica/dsmethod.c
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,13 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
return_ACPI_STATUS(AE_NULL_OBJECT);
}

if (this_walk_state->num_operands < obj_desc->method.param_count) {
ACPI_ERROR((AE_INFO, "Missing argument for method [%4.4s]",
acpi_ut_get_node_name(method_node)));

return_ACPI_STATUS(AE_AML_UNINITIALIZED_ARG);
}

/* Init for new method, possibly wait on method mutex */

status = acpi_ds_begin_method_execution(method_node, obj_desc,
Expand Down
5 changes: 3 additions & 2 deletions drivers/acpi/device_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -520,8 +520,9 @@ int acpi_device_setup_files(struct acpi_device *dev)
* If device has _STR, 'description' file is created
*/
if (acpi_has_method(dev->handle, "_STR")) {
status = acpi_evaluate_object(dev->handle, "_STR",
NULL, &buffer);
status = acpi_evaluate_object_typed(dev->handle, "_STR",
NULL, &buffer,
ACPI_TYPE_BUFFER);
if (ACPI_FAILURE(status))
buffer.pointer = NULL;
dev->pnp.str_obj = buffer.pointer;
Expand Down
4 changes: 3 additions & 1 deletion drivers/base/bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -712,7 +712,7 @@ int bus_add_driver(struct device_driver *drv)
if (drv->bus->p->drivers_autoprobe) {
error = driver_attach(drv);
if (error)
goto out_unregister;
goto out_del_list;
}
module_add_driver(drv->owner, drv);

Expand Down Expand Up @@ -743,6 +743,8 @@ int bus_add_driver(struct device_driver *drv)

return 0;

out_del_list:
klist_del(&priv->knode_bus);
out_unregister:
kobject_put(&priv->kobj);
kfree(drv->p);
Expand Down
5 changes: 4 additions & 1 deletion drivers/firmware/iscsi_ibft.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,10 @@ static ssize_t ibft_attr_show_nic(void *data, int type, char *buf)
str += sprintf_ipaddr(str, nic->ip_addr);
break;
case ISCSI_BOOT_ETH_SUBNET_MASK:
val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1));
if (nic->subnet_mask_prefix > 32)
val = cpu_to_be32(~0);
else
val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1));
str += sprintf(str, "%pI4", &val);
break;
case ISCSI_BOOT_ETH_ORIGIN:
Expand Down
2 changes: 2 additions & 0 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
Original file line number Diff line number Diff line change
Expand Up @@ -1642,6 +1642,8 @@ int amdgpu_atombios_init_mc_reg_table(struct amdgpu_device *adev,
(u32)le32_to_cpu(*((u32 *)reg_data + j));
j++;
} else if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_EQU_PREV) {
if (i == 0)
continue;
reg_table->mc_reg_table_entry[num_ranges].mc_data[i] =
reg_table->mc_reg_table_entry[num_ranges].mc_data[i - 1];
}
Expand Down
3 changes: 3 additions & 0 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,9 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,
struct amdgpu_firmware_info *ucode;

id = fw_type_convert(cgs_device, type);
if (id >= AMDGPU_UCODE_ID_MAXIMUM)
return -EINVAL;

ucode = &adev->firmware.ucode[id];
if (ucode->fw == NULL)
return -EINVAL;
Expand Down
6 changes: 3 additions & 3 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1502,15 +1502,15 @@ static int amdgpu_cs_wait_all_fences(struct amdgpu_device *adev,
continue;

r = dma_fence_wait_timeout(fence, true, timeout);
if (r > 0 && fence->error)
r = fence->error;

dma_fence_put(fence);
if (r < 0)
return r;

if (r == 0)
break;

if (fence->error)
return fence->error;
}

memset(wait, 0, sizeof(*wait));
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
Original file line number Diff line number Diff line change
Expand Up @@ -1062,7 +1062,7 @@ static int vmw_event_fence_action_create(struct drm_file *file_priv,
}

event->event.base.type = DRM_VMW_EVENT_FENCE_SIGNALED;
event->event.base.length = sizeof(*event);
event->event.base.length = sizeof(event->event);
event->event.user_data = user_data;

ret = drm_event_reserve_init(dev, file_priv, &event->base, &event->event.base);
Expand Down
14 changes: 8 additions & 6 deletions drivers/hid/hid-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ EXPORT_SYMBOL_GPL(hid_register_report);
* Register a new field for this report.
*/

static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages, unsigned values)
static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages)
{
struct hid_field *field;

Expand All @@ -101,7 +101,7 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned

field = kzalloc((sizeof(struct hid_field) +
usages * sizeof(struct hid_usage) +
values * sizeof(unsigned)), GFP_KERNEL);
usages * sizeof(unsigned)), GFP_KERNEL);
if (!field)
return NULL;

Expand Down Expand Up @@ -253,7 +253,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
usages = max_t(unsigned, parser->local.usage_index,
parser->global.report_count);

field = hid_register_field(report, usages, parser->global.report_count);
field = hid_register_field(report, usages);
if (!field)
return 0;

Expand Down Expand Up @@ -1349,9 +1349,12 @@ u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags)
/*
* 7 extra bytes are necessary to achieve proper functionality
* of implement() working on 8 byte chunks
* 1 extra byte for the report ID if it is null (not used) so
* we can reserve that extra byte in the first position of the buffer
* when sending it to .raw_request()
*/

u32 len = hid_report_len(report) + 7;
u32 len = hid_report_len(report) + 7 + (report->id == 0);

return kmalloc(len, flags);
}
Expand Down Expand Up @@ -1427,8 +1430,7 @@ void __hid_request(struct hid_device *hid, struct hid_report *report,
if (reqtype == HID_REQ_SET_REPORT)
hid_output_report(report, buf);

ret = hid->ll_driver->raw_request(hid, report->id, buf, len,
report->type, reqtype);
ret = hid_hw_raw_request(hid, report->id, buf, len, report->type, reqtype);
if (ret < 0) {
dbg_hid("unable to complete request: %d\n", ret);
goto out;
Expand Down
5 changes: 4 additions & 1 deletion drivers/hwmon/coretemp.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,10 +255,13 @@ static int adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)
*/
if (host_bridge && host_bridge->vendor == PCI_VENDOR_ID_INTEL) {
for (i = 0; i < ARRAY_SIZE(tjmax_pci_table); i++) {
if (host_bridge->device == tjmax_pci_table[i].device)
if (host_bridge->device == tjmax_pci_table[i].device) {
pci_dev_put(host_bridge);
return tjmax_pci_table[i].tjmax;
}
}
}
pci_dev_put(host_bridge);

for (i = 0; i < ARRAY_SIZE(tjmax_table); i++) {
if (strstr(c->x86_model_id, tjmax_table[i].id))
Expand Down
11 changes: 7 additions & 4 deletions drivers/infiniband/core/iwcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -367,8 +367,10 @@ EXPORT_SYMBOL(iw_cm_disconnect);
*
* Clean up all resources associated with the connection and release
* the initial reference taken by iw_create_cm_id.
*
* Returns true if and only if the last cm_id_priv reference has been dropped.
*/
static void destroy_cm_id(struct iw_cm_id *cm_id)
static bool destroy_cm_id(struct iw_cm_id *cm_id)
{
struct iwcm_id_private *cm_id_priv;
unsigned long flags;
Expand Down Expand Up @@ -436,7 +438,7 @@ static void destroy_cm_id(struct iw_cm_id *cm_id)
iwpm_remove_mapping(&cm_id->local_addr, RDMA_NL_IWCM);
}

(void)iwcm_deref_id(cm_id_priv);
return iwcm_deref_id(cm_id_priv);
}

/*
Expand All @@ -447,7 +449,8 @@ static void destroy_cm_id(struct iw_cm_id *cm_id)
*/
void iw_destroy_cm_id(struct iw_cm_id *cm_id)
{
destroy_cm_id(cm_id);
if (!destroy_cm_id(cm_id))
flush_workqueue(iwcm_wq);
}
EXPORT_SYMBOL(iw_destroy_cm_id);

Expand Down Expand Up @@ -1024,7 +1027,7 @@ static void cm_work_handler(struct work_struct *_work)
if (!test_bit(IWCM_F_DROP_EVENTS, &cm_id_priv->flags)) {
ret = process_event(cm_id_priv, &levent);
if (ret)
destroy_cm_id(&cm_id_priv->id);
WARN_ON_ONCE(destroy_cm_id(&cm_id_priv->id));
} else
pr_debug("dropping event %d\n", levent.event);
if (iwcm_deref_id(cm_id_priv))
Expand Down
2 changes: 2 additions & 0 deletions drivers/md/dm-ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <linux/dm-ioctl.h>
#include <linux/hdreg.h>
#include <linux/compat.h>
#include <linux/nospec.h>

#include <asm/uaccess.h>

Expand Down Expand Up @@ -1667,6 +1668,7 @@ static ioctl_fn lookup_ioctl(unsigned int cmd, int *ioctl_flags)
if (unlikely(cmd >= ARRAY_SIZE(_ioctls)))
return NULL;

cmd = array_index_nospec(cmd, ARRAY_SIZE(_ioctls));
*ioctl_flags = _ioctls[cmd].flags;
return _ioctls[cmd].fn;
}
Expand Down
2 changes: 2 additions & 0 deletions drivers/misc/vmw_vmci/vmci_queue_pair.c
Original file line number Diff line number Diff line change
Expand Up @@ -938,6 +938,7 @@ static int qp_notify_peer_local(bool attach, struct vmci_handle handle)
u32 context_id = vmci_get_context_id();
struct vmci_event_qp ev;

memset(&ev, 0, sizeof(ev));
ev.msg.hdr.dst = vmci_make_handle(context_id, VMCI_EVENT_HANDLER);
ev.msg.hdr.src = vmci_make_handle(VMCI_HYPERVISOR_CONTEXT_ID,
VMCI_CONTEXT_RESOURCE_ID);
Expand Down Expand Up @@ -1549,6 +1550,7 @@ static int qp_notify_peer(bool attach,
* kernel.
*/

memset(&ev, 0, sizeof(ev));
ev.msg.hdr.dst = vmci_make_handle(peer_id, VMCI_EVENT_HANDLER);
ev.msg.hdr.src = vmci_make_handle(VMCI_HYPERVISOR_CONTEXT_ID,
VMCI_CONTEXT_RESOURCE_ID);
Expand Down
1 change: 1 addition & 0 deletions drivers/net/ethernet/intel/i40e/i40e_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@ void i40e_client_subtask(struct i40e_pf *pf)
clear_bit(__I40E_CLIENT_INSTANCE_OPENED,
&cdev->state);
i40e_client_del_instance(pf);
return;
}
}
}
Expand Down
7 changes: 4 additions & 3 deletions drivers/net/ethernet/intel/i40e/i40e_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -1322,10 +1322,11 @@ i40e_status i40e_pf_reset(struct i40e_hw *hw)
void i40e_clear_hw(struct i40e_hw *hw)
{
u32 num_queues, base_queue;
u32 num_pf_int;
u32 num_vf_int;
s32 num_pf_int;
s32 num_vf_int;
u32 num_vfs;
u32 i, j;
s32 i;
u32 j;
u32 val;
u32 eol = 0x7ff;

Expand Down
3 changes: 2 additions & 1 deletion drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c
Original file line number Diff line number Diff line change
Expand Up @@ -873,7 +873,6 @@ area_cache_get(struct nfp_cpp *cpp, u32 id,
}

/* Adjust the start address to be cache size aligned */
cache->id = id;
cache->addr = addr & ~(u64)(cache->size - 1);

/* Re-init to the new ID and address */
Expand All @@ -893,6 +892,8 @@ area_cache_get(struct nfp_cpp *cpp, u32 id,
return NULL;
}

cache->id = id;

exit:
/* Adjust offset */
*offset = addr - cache->addr;
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/ppp/ppp_async.c
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@ ppp_async_encode(struct asyncppp *ap)
* and 7 (code-reject) must be sent as though no options
* had been negotiated.
*/
islcp = proto == PPP_LCP && 1 <= data[2] && data[2] <= 7;
islcp = proto == PPP_LCP && count >= 3 && 1 <= data[2] && data[2] <= 7;

if (i == 0) {
if (islcp)
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/slip/slip.c
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ static void sl_tx_timeout(struct net_device *dev)
spin_lock(&sl->lock);

if (netif_queue_stopped(dev)) {
if (!netif_running(dev))
if (!netif_running(dev) || !sl->tty)
goto out;

/* May be we must check transmitter timeout here ?
Expand Down
4 changes: 4 additions & 0 deletions drivers/net/usb/sierra_net.c
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,10 @@ static int sierra_net_bind(struct usbnet *dev, struct usb_interface *intf)
status);
return -ENODEV;
}
if (!dev->status) {
dev_err(&dev->udev->dev, "No status endpoint found");
return -ENODEV;
}
/* Initialize sierra private data */
priv = kzalloc(sizeof *priv, GFP_KERNEL);
if (!priv)
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/vmxnet3/vmxnet3_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,7 @@ vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,
if (dma_mapping_error(&adapter->pdev->dev,
rbi->dma_addr)) {
dev_kfree_skb_any(rbi->skb);
rbi->skb = NULL;
rq->stats.rx_buf_alloc_failure++;
break;
}
Expand All @@ -619,6 +620,7 @@ vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,
if (dma_mapping_error(&adapter->pdev->dev,
rbi->dma_addr)) {
put_page(rbi->page);
rbi->page = NULL;
rq->stats.rx_buf_alloc_failure++;
break;
}
Expand Down
3 changes: 3 additions & 0 deletions drivers/net/wireless/ath/ath9k/htc_hst.c
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,9 @@ int htc_connect_service(struct htc_target *target,
return -ETIMEDOUT;
}

if (target->conn_rsp_epid < 0 || target->conn_rsp_epid >= ENDPOINT_MAX)
return -EINVAL;

*conn_rsp_epid = target->conn_rsp_epid;
return 0;
err:
Expand Down
19 changes: 13 additions & 6 deletions drivers/net/wireless/ath/carl9170/usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -436,14 +436,21 @@ static void carl9170_usb_rx_complete(struct urb *urb)

if (atomic_read(&ar->rx_anch_urbs) == 0) {
/*
* The system is too slow to cope with
* the enormous workload. We have simply
* run out of active rx urbs and this
* unfortunately leads to an unpredictable
* device.
* At this point, either the system is too slow to
* cope with the enormous workload (so we have simply
* run out of active rx urbs and this unfortunately
* leads to an unpredictable device), or the device
* is not fully functional after an unsuccessful
* firmware loading attempts (so it doesn't pass
* ieee80211_register_hw() and there is no internal
* workqueue at all).
*/

ieee80211_queue_work(ar->hw, &ar->ping_work);
if (ar->registered)
ieee80211_queue_work(ar->hw, &ar->ping_work);
else
pr_warn_once("device %s is not registered\n",
dev_name(&ar->udev->dev));
}
} else {
/*
Expand Down
1 change: 1 addition & 0 deletions drivers/nvme/host/rdma.c
Original file line number Diff line number Diff line change
Expand Up @@ -1060,6 +1060,7 @@ static void nvme_rdma_error_recovery_work(struct work_struct *work)
struct nvme_rdma_ctrl, err_work);

nvme_stop_keep_alive(&ctrl->ctrl);
flush_work(&ctrl->ctrl.async_event_work);
nvme_rdma_teardown_io_queues(ctrl, false);
nvme_start_queues(&ctrl->ctrl);
nvme_rdma_teardown_admin_queue(ctrl, false);
Expand Down
Loading