diff options
Diffstat (limited to 'drivers/net/dsa')
-rw-r--r-- | drivers/net/dsa/bcm_sf2_cfp.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index e6234d209787..4212bc4a5f31 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c | |||
@@ -886,6 +886,9 @@ static int bcm_sf2_cfp_rule_set(struct dsa_switch *ds, int port, | |||
886 | fs->m_ext.data[1])) | 886 | fs->m_ext.data[1])) |
887 | return -EINVAL; | 887 | return -EINVAL; |
888 | 888 | ||
889 | if (fs->location != RX_CLS_LOC_ANY && fs->location >= CFP_NUM_RULES) | ||
890 | return -EINVAL; | ||
891 | |||
889 | if (fs->location != RX_CLS_LOC_ANY && | 892 | if (fs->location != RX_CLS_LOC_ANY && |
890 | test_bit(fs->location, priv->cfp.used)) | 893 | test_bit(fs->location, priv->cfp.used)) |
891 | return -EBUSY; | 894 | return -EBUSY; |
@@ -974,6 +977,9 @@ static int bcm_sf2_cfp_rule_del(struct bcm_sf2_priv *priv, int port, u32 loc) | |||
974 | struct cfp_rule *rule; | 977 | struct cfp_rule *rule; |
975 | int ret; | 978 | int ret; |
976 | 979 | ||
980 | if (loc >= CFP_NUM_RULES) | ||
981 | return -EINVAL; | ||
982 | |||
977 | /* Refuse deleting unused rules, and those that are not unique since | 983 | /* Refuse deleting unused rules, and those that are not unique since |
978 | * that could leave IPv6 rules with one of the chained rule in the | 984 | * that could leave IPv6 rules with one of the chained rule in the |
979 | * table. | 985 | * table. |