diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2011-09-06 12:44:25 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-09-20 15:40:12 -0400 |
commit | 710778ff878a06654175863db133293007d45aee (patch) | |
tree | 5c620bea04a61301dbaa7ca5280e64caf76a732c | |
parent | 22e83a2926998fe132ae4dd26f1e998c70ae2e38 (diff) | |
download | linux-3.10-710778ff878a06654175863db133293007d45aee.tar.gz linux-3.10-710778ff878a06654175863db133293007d45aee.tar.bz2 linux-3.10-710778ff878a06654175863db133293007d45aee.zip |
gianfar: Fix overflow check and return value for gfar_get_cls_all()
This function may currently fill one entry beyond the end of the
array it is given. It also doesn't return an error code in case
it does detect overflow.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/gianfar_ethtool.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/gianfar_ethtool.c b/drivers/net/gianfar_ethtool.c index 25a8c2adb00..0caf3c323ec 100644 --- a/drivers/net/gianfar_ethtool.c +++ b/drivers/net/gianfar_ethtool.c @@ -1669,10 +1669,10 @@ static int gfar_get_cls_all(struct gfar_private *priv, u32 i = 0; list_for_each_entry(comp, &priv->rx_list.list, list) { - if (i <= cmd->rule_cnt) { - rule_locs[i] = comp->fs.location; - i++; - } + if (i == cmd->rule_cnt) + return -EMSGSIZE; + rule_locs[i] = comp->fs.location; + i++; } cmd->data = MAX_FILER_IDX; |