aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Fainelli <florian@openwrt.org>2010-04-11 20:51:37 +0000
committerFlorian Fainelli <florian@openwrt.org>2010-04-11 20:51:37 +0000
commitffc26f837f2a76e9bed7635fc6dcf0df3f3fdb5c (patch)
tree74b461f817e9248275cdec31f429a8126239c33c
parentc7dc060be4f0c1b078fd0b371dc8c34c0d5c0d0c (diff)
downloadupstream-ffc26f837f2a76e9bed7635fc6dcf0df3f3fdb5c.tar.gz
upstream-ffc26f837f2a76e9bed7635fc6dcf0df3f3fdb5c.tar.bz2
upstream-ffc26f837f2a76e9bed7635fc6dcf0df3f3fdb5c.zip
[kernel] swconfig: Check vlan/port indexes for validity.
Swconfig needs to make sure that requested vlans/ports actually exist, else it might read or modify memory not belonging to itself. This patch adds a quick range check in swconfig's kernel part to prevent accidential or intentional memory modification. Signed-off-by: Jonas Gorski <jonas.gorski+openwrt@gmail.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20811 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--target/linux/generic-2.6/files/drivers/net/phy/swconfig.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/target/linux/generic-2.6/files/drivers/net/phy/swconfig.c b/target/linux/generic-2.6/files/drivers/net/phy/swconfig.c
index 7207e46592..bb49df83eb 100644
--- a/target/linux/generic-2.6/files/drivers/net/phy/swconfig.c
+++ b/target/linux/generic-2.6/files/drivers/net/phy/swconfig.c
@@ -463,6 +463,8 @@ swconfig_lookup_attr(struct switch_dev *dev, struct genl_info *info,
if (!info->attrs[SWITCH_ATTR_OP_VLAN])
goto done;
val->port_vlan = nla_get_u32(info->attrs[SWITCH_ATTR_OP_VLAN]);
+ if (val->port_vlan >= dev->vlans)
+ goto done;
break;
case SWITCH_CMD_SET_PORT:
case SWITCH_CMD_GET_PORT:
@@ -473,6 +475,8 @@ swconfig_lookup_attr(struct switch_dev *dev, struct genl_info *info,
if (!info->attrs[SWITCH_ATTR_OP_PORT])
goto done;
val->port_vlan = nla_get_u32(info->attrs[SWITCH_ATTR_OP_PORT]);
+ if (val->port_vlan >= dev->ports)
+ goto done;
break;
default:
WARN_ON(1);