Skip to content

Commit

Permalink
device property: Don't overwrite addr when failing in device_get_mac_…
Browse files Browse the repository at this point in the history
…address

The function device_get_mac_address is trying different property names
in order to get the mac address. To check the return value, the variable
addr (which contain the buffer pass by the caller) will be re-used. This
means that if the previous property is not found, the next property will
be read using a NULL buffer.

Therefore it's only possible to retrieve the mac if node contains a
property "mac-address". Fix it by using a temporary buffer for the
return value.

This has been introduced by commit 4c96b7d
"Add a matching set of device_ functions for determining mac/phy"

Signed-off-by: Julien Grall <julien.grall@citrix.com>
Cc: Jeremy Linton <jeremy.linton@arm.com>
Cc: David S. Miller <davem@davemloft.net>
Reviewed-by: Jeremy Linton <jeremy.linton@arm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Julien Grall authored and David S. Miller committed Sep 8, 2015
1 parent fcb0bb6 commit 5b902d6
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions drivers/base/property.c
Original file line number Diff line number Diff line change
Expand Up @@ -611,13 +611,15 @@ static void *device_get_mac_addr(struct device *dev,
*/
void *device_get_mac_address(struct device *dev, char *addr, int alen)
{
addr = device_get_mac_addr(dev, "mac-address", addr, alen);
if (addr)
return addr;
char *res;

addr = device_get_mac_addr(dev, "local-mac-address", addr, alen);
if (addr)
return addr;
res = device_get_mac_addr(dev, "mac-address", addr, alen);
if (res)
return res;

res = device_get_mac_addr(dev, "local-mac-address", addr, alen);
if (res)
return res;

return device_get_mac_addr(dev, "address", addr, alen);
}
Expand Down

0 comments on commit 5b902d6

Please sign in to comment.