Import of kernel-5.14.0-570.55.1.el9_6
This commit is contained in:
parent
434c65763c
commit
fdf04f711e
@ -12,7 +12,7 @@ RHEL_MINOR = 6
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 570.52.1
|
||||
RHEL_RELEASE = 570.55.1
|
||||
|
||||
#
|
||||
# ZSTREAM
|
||||
|
@ -815,7 +815,7 @@ static int scpi_init_versions(struct scpi_drvinfo *info)
|
||||
info->firmware_version = le32_to_cpu(caps.platform_version);
|
||||
}
|
||||
/* Ignore error if not implemented */
|
||||
if (scpi_info->is_legacy && ret == -EOPNOTSUPP)
|
||||
if (info->is_legacy && ret == -EOPNOTSUPP)
|
||||
return 0;
|
||||
|
||||
return ret;
|
||||
@ -913,13 +913,14 @@ static int scpi_probe(struct platform_device *pdev)
|
||||
struct resource res;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np = dev->of_node;
|
||||
struct scpi_drvinfo *scpi_drvinfo;
|
||||
|
||||
scpi_info = devm_kzalloc(dev, sizeof(*scpi_info), GFP_KERNEL);
|
||||
if (!scpi_info)
|
||||
scpi_drvinfo = devm_kzalloc(dev, sizeof(*scpi_drvinfo), GFP_KERNEL);
|
||||
if (!scpi_drvinfo)
|
||||
return -ENOMEM;
|
||||
|
||||
if (of_match_device(legacy_scpi_of_match, &pdev->dev))
|
||||
scpi_info->is_legacy = true;
|
||||
scpi_drvinfo->is_legacy = true;
|
||||
|
||||
count = of_count_phandle_with_args(np, "mboxes", "#mbox-cells");
|
||||
if (count < 0) {
|
||||
@ -927,19 +928,19 @@ static int scpi_probe(struct platform_device *pdev)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
scpi_info->channels = devm_kcalloc(dev, count, sizeof(struct scpi_chan),
|
||||
GFP_KERNEL);
|
||||
if (!scpi_info->channels)
|
||||
scpi_drvinfo->channels =
|
||||
devm_kcalloc(dev, count, sizeof(struct scpi_chan), GFP_KERNEL);
|
||||
if (!scpi_drvinfo->channels)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = devm_add_action(dev, scpi_free_channels, scpi_info);
|
||||
ret = devm_add_action(dev, scpi_free_channels, scpi_drvinfo);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for (; scpi_info->num_chans < count; scpi_info->num_chans++) {
|
||||
for (; scpi_drvinfo->num_chans < count; scpi_drvinfo->num_chans++) {
|
||||
resource_size_t size;
|
||||
int idx = scpi_info->num_chans;
|
||||
struct scpi_chan *pchan = scpi_info->channels + idx;
|
||||
int idx = scpi_drvinfo->num_chans;
|
||||
struct scpi_chan *pchan = scpi_drvinfo->channels + idx;
|
||||
struct mbox_client *cl = &pchan->cl;
|
||||
struct device_node *shmem = of_parse_phandle(np, "shmem", idx);
|
||||
|
||||
@ -986,45 +987,53 @@ static int scpi_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
scpi_info->commands = scpi_std_commands;
|
||||
scpi_drvinfo->commands = scpi_std_commands;
|
||||
|
||||
platform_set_drvdata(pdev, scpi_info);
|
||||
platform_set_drvdata(pdev, scpi_drvinfo);
|
||||
|
||||
if (scpi_info->is_legacy) {
|
||||
if (scpi_drvinfo->is_legacy) {
|
||||
/* Replace with legacy variants */
|
||||
scpi_ops.clk_set_val = legacy_scpi_clk_set_val;
|
||||
scpi_info->commands = scpi_legacy_commands;
|
||||
scpi_drvinfo->commands = scpi_legacy_commands;
|
||||
|
||||
/* Fill priority bitmap */
|
||||
for (idx = 0; idx < ARRAY_SIZE(legacy_hpriority_cmds); idx++)
|
||||
set_bit(legacy_hpriority_cmds[idx],
|
||||
scpi_info->cmd_priority);
|
||||
scpi_drvinfo->cmd_priority);
|
||||
}
|
||||
|
||||
ret = scpi_init_versions(scpi_info);
|
||||
scpi_info = scpi_drvinfo;
|
||||
|
||||
ret = scpi_init_versions(scpi_drvinfo);
|
||||
if (ret) {
|
||||
dev_err(dev, "incorrect or no SCP firmware found\n");
|
||||
scpi_info = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (scpi_info->is_legacy && !scpi_info->protocol_version &&
|
||||
!scpi_info->firmware_version)
|
||||
if (scpi_drvinfo->is_legacy && !scpi_drvinfo->protocol_version &&
|
||||
!scpi_drvinfo->firmware_version)
|
||||
dev_info(dev, "SCP Protocol legacy pre-1.0 firmware\n");
|
||||
else
|
||||
dev_info(dev, "SCP Protocol %lu.%lu Firmware %lu.%lu.%lu version\n",
|
||||
FIELD_GET(PROTO_REV_MAJOR_MASK,
|
||||
scpi_info->protocol_version),
|
||||
scpi_drvinfo->protocol_version),
|
||||
FIELD_GET(PROTO_REV_MINOR_MASK,
|
||||
scpi_info->protocol_version),
|
||||
scpi_drvinfo->protocol_version),
|
||||
FIELD_GET(FW_REV_MAJOR_MASK,
|
||||
scpi_info->firmware_version),
|
||||
scpi_drvinfo->firmware_version),
|
||||
FIELD_GET(FW_REV_MINOR_MASK,
|
||||
scpi_info->firmware_version),
|
||||
scpi_drvinfo->firmware_version),
|
||||
FIELD_GET(FW_REV_PATCH_MASK,
|
||||
scpi_info->firmware_version));
|
||||
scpi_info->scpi_ops = &scpi_ops;
|
||||
scpi_drvinfo->firmware_version));
|
||||
|
||||
return devm_of_platform_populate(dev);
|
||||
scpi_drvinfo->scpi_ops = &scpi_ops;
|
||||
|
||||
ret = devm_of_platform_populate(dev);
|
||||
if (ret)
|
||||
scpi_info = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct of_device_id scpi_of_match[] = {
|
||||
|
@ -255,6 +255,8 @@ static void irdma_remove(struct auxiliary_device *aux_dev)
|
||||
ice_rdma_update_vsi_filter(pf, iwdev->vsi_num, false);
|
||||
irdma_deinit_interrupts(iwdev->rf, pf);
|
||||
|
||||
kfree(iwdev->rf);
|
||||
|
||||
pr_debug("INIT: Gen2 PF[%d] device remove success\n", PCI_FUNC(pf->pdev->devfn));
|
||||
}
|
||||
|
||||
|
@ -4871,5 +4871,4 @@ void irdma_ib_dealloc_device(struct ib_device *ibdev)
|
||||
|
||||
irdma_rt_deinit_hw(iwdev);
|
||||
irdma_ctrl_deinit_hw(iwdev->rf);
|
||||
kfree(iwdev->rf);
|
||||
}
|
||||
|
@ -2122,9 +2122,7 @@ static void ibmvnic_tx_scrq_clean_buffer(struct ibmvnic_adapter *adapter,
|
||||
tx_pool->num_buffers - 1 :
|
||||
tx_pool->consumer_index - 1;
|
||||
tx_buff = &tx_pool->tx_buff[index];
|
||||
adapter->netdev->stats.tx_packets--;
|
||||
adapter->netdev->stats.tx_bytes -= tx_buff->skb->len;
|
||||
adapter->tx_stats_buffers[queue_num].packets--;
|
||||
adapter->tx_stats_buffers[queue_num].batched_packets--;
|
||||
adapter->tx_stats_buffers[queue_num].bytes -=
|
||||
tx_buff->skb->len;
|
||||
dev_kfree_skb_any(tx_buff->skb);
|
||||
@ -2227,7 +2225,8 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
unsigned int tx_map_failed = 0;
|
||||
union sub_crq indir_arr[16];
|
||||
unsigned int tx_dropped = 0;
|
||||
unsigned int tx_packets = 0;
|
||||
unsigned int tx_dpackets = 0;
|
||||
unsigned int tx_bpackets = 0;
|
||||
unsigned int tx_bytes = 0;
|
||||
dma_addr_t data_dma_addr;
|
||||
struct netdev_queue *txq;
|
||||
@ -2399,6 +2398,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
if (lpar_rc != H_SUCCESS)
|
||||
goto tx_err;
|
||||
|
||||
tx_dpackets++;
|
||||
goto early_exit;
|
||||
}
|
||||
|
||||
@ -2426,6 +2426,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
if (lpar_rc != H_SUCCESS)
|
||||
goto tx_err;
|
||||
}
|
||||
tx_bpackets++;
|
||||
|
||||
early_exit:
|
||||
if (atomic_add_return(num_entries, &tx_scrq->used)
|
||||
@ -2434,7 +2435,6 @@ early_exit:
|
||||
netif_stop_subqueue(netdev, queue_num);
|
||||
}
|
||||
|
||||
tx_packets++;
|
||||
tx_bytes += skb->len;
|
||||
txq_trans_cond_update(txq);
|
||||
ret = NETDEV_TX_OK;
|
||||
@ -2462,12 +2462,10 @@ tx_err:
|
||||
}
|
||||
out:
|
||||
rcu_read_unlock();
|
||||
netdev->stats.tx_dropped += tx_dropped;
|
||||
netdev->stats.tx_bytes += tx_bytes;
|
||||
netdev->stats.tx_packets += tx_packets;
|
||||
adapter->tx_send_failed += tx_send_failed;
|
||||
adapter->tx_map_failed += tx_map_failed;
|
||||
adapter->tx_stats_buffers[queue_num].packets += tx_packets;
|
||||
adapter->tx_stats_buffers[queue_num].batched_packets += tx_bpackets;
|
||||
adapter->tx_stats_buffers[queue_num].direct_packets += tx_dpackets;
|
||||
adapter->tx_stats_buffers[queue_num].bytes += tx_bytes;
|
||||
adapter->tx_stats_buffers[queue_num].dropped_packets += tx_dropped;
|
||||
|
||||
@ -3266,6 +3264,25 @@ err:
|
||||
return -ret;
|
||||
}
|
||||
|
||||
static void ibmvnic_get_stats64(struct net_device *netdev,
|
||||
struct rtnl_link_stats64 *stats)
|
||||
{
|
||||
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < adapter->req_rx_queues; i++) {
|
||||
stats->rx_packets += adapter->rx_stats_buffers[i].packets;
|
||||
stats->rx_bytes += adapter->rx_stats_buffers[i].bytes;
|
||||
}
|
||||
|
||||
for (i = 0; i < adapter->req_tx_queues; i++) {
|
||||
stats->tx_packets += adapter->tx_stats_buffers[i].batched_packets;
|
||||
stats->tx_packets += adapter->tx_stats_buffers[i].direct_packets;
|
||||
stats->tx_bytes += adapter->tx_stats_buffers[i].bytes;
|
||||
stats->tx_dropped += adapter->tx_stats_buffers[i].dropped_packets;
|
||||
}
|
||||
}
|
||||
|
||||
static void ibmvnic_tx_timeout(struct net_device *dev, unsigned int txqueue)
|
||||
{
|
||||
struct ibmvnic_adapter *adapter = netdev_priv(dev);
|
||||
@ -3381,8 +3398,6 @@ restart_poll:
|
||||
|
||||
length = skb->len;
|
||||
napi_gro_receive(napi, skb); /* send it up */
|
||||
netdev->stats.rx_packets++;
|
||||
netdev->stats.rx_bytes += length;
|
||||
adapter->rx_stats_buffers[scrq_num].packets++;
|
||||
adapter->rx_stats_buffers[scrq_num].bytes += length;
|
||||
frames_processed++;
|
||||
@ -3492,6 +3507,7 @@ static const struct net_device_ops ibmvnic_netdev_ops = {
|
||||
.ndo_set_rx_mode = ibmvnic_set_multi,
|
||||
.ndo_set_mac_address = ibmvnic_set_mac,
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_get_stats64 = ibmvnic_get_stats64,
|
||||
.ndo_tx_timeout = ibmvnic_tx_timeout,
|
||||
.ndo_change_mtu = ibmvnic_change_mtu,
|
||||
.ndo_features_check = ibmvnic_features_check,
|
||||
@ -3656,7 +3672,10 @@ static void ibmvnic_get_strings(struct net_device *dev, u32 stringset, u8 *data)
|
||||
memcpy(data, ibmvnic_stats[i].name, ETH_GSTRING_LEN);
|
||||
|
||||
for (i = 0; i < adapter->req_tx_queues; i++) {
|
||||
snprintf(data, ETH_GSTRING_LEN, "tx%d_packets", i);
|
||||
snprintf(data, ETH_GSTRING_LEN, "tx%d_batched_packets", i);
|
||||
data += ETH_GSTRING_LEN;
|
||||
|
||||
snprintf(data, ETH_GSTRING_LEN, "tx%d_direct_packets", i);
|
||||
data += ETH_GSTRING_LEN;
|
||||
|
||||
snprintf(data, ETH_GSTRING_LEN, "tx%d_bytes", i);
|
||||
@ -3734,7 +3753,9 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
|
||||
(adapter, ibmvnic_stats[i].offset));
|
||||
|
||||
for (j = 0; j < adapter->req_tx_queues; j++) {
|
||||
data[i] = adapter->tx_stats_buffers[j].packets;
|
||||
data[i] = adapter->tx_stats_buffers[j].batched_packets;
|
||||
i++;
|
||||
data[i] = adapter->tx_stats_buffers[j].direct_packets;
|
||||
i++;
|
||||
data[i] = adapter->tx_stats_buffers[j].bytes;
|
||||
i++;
|
||||
|
@ -176,20 +176,25 @@ struct ibmvnic_statistics {
|
||||
u8 reserved[72];
|
||||
} __packed __aligned(8);
|
||||
|
||||
#define NUM_TX_STATS 3
|
||||
struct ibmvnic_tx_queue_stats {
|
||||
u64 packets;
|
||||
u64 batched_packets;
|
||||
u64 direct_packets;
|
||||
u64 bytes;
|
||||
u64 dropped_packets;
|
||||
};
|
||||
|
||||
#define NUM_RX_STATS 3
|
||||
#define NUM_TX_STATS \
|
||||
(sizeof(struct ibmvnic_tx_queue_stats) / sizeof(u64))
|
||||
|
||||
struct ibmvnic_rx_queue_stats {
|
||||
u64 packets;
|
||||
u64 bytes;
|
||||
u64 interrupts;
|
||||
};
|
||||
|
||||
#define NUM_RX_STATS \
|
||||
(sizeof(struct ibmvnic_rx_queue_stats) / sizeof(u64))
|
||||
|
||||
struct ibmvnic_acl_buffer {
|
||||
__be32 len;
|
||||
__be32 version;
|
||||
|
@ -165,7 +165,7 @@ static int tpmi_get_logical_id(unsigned int cpu, struct tpmi_cpu_info *info)
|
||||
|
||||
info->punit_thread_id = FIELD_GET(LP_ID_MASK, data);
|
||||
info->punit_core_id = FIELD_GET(MODULE_ID_MASK, data);
|
||||
info->pkg_id = topology_physical_package_id(cpu);
|
||||
info->pkg_id = topology_logical_package_id(cpu);
|
||||
info->linux_cpu = cpu;
|
||||
|
||||
return 0;
|
||||
|
@ -1245,7 +1245,7 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,
|
||||
struct lpfc_nvmet_tgtport *tgtp;
|
||||
struct lpfc_async_xchg_ctx *ctxp =
|
||||
container_of(rsp, struct lpfc_async_xchg_ctx, hdlrctx.fcp_req);
|
||||
struct rqb_dmabuf *nvmebuf = ctxp->rqb_buffer;
|
||||
struct rqb_dmabuf *nvmebuf;
|
||||
struct lpfc_hba *phba = ctxp->phba;
|
||||
unsigned long iflag;
|
||||
|
||||
@ -1253,13 +1253,18 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,
|
||||
lpfc_nvmeio_data(phba, "NVMET DEFERRCV: xri x%x sz %d CPU %02x\n",
|
||||
ctxp->oxid, ctxp->size, raw_smp_processor_id());
|
||||
|
||||
spin_lock_irqsave(&ctxp->ctxlock, iflag);
|
||||
nvmebuf = ctxp->rqb_buffer;
|
||||
if (!nvmebuf) {
|
||||
spin_unlock_irqrestore(&ctxp->ctxlock, iflag);
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_NVME_IOERR,
|
||||
"6425 Defer rcv: no buffer oxid x%x: "
|
||||
"flg %x ste %x\n",
|
||||
ctxp->oxid, ctxp->flag, ctxp->state);
|
||||
return;
|
||||
}
|
||||
ctxp->rqb_buffer = NULL;
|
||||
spin_unlock_irqrestore(&ctxp->ctxlock, iflag);
|
||||
|
||||
tgtp = phba->targetport->private;
|
||||
if (tgtp)
|
||||
@ -1267,9 +1272,6 @@ lpfc_nvmet_defer_rcv(struct nvmet_fc_target_port *tgtport,
|
||||
|
||||
/* Free the nvmebuf since a new buffer already replaced it */
|
||||
nvmebuf->hrq->rqbp->rqb_free_buffer(phba, nvmebuf);
|
||||
spin_lock_irqsave(&ctxp->ctxlock, iflag);
|
||||
ctxp->rqb_buffer = NULL;
|
||||
spin_unlock_irqrestore(&ctxp->ctxlock, iflag);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -90,6 +90,10 @@ static int efivarfs_d_compare(const struct dentry *dentry,
|
||||
{
|
||||
int guid = len - EFI_VARIABLE_GUID_LEN;
|
||||
|
||||
/* Parallel lookups may produce a temporary invalid filename */
|
||||
if (guid <= 0)
|
||||
return 1;
|
||||
|
||||
if (name->len != len)
|
||||
return 1;
|
||||
|
||||
|
@ -2236,8 +2236,13 @@ static __net_init int nfsd_net_init(struct net *net)
|
||||
retval = nfsd_stat_counters_init(nn);
|
||||
if (retval)
|
||||
goto out_repcache_error;
|
||||
|
||||
memset(&nn->nfsd_svcstats, 0, sizeof(nn->nfsd_svcstats));
|
||||
nn->nfsd_svcstats.program = &nfsd_program;
|
||||
if (!nfsd_proc_stat_init(net)) {
|
||||
retval = -ENOMEM;
|
||||
goto out_proc_error;
|
||||
}
|
||||
nn->nfsd_versions = NULL;
|
||||
nn->nfsd4_minorversions = NULL;
|
||||
nn->nfsd_info.mutex = &nfsd_mutex;
|
||||
@ -2245,10 +2250,11 @@ static __net_init int nfsd_net_init(struct net *net)
|
||||
nfsd4_init_leases_net(nn);
|
||||
get_random_bytes(&nn->siphash_key, sizeof(nn->siphash_key));
|
||||
seqlock_init(&nn->writeverf_lock);
|
||||
nfsd_proc_stat_init(net);
|
||||
|
||||
return 0;
|
||||
|
||||
out_proc_error:
|
||||
percpu_counter_destroy_many(nn->counter, NFSD_STATS_COUNTERS_NUM);
|
||||
out_repcache_error:
|
||||
nfsd_idmap_shutdown(net);
|
||||
out_idmap_error:
|
||||
|
@ -115,11 +115,11 @@ void nfsd_stat_counters_destroy(struct nfsd_net *nn)
|
||||
nfsd_percpu_counters_destroy(nn->counter, NFSD_STATS_COUNTERS_NUM);
|
||||
}
|
||||
|
||||
void nfsd_proc_stat_init(struct net *net)
|
||||
struct proc_dir_entry *nfsd_proc_stat_init(struct net *net)
|
||||
{
|
||||
struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
||||
|
||||
svc_proc_register(net, &nn->nfsd_svcstats, &nfsd_proc_ops);
|
||||
return svc_proc_register(net, &nn->nfsd_svcstats, &nfsd_proc_ops);
|
||||
}
|
||||
|
||||
void nfsd_proc_stat_shutdown(struct net *net)
|
||||
|
@ -15,7 +15,7 @@ void nfsd_percpu_counters_reset(struct percpu_counter *counters, int num);
|
||||
void nfsd_percpu_counters_destroy(struct percpu_counter *counters, int num);
|
||||
int nfsd_stat_counters_init(struct nfsd_net *nn);
|
||||
void nfsd_stat_counters_destroy(struct nfsd_net *nn);
|
||||
void nfsd_proc_stat_init(struct net *net);
|
||||
struct proc_dir_entry *nfsd_proc_stat_init(struct net *net);
|
||||
void nfsd_proc_stat_shutdown(struct net *net);
|
||||
|
||||
static inline void nfsd_stats_rc_hits_inc(struct nfsd_net *nn)
|
||||
|
@ -255,20 +255,47 @@ svc_tcp_sock_process_cmsg(struct socket *sock, struct msghdr *msg,
|
||||
}
|
||||
|
||||
static int
|
||||
svc_tcp_sock_recv_cmsg(struct svc_sock *svsk, struct msghdr *msg)
|
||||
svc_tcp_sock_recv_cmsg(struct socket *sock, unsigned int *msg_flags)
|
||||
{
|
||||
union {
|
||||
struct cmsghdr cmsg;
|
||||
u8 buf[CMSG_SPACE(sizeof(u8))];
|
||||
} u;
|
||||
struct socket *sock = svsk->sk_sock;
|
||||
u8 alert[2];
|
||||
struct kvec alert_kvec = {
|
||||
.iov_base = alert,
|
||||
.iov_len = sizeof(alert),
|
||||
};
|
||||
struct msghdr msg = {
|
||||
.msg_flags = *msg_flags,
|
||||
.msg_control = &u,
|
||||
.msg_controllen = sizeof(u),
|
||||
};
|
||||
int ret;
|
||||
|
||||
msg->msg_control = &u;
|
||||
msg->msg_controllen = sizeof(u);
|
||||
iov_iter_kvec(&msg.msg_iter, ITER_DEST, &alert_kvec, 1,
|
||||
alert_kvec.iov_len);
|
||||
ret = sock_recvmsg(sock, &msg, MSG_DONTWAIT);
|
||||
if (ret > 0 &&
|
||||
tls_get_record_type(sock->sk, &u.cmsg) == TLS_RECORD_TYPE_ALERT) {
|
||||
iov_iter_revert(&msg.msg_iter, ret);
|
||||
ret = svc_tcp_sock_process_cmsg(sock, &msg, &u.cmsg, -EAGAIN);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
svc_tcp_sock_recvmsg(struct svc_sock *svsk, struct msghdr *msg)
|
||||
{
|
||||
int ret;
|
||||
struct socket *sock = svsk->sk_sock;
|
||||
|
||||
ret = sock_recvmsg(sock, msg, MSG_DONTWAIT);
|
||||
if (unlikely(msg->msg_controllen != sizeof(u)))
|
||||
ret = svc_tcp_sock_process_cmsg(sock, msg, &u.cmsg, ret);
|
||||
if (msg->msg_flags & MSG_CTRUNC) {
|
||||
msg->msg_flags &= ~(MSG_CTRUNC | MSG_EOR);
|
||||
if (ret == 0 || ret == -EIO)
|
||||
ret = svc_tcp_sock_recv_cmsg(sock, &msg->msg_flags);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -322,7 +349,7 @@ static ssize_t svc_tcp_read_msg(struct svc_rqst *rqstp, size_t buflen,
|
||||
iov_iter_advance(&msg.msg_iter, seek);
|
||||
buflen -= seek;
|
||||
}
|
||||
len = svc_tcp_sock_recv_cmsg(svsk, &msg);
|
||||
len = svc_tcp_sock_recvmsg(svsk, &msg);
|
||||
if (len > 0)
|
||||
svc_flush_bvec(bvec, len, seek);
|
||||
|
||||
@ -1018,7 +1045,7 @@ static ssize_t svc_tcp_read_marker(struct svc_sock *svsk,
|
||||
iov.iov_base = ((char *)&svsk->sk_marker) + svsk->sk_tcplen;
|
||||
iov.iov_len = want;
|
||||
iov_iter_kvec(&msg.msg_iter, READ, &iov, 1, want);
|
||||
len = svc_tcp_sock_recv_cmsg(svsk, &msg);
|
||||
len = svc_tcp_sock_recvmsg(svsk, &msg);
|
||||
if (len < 0)
|
||||
return len;
|
||||
svsk->sk_tcplen += len;
|
||||
|
@ -359,7 +359,7 @@ xs_alloc_sparse_pages(struct xdr_buf *buf, size_t want, gfp_t gfp)
|
||||
|
||||
static int
|
||||
xs_sock_process_cmsg(struct socket *sock, struct msghdr *msg,
|
||||
struct cmsghdr *cmsg, int ret)
|
||||
unsigned int *msg_flags, struct cmsghdr *cmsg, int ret)
|
||||
{
|
||||
u8 content_type = tls_get_record_type(sock->sk, cmsg);
|
||||
u8 level, description;
|
||||
@ -372,7 +372,7 @@ xs_sock_process_cmsg(struct socket *sock, struct msghdr *msg,
|
||||
* record, even though there might be more frames
|
||||
* waiting to be decrypted.
|
||||
*/
|
||||
msg->msg_flags &= ~MSG_EOR;
|
||||
*msg_flags &= ~MSG_EOR;
|
||||
break;
|
||||
case TLS_RECORD_TYPE_ALERT:
|
||||
tls_alert_recv(sock->sk, msg, &level, &description);
|
||||
@ -387,19 +387,33 @@ xs_sock_process_cmsg(struct socket *sock, struct msghdr *msg,
|
||||
}
|
||||
|
||||
static int
|
||||
xs_sock_recv_cmsg(struct socket *sock, struct msghdr *msg, int flags)
|
||||
xs_sock_recv_cmsg(struct socket *sock, unsigned int *msg_flags, int flags)
|
||||
{
|
||||
union {
|
||||
struct cmsghdr cmsg;
|
||||
u8 buf[CMSG_SPACE(sizeof(u8))];
|
||||
} u;
|
||||
u8 alert[2];
|
||||
struct kvec alert_kvec = {
|
||||
.iov_base = alert,
|
||||
.iov_len = sizeof(alert),
|
||||
};
|
||||
struct msghdr msg = {
|
||||
.msg_flags = *msg_flags,
|
||||
.msg_control = &u,
|
||||
.msg_controllen = sizeof(u),
|
||||
};
|
||||
int ret;
|
||||
|
||||
msg->msg_control = &u;
|
||||
msg->msg_controllen = sizeof(u);
|
||||
ret = sock_recvmsg(sock, msg, flags);
|
||||
if (msg->msg_controllen != sizeof(u))
|
||||
ret = xs_sock_process_cmsg(sock, msg, &u.cmsg, ret);
|
||||
iov_iter_kvec(&msg.msg_iter, ITER_DEST, &alert_kvec, 1,
|
||||
alert_kvec.iov_len);
|
||||
ret = sock_recvmsg(sock, &msg, flags);
|
||||
if (ret > 0) {
|
||||
if (tls_get_record_type(sock->sk, &u.cmsg) == TLS_RECORD_TYPE_ALERT)
|
||||
iov_iter_revert(&msg.msg_iter, ret);
|
||||
ret = xs_sock_process_cmsg(sock, &msg, msg_flags, &u.cmsg,
|
||||
-EAGAIN);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -409,7 +423,13 @@ xs_sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags, size_t seek)
|
||||
ssize_t ret;
|
||||
if (seek != 0)
|
||||
iov_iter_advance(&msg->msg_iter, seek);
|
||||
ret = xs_sock_recv_cmsg(sock, msg, flags);
|
||||
ret = sock_recvmsg(sock, msg, flags);
|
||||
/* Handle TLS inband control message lazily */
|
||||
if (msg->msg_flags & MSG_CTRUNC) {
|
||||
msg->msg_flags &= ~(MSG_CTRUNC | MSG_EOR);
|
||||
if (ret == 0 || ret == -EIO)
|
||||
ret = xs_sock_recv_cmsg(sock, &msg->msg_flags, flags);
|
||||
}
|
||||
return ret > 0 ? ret + seek : ret;
|
||||
}
|
||||
|
||||
@ -435,7 +455,7 @@ xs_read_discard(struct socket *sock, struct msghdr *msg, int flags,
|
||||
size_t count)
|
||||
{
|
||||
iov_iter_discard(&msg->msg_iter, READ, count);
|
||||
return xs_sock_recv_cmsg(sock, msg, flags);
|
||||
return xs_sock_recvmsg(sock, msg, flags, 0);
|
||||
}
|
||||
|
||||
#if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE
|
||||
|
@ -903,13 +903,16 @@ void __cfg80211_connect_result(struct net_device *dev,
|
||||
if (!wdev->u.client.ssid_len) {
|
||||
rcu_read_lock();
|
||||
for_each_valid_link(cr, link) {
|
||||
u32 ssid_len;
|
||||
|
||||
ssid = ieee80211_bss_get_elem(cr->links[link].bss,
|
||||
WLAN_EID_SSID);
|
||||
|
||||
if (!ssid || !ssid->datalen)
|
||||
continue;
|
||||
|
||||
memcpy(wdev->u.client.ssid, ssid->data, ssid->datalen);
|
||||
ssid_len = min(ssid->datalen, IEEE80211_MAX_SSID_LEN);
|
||||
memcpy(wdev->u.client.ssid, ssid->data, ssid_len);
|
||||
wdev->u.client.ssid_len = ssid->datalen;
|
||||
break;
|
||||
}
|
||||
|
@ -1,3 +1,25 @@
|
||||
* Tue Oct 14 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-570.55.1.el9_6]
|
||||
- scsi: lpfc: Fix buffer free/clear order in deferred receive path (CKI Backport Bot) [RHEL-119115] {CVE-2025-39841}
|
||||
Resolves: RHEL-119115
|
||||
|
||||
* Sat Oct 11 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-570.54.1.el9_6]
|
||||
- firmware: arm_scpi: Ensure scpi_info is not assigned if the probe fails (Charles Mirabile) [RHEL-113836] {CVE-2022-50087}
|
||||
- SUNRPC: call xs_sock_process_cmsg for all cmsg (Olga Kornievskaia) [RHEL-110811]
|
||||
- sunrpc: fix client side handling of tls alerts (Olga Kornievskaia) [RHEL-110811] {CVE-2025-38571}
|
||||
- efivarfs: Fix slab-out-of-bounds in efivarfs_d_compare (CKI Backport Bot) [RHEL-118256] {CVE-2025-39817}
|
||||
- sunrpc: fix handling of server side tls alerts (Steve Dickson) [RHEL-111070] {CVE-2025-38566}
|
||||
- platform/x86/intel: power-domains: Use topology_logical_package_id() for package ID (Jay Shin) [RHEL-116679]
|
||||
Resolves: RHEL-110811, RHEL-111070, RHEL-113836, RHEL-116679, RHEL-118256
|
||||
|
||||
* Thu Oct 09 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-570.53.1.el9_6]
|
||||
- wifi: cfg80211: sme: cap SSID length in __cfg80211_connect_result() (CKI Backport Bot) [RHEL-117578] {CVE-2025-39849}
|
||||
- ibmvnic: Use ndo_get_stats64 to fix inaccurate SAR reporting (Mamatha Inamdar) [RHEL-114436]
|
||||
- ibmvnic: Fix hardcoded NUM_RX_STATS/NUM_TX_STATS with dynamic sizeof (Mamatha Inamdar) [RHEL-114436]
|
||||
- ibmvnic: Add stat for tx direct vs tx batched (Mamatha Inamdar) [RHEL-114436]
|
||||
- nfsd: don't ignore the return code of svc_proc_register() (Olga Kornievskaia) [RHEL-93610] {CVE-2025-22026}
|
||||
- irdma: free iwdev->rf after removing MSI-X (CKI Backport Bot) [RHEL-111485]
|
||||
Resolves: RHEL-111485, RHEL-114436, RHEL-117578, RHEL-93610
|
||||
|
||||
* Sat Oct 04 2025 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-570.52.1.el9_6]
|
||||
- crypto: seqiv - Handle EBUSY correctly (CKI Backport Bot) [RHEL-117232] {CVE-2023-53373}
|
||||
- ibmvnic: Increase max subcrq indirect entries with fallback (Mamatha Inamdar) [RHEL-116186]
|
||||
|
Loading…
Reference in New Issue
Block a user