mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 12:16:29 -04:00
bnxt_en: Do not allow ethtool -m on an untrusted VF
Block all ethtool module operations on an untrusted VF. The firmware won't allow it and will return error. Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Link: https://patch.msgid.link/20241217182620.2454075-3-michael.chan@broadcom.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
b1b66ae094
commit
fac5472fc8
@@ -8279,16 +8279,20 @@ static int bnxt_hwrm_func_qcfg(struct bnxt *bp)
|
||||
if (rc)
|
||||
goto func_qcfg_exit;
|
||||
|
||||
flags = le16_to_cpu(resp->flags);
|
||||
#ifdef CONFIG_BNXT_SRIOV
|
||||
if (BNXT_VF(bp)) {
|
||||
struct bnxt_vf_info *vf = &bp->vf;
|
||||
|
||||
vf->vlan = le16_to_cpu(resp->vlan) & VLAN_VID_MASK;
|
||||
if (flags & FUNC_QCFG_RESP_FLAGS_TRUSTED_VF)
|
||||
vf->flags |= BNXT_VF_TRUST;
|
||||
else
|
||||
vf->flags &= ~BNXT_VF_TRUST;
|
||||
} else {
|
||||
bp->pf.registered_vfs = le16_to_cpu(resp->registered_vfs);
|
||||
}
|
||||
#endif
|
||||
flags = le16_to_cpu(resp->flags);
|
||||
if (flags & (FUNC_QCFG_RESP_FLAGS_FW_DCBX_AGENT_ENABLED |
|
||||
FUNC_QCFG_RESP_FLAGS_FW_LLDP_AGENT_ENABLED)) {
|
||||
bp->fw_cap |= BNXT_FW_CAP_LLDP_AGENT;
|
||||
|
||||
@@ -2270,6 +2270,11 @@ struct bnxt {
|
||||
|
||||
#define BNXT_PF(bp) (!((bp)->flags & BNXT_FLAG_VF))
|
||||
#define BNXT_VF(bp) ((bp)->flags & BNXT_FLAG_VF)
|
||||
#ifdef CONFIG_BNXT_SRIOV
|
||||
#define BNXT_VF_IS_TRUSTED(bp) ((bp)->vf.flags & BNXT_VF_TRUST)
|
||||
#else
|
||||
#define BNXT_VF_IS_TRUSTED(bp) 0
|
||||
#endif
|
||||
#define BNXT_NPAR(bp) ((bp)->port_partition_type)
|
||||
#define BNXT_MH(bp) ((bp)->flags & BNXT_FLAG_MULTI_HOST)
|
||||
#define BNXT_SINGLE_PF(bp) (BNXT_PF(bp) && !BNXT_NPAR(bp) && !BNXT_MH(bp))
|
||||
|
||||
@@ -4375,6 +4375,9 @@ static int bnxt_get_module_info(struct net_device *dev,
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
int rc;
|
||||
|
||||
if (BNXT_VF(bp) && !BNXT_VF_IS_TRUSTED(bp))
|
||||
return -EPERM;
|
||||
|
||||
/* No point in going further if phy status indicates
|
||||
* module is not inserted or if it is powered down or
|
||||
* if it is of type 10GBase-T
|
||||
@@ -4426,6 +4429,9 @@ static int bnxt_get_module_eeprom(struct net_device *dev,
|
||||
u16 start = eeprom->offset, length = eeprom->len;
|
||||
int rc = 0;
|
||||
|
||||
if (BNXT_VF(bp) && !BNXT_VF_IS_TRUSTED(bp))
|
||||
return -EPERM;
|
||||
|
||||
memset(data, 0, eeprom->len);
|
||||
|
||||
/* Read A0 portion of the EEPROM */
|
||||
@@ -4480,6 +4486,12 @@ static int bnxt_get_module_eeprom_by_page(struct net_device *dev,
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
int rc;
|
||||
|
||||
if (BNXT_VF(bp) && !BNXT_VF_IS_TRUSTED(bp)) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"Module read not permitted on untrusted VF");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
rc = bnxt_get_module_status(bp, extack);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
Reference in New Issue
Block a user