FAILED: patch "[PATCH] octeontx2-af: validate body pcifunc in" failed to apply to 6.18-stable tree
[email protected]
maintainerThe patch below does not apply to the 6.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.18.y
git checkout FETCH_HEAD
git cherry-pick -x 2156a29aecfffa2eb7c558255690084efbe9f3b0
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026060411-target-repeated-e6ae@gregkh' --subject-prefix 'PATCH 6.18.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 2156a29aecfffa2eb7c558255690084efbe9f3b0 Mon Sep 17 00:00:00 2001
From: Michael Bommarito <[email protected]>
Date: Wed, 20 May 2026 11:41:57 -0400
Subject: [PATCH] octeontx2-af: validate body pcifunc in
rvu_mbox_handler_rep_event_notify
rvu_mbox_handler_rep_event_notify() in drivers/net/ethernet/marvell/ octeontx2/af/rvu_rep.c queues a sender-controlled REP_EVENT_NOTIFY request body verbatim, and rvu_rep_up_notify() then forwards event->pcifunc (the nested body field, distinct from the AF-normalised header pcifunc) into rvu_get_pfvf(), rvu_get_pf() and the AF->PF mailbox device index without any bounds check.
A VF attached to a PF that has been put into switchdev representor mode reaches this path: the VF mailbox handler otx2_pfvf_mbox_handler() forwards every message id including MBOX_MSG_REP_EVENT_NOTIFY to AF without an allowlist, and the AF dispatcher rewrites only msg->pcifunc, leaving struct rep_event::pcifunc attacker-controlled. The sibling rvu_mbox_handler_esw_cfg() refuses requests whose header pcifunc is not rvu->rep_pcifunc; this handler has no equivalent gate.
An out-of-range body pcifunc selects an &rvu->pf[]/&rvu->hwvf[] element past the allocated array and, for RVU_EVENT_MAC_ADDR_CHANGE, turns into a six-byte attacker-chosen OOB ether_addr_copy() target inside the queued worker; KASAN reports a slab-out-of-bounds write in rvu_rep_wq_handler.
Reject malformed requests at the handler entry by gating on is_pf_func_valid(), which is already the canonical PF/VF range check in this driver; expose it via rvu.h so callers in rvu_rep.c can use it instead of open-coding the same range arithmetic.
drivers/net/ethernet/marvell/octeontx2/af/rvu.c +1 -1
@@ -436,7 +436,7 @@ struct rvu_pfvf *rvu_get_pfvf(struct rvu *rvu, int pcifunc)return &rvu->pf[rvu_get_pf (rvu->pdev, pcifunc)]; } -static bool is_pf_func_valid (struct rvu *rvu,u16 pcifunc) +bool is_pf_func_valid (struct rvu *rvu,u16 pcifunc) {int pf, vf, nvfs;u64 cfg;
drivers/net/ethernet/marvell/octeontx2/af/rvu.h +1 -0
@@ -917,6 +917,7 @@ u16 rvu_get_rsrc_mapcount(struct rvu_pfvf *pfvf, int blkaddr);struct rvu_pfvf *rvu_get_pfvf (struct rvu *rvu,int pcifunc);void rvu_get_pf_numvfs (struct rvu *rvu,int pf,int *numvfs,int *hwvf);bool is_block_implemented (struct rvu_hwinfo *hw,int blkaddr); +bool is_pf_func_valid (struct rvu *rvu,u16 pcifunc);bool is_pffunc_map_valid (struct rvu *rvu,u16 pcifunc,int blktype);int rvu_get_lf (struct rvu *rvu,struct rvu_block *block,u16 pcifunc,u16 slot);int rvu_lf_reset (struct rvu *rvu,struct rvu_block *block,int lf);
drivers/net/ethernet/marvell/octeontx2/af/rvu_rep.c +8 -0
@@ -97,6 +97,14 @@ int rvu_mbox_handler_rep_event_notify(struct rvu *rvu, struct rep_event *req, {struct rep_evtq_ent *qentry; +/* The mailbox dispatcher normalises only the header pcifunc; the +* nested struct rep_event::pcifunc body field is sender-controlled +* and is later used by rvu_rep_up_notify() to index rvu->pf[] / +* rvu->hwvf[]. Reject out-of-range body selectors before queueing. +*/ +if (!is_pf_func_valid (rvu, req->pcifunc)) +return -EINVAL ; + qentry =kmalloc_obj (*qentry,GFP_ATOMIC );if (!qentry)return -ENOMEM ;