diff options
author | Zhang Shengju <zhangshengju@cmss.chinamobile.com> | 2017-09-19 20:12:23 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-09-20 16:46:45 -0400 |
commit | 07850a4f74ea0433fe26dccb1ab9556c738a6584 (patch) | |
tree | 2b9074c71bf60184418d05ce69e89b1ae24d1b05 /drivers/net/macvlan.c | |
parent | d4e1b299ec2853dd3d90b71ae86fa2626e60dc25 (diff) |
macvlan: code refine to check data before using
This patch checks data first at one place, return if it's null.
Signed-off-by: Zhang Shengju <zhangshengju@cmss.chinamobile.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/macvlan.c')
-rw-r--r-- | drivers/net/macvlan.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index d2aea961e0f4..1ffe77e95d46 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -1231,11 +1231,14 @@ static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[], | |||
1231 | return -EADDRNOTAVAIL; | 1231 | return -EADDRNOTAVAIL; |
1232 | } | 1232 | } |
1233 | 1233 | ||
1234 | if (data && data[IFLA_MACVLAN_FLAGS] && | 1234 | if (!data) |
1235 | return 0; | ||
1236 | |||
1237 | if (data[IFLA_MACVLAN_FLAGS] && | ||
1235 | nla_get_u16(data[IFLA_MACVLAN_FLAGS]) & ~MACVLAN_FLAG_NOPROMISC) | 1238 | nla_get_u16(data[IFLA_MACVLAN_FLAGS]) & ~MACVLAN_FLAG_NOPROMISC) |
1236 | return -EINVAL; | 1239 | return -EINVAL; |
1237 | 1240 | ||
1238 | if (data && data[IFLA_MACVLAN_MODE]) { | 1241 | if (data[IFLA_MACVLAN_MODE]) { |
1239 | switch (nla_get_u32(data[IFLA_MACVLAN_MODE])) { | 1242 | switch (nla_get_u32(data[IFLA_MACVLAN_MODE])) { |
1240 | case MACVLAN_MODE_PRIVATE: | 1243 | case MACVLAN_MODE_PRIVATE: |
1241 | case MACVLAN_MODE_VEPA: | 1244 | case MACVLAN_MODE_VEPA: |
@@ -1248,7 +1251,7 @@ static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[], | |||
1248 | } | 1251 | } |
1249 | } | 1252 | } |
1250 | 1253 | ||
1251 | if (data && data[IFLA_MACVLAN_MACADDR_MODE]) { | 1254 | if (data[IFLA_MACVLAN_MACADDR_MODE]) { |
1252 | switch (nla_get_u32(data[IFLA_MACVLAN_MACADDR_MODE])) { | 1255 | switch (nla_get_u32(data[IFLA_MACVLAN_MACADDR_MODE])) { |
1253 | case MACVLAN_MACADDR_ADD: | 1256 | case MACVLAN_MACADDR_ADD: |
1254 | case MACVLAN_MACADDR_DEL: | 1257 | case MACVLAN_MACADDR_DEL: |
@@ -1260,7 +1263,7 @@ static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[], | |||
1260 | } | 1263 | } |
1261 | } | 1264 | } |
1262 | 1265 | ||
1263 | if (data && data[IFLA_MACVLAN_MACADDR]) { | 1266 | if (data[IFLA_MACVLAN_MACADDR]) { |
1264 | if (nla_len(data[IFLA_MACVLAN_MACADDR]) != ETH_ALEN) | 1267 | if (nla_len(data[IFLA_MACVLAN_MACADDR]) != ETH_ALEN) |
1265 | return -EINVAL; | 1268 | return -EINVAL; |
1266 | 1269 | ||
@@ -1268,7 +1271,7 @@ static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[], | |||
1268 | return -EADDRNOTAVAIL; | 1271 | return -EADDRNOTAVAIL; |
1269 | } | 1272 | } |
1270 | 1273 | ||
1271 | if (data && data[IFLA_MACVLAN_MACADDR_COUNT]) | 1274 | if (data[IFLA_MACVLAN_MACADDR_COUNT]) |
1272 | return -EINVAL; | 1275 | return -EINVAL; |
1273 | 1276 | ||
1274 | return 0; | 1277 | return 0; |