Skip to content

Commit

Permalink
macvlan: code refine to check data before using
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Zhang Shengju authored and David S. Miller committed Sep 20, 2017
1 parent d4e1b29 commit 07850a4
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions drivers/net/macvlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -1231,11 +1231,14 @@ static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[],
return -EADDRNOTAVAIL;
}

if (data && data[IFLA_MACVLAN_FLAGS] &&
if (!data)
return 0;

if (data[IFLA_MACVLAN_FLAGS] &&
nla_get_u16(data[IFLA_MACVLAN_FLAGS]) & ~MACVLAN_FLAG_NOPROMISC)
return -EINVAL;

if (data && data[IFLA_MACVLAN_MODE]) {
if (data[IFLA_MACVLAN_MODE]) {
switch (nla_get_u32(data[IFLA_MACVLAN_MODE])) {
case MACVLAN_MODE_PRIVATE:
case MACVLAN_MODE_VEPA:
Expand All @@ -1248,7 +1251,7 @@ static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[],
}
}

if (data && data[IFLA_MACVLAN_MACADDR_MODE]) {
if (data[IFLA_MACVLAN_MACADDR_MODE]) {
switch (nla_get_u32(data[IFLA_MACVLAN_MACADDR_MODE])) {
case MACVLAN_MACADDR_ADD:
case MACVLAN_MACADDR_DEL:
Expand All @@ -1260,15 +1263,15 @@ static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[],
}
}

if (data && data[IFLA_MACVLAN_MACADDR]) {
if (data[IFLA_MACVLAN_MACADDR]) {
if (nla_len(data[IFLA_MACVLAN_MACADDR]) != ETH_ALEN)
return -EINVAL;

if (!is_valid_ether_addr(nla_data(data[IFLA_MACVLAN_MACADDR])))
return -EADDRNOTAVAIL;
}

if (data && data[IFLA_MACVLAN_MACADDR_COUNT])
if (data[IFLA_MACVLAN_MACADDR_COUNT])
return -EINVAL;

return 0;
Expand Down

0 comments on commit 07850a4

Please sign in to comment.