Skip to content

Commit be0b1ba

Browse files
author
CIQ Kernel Automation
committed
octeontx2-af: Use separate handlers for interrupts
jira VULN-37687 cve CVE-2024-27030 commit-author Subbaraya Sundeep <sbhatta@marvell.com> commit 50e60de For PF to AF interrupt vector and VF to AF vector same interrupt handler is registered which is causing race condition. When two interrupts are raised to two CPUs at same time then two cores serve same event corrupting the data. Fixes: 7304ac4 ("octeontx2-af: Add mailbox IRQ and msg handlers") Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net> (cherry picked from commit 50e60de) Signed-off-by: CIQ Kernel Automation <ciq_kernel_automation@ciq.com>
1 parent 8a3fbd2 commit be0b1ba

1 file changed

Lines changed: 14 additions & 3 deletions

File tree

  • drivers/net/ethernet/marvell/octeontx2/af

drivers/net/ethernet/marvell/octeontx2/af/rvu.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2481,10 +2481,9 @@ static void rvu_queue_work(struct mbox_wq_info *mw, int first,
24812481
}
24822482
}
24832483

2484-
static irqreturn_t rvu_mbox_intr_handler(int irq, void *rvu_irq)
2484+
static irqreturn_t rvu_mbox_pf_intr_handler(int irq, void *rvu_irq)
24852485
{
24862486
struct rvu *rvu = (struct rvu *)rvu_irq;
2487-
int vfs = rvu->vfs;
24882487
u64 intr;
24892488

24902489
intr = rvu_read64(rvu, BLKADDR_RVUM, RVU_AF_PFAF_MBOX_INT);
@@ -2498,6 +2497,18 @@ static irqreturn_t rvu_mbox_intr_handler(int irq, void *rvu_irq)
24982497

24992498
rvu_queue_work(&rvu->afpf_wq_info, 0, rvu->hw->total_pfs, intr);
25002499

2500+
return IRQ_HANDLED;
2501+
}
2502+
2503+
static irqreturn_t rvu_mbox_intr_handler(int irq, void *rvu_irq)
2504+
{
2505+
struct rvu *rvu = (struct rvu *)rvu_irq;
2506+
int vfs = rvu->vfs;
2507+
u64 intr;
2508+
2509+
/* Sync with mbox memory region */
2510+
rmb();
2511+
25012512
/* Handle VF interrupts */
25022513
if (vfs > 64) {
25032514
intr = rvupf_read64(rvu, RVU_PF_VFPF_MBOX_INTX(1));
@@ -2831,7 +2842,7 @@ static int rvu_register_interrupts(struct rvu *rvu)
28312842
/* Register mailbox interrupt handler */
28322843
sprintf(&rvu->irq_name[RVU_AF_INT_VEC_MBOX * NAME_SIZE], "RVUAF Mbox");
28332844
ret = request_irq(pci_irq_vector(rvu->pdev, RVU_AF_INT_VEC_MBOX),
2834-
rvu_mbox_intr_handler, 0,
2845+
rvu_mbox_pf_intr_handler, 0,
28352846
&rvu->irq_name[RVU_AF_INT_VEC_MBOX * NAME_SIZE], rvu);
28362847
if (ret) {
28372848
dev_err(rvu->dev,

0 commit comments

Comments
 (0)