* [PATCH net] enetc: Fix illegal access when reading affinity_hint
@ 2021-09-17 10:22 Claudiu Manoil
2021-09-17 10:22 ` [PATCH net] enetc: Fix uninitialized struct dim_sample field usage Claudiu Manoil
2021-09-19 11:20 ` [PATCH net] enetc: Fix illegal access when reading affinity_hint patchwork-bot+netdevbpf
0 siblings, 2 replies; 4+ messages in thread
From: Claudiu Manoil @ 2021-09-17 10:22 UTC (permalink / raw)
To: netdev, linux-kernel; +Cc: David S. Miller, Jakub Kicinski
irq_set_affinity_hit() stores a reference to the cpumask_t
parameter in the irq descriptor, and that reference can be
accessed later from irq_affinity_hint_proc_show(). Since
the cpu_mask parameter passed to irq_set_affinity_hit() has
only temporary storage (it's on the stack memory), later
accesses to it are illegal. Thus reads from the corresponding
procfs affinity_hint file can result in paging request oops.
The issue is fixed by the get_cpu_mask() helper, which provides
a permanent storage for the cpumask_t parameter.
Fixes: d4fd0404c1c9 ("enetc: Introduce basic PF and VF ENETC ethernet drivers")
Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
---
drivers/net/ethernet/freescale/enetc/enetc.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
index 3ca93adb9662..7f90c27c0e79 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
@@ -1879,7 +1879,6 @@ static void enetc_clear_bdrs(struct enetc_ndev_priv *priv)
static int enetc_setup_irqs(struct enetc_ndev_priv *priv)
{
struct pci_dev *pdev = priv->si->pdev;
- cpumask_t cpu_mask;
int i, j, err;
for (i = 0; i < priv->bdr_int_num; i++) {
@@ -1908,9 +1907,7 @@ static int enetc_setup_irqs(struct enetc_ndev_priv *priv)
enetc_wr(hw, ENETC_SIMSITRV(idx), entry);
}
- cpumask_clear(&cpu_mask);
- cpumask_set_cpu(i % num_online_cpus(), &cpu_mask);
- irq_set_affinity_hint(irq, &cpu_mask);
+ irq_set_affinity_hint(irq, get_cpu_mask(i % num_online_cpus()));
}
return 0;
--
2.25.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH net] enetc: Fix uninitialized struct dim_sample field usage
2021-09-17 10:22 [PATCH net] enetc: Fix illegal access when reading affinity_hint Claudiu Manoil
@ 2021-09-17 10:22 ` Claudiu Manoil
2021-09-19 11:20 ` patchwork-bot+netdevbpf
2021-09-19 11:20 ` [PATCH net] enetc: Fix illegal access when reading affinity_hint patchwork-bot+netdevbpf
1 sibling, 1 reply; 4+ messages in thread
From: Claudiu Manoil @ 2021-09-17 10:22 UTC (permalink / raw)
To: netdev, linux-kernel; +Cc: David S. Miller, Jakub Kicinski
The only struct dim_sample member that does not get
initialized by dim_update_sample() is comp_ctr. (There
is special API to initialize comp_ctr:
dim_update_sample_with_comps(), and it is currently used
only for RDMA.) comp_ctr is used to compute curr_stats->cmps
and curr_stats->cpe_ratio (see dim_calc_stats()) which in
turn are consumed by the rdma_dim_*() API. Therefore,
functionally, the net_dim*() API consumers are not affected.
Nevertheless, fix the computation of statistics based
on an uninitialized variable, even if the mentioned statistics
are not used at the moment.
Fixes: ae0e6a5d1627 ("enetc: Add adaptive interrupt coalescing")
Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
---
drivers/net/ethernet/freescale/enetc/enetc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
index 7f90c27c0e79..042327b9981f 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
@@ -419,7 +419,7 @@ static void enetc_rx_dim_work(struct work_struct *w)
static void enetc_rx_net_dim(struct enetc_int_vector *v)
{
- struct dim_sample dim_sample;
+ struct dim_sample dim_sample = {};
v->comp_cnt++;
--
2.25.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH net] enetc: Fix uninitialized struct dim_sample field usage
2021-09-17 10:22 ` [PATCH net] enetc: Fix uninitialized struct dim_sample field usage Claudiu Manoil
@ 2021-09-19 11:20 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-09-19 11:20 UTC (permalink / raw)
To: Claudiu Manoil; +Cc: netdev, linux-kernel, davem, kuba
Hello:
This patch was applied to netdev/net.git (refs/heads/master):
On Fri, 17 Sep 2021 13:22:06 +0300 you wrote:
> The only struct dim_sample member that does not get
> initialized by dim_update_sample() is comp_ctr. (There
> is special API to initialize comp_ctr:
> dim_update_sample_with_comps(), and it is currently used
> only for RDMA.) comp_ctr is used to compute curr_stats->cmps
> and curr_stats->cpe_ratio (see dim_calc_stats()) which in
> turn are consumed by the rdma_dim_*() API. Therefore,
> functionally, the net_dim*() API consumers are not affected.
> Nevertheless, fix the computation of statistics based
> on an uninitialized variable, even if the mentioned statistics
> are not used at the moment.
>
> [...]
Here is the summary with links:
- [net] enetc: Fix uninitialized struct dim_sample field usage
https://git.kernel.org/netdev/net/c/9f7afa05c952
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net] enetc: Fix illegal access when reading affinity_hint
2021-09-17 10:22 [PATCH net] enetc: Fix illegal access when reading affinity_hint Claudiu Manoil
2021-09-17 10:22 ` [PATCH net] enetc: Fix uninitialized struct dim_sample field usage Claudiu Manoil
@ 2021-09-19 11:20 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-09-19 11:20 UTC (permalink / raw)
To: Claudiu Manoil; +Cc: netdev, linux-kernel, davem, kuba
Hello:
This patch was applied to netdev/net.git (refs/heads/master):
On Fri, 17 Sep 2021 13:22:05 +0300 you wrote:
> irq_set_affinity_hit() stores a reference to the cpumask_t
> parameter in the irq descriptor, and that reference can be
> accessed later from irq_affinity_hint_proc_show(). Since
> the cpu_mask parameter passed to irq_set_affinity_hit() has
> only temporary storage (it's on the stack memory), later
> accesses to it are illegal. Thus reads from the corresponding
> procfs affinity_hint file can result in paging request oops.
>
> [...]
Here is the summary with links:
- [net] enetc: Fix illegal access when reading affinity_hint
https://git.kernel.org/netdev/net/c/7237a494decf
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-09-19 11:20 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-17 10:22 [PATCH net] enetc: Fix illegal access when reading affinity_hint Claudiu Manoil
2021-09-17 10:22 ` [PATCH net] enetc: Fix uninitialized struct dim_sample field usage Claudiu Manoil
2021-09-19 11:20 ` patchwork-bot+netdevbpf
2021-09-19 11:20 ` [PATCH net] enetc: Fix illegal access when reading affinity_hint patchwork-bot+netdevbpf
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.