lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 10 Aug 2018 10:05:13 +0200 From: Bartosz Golaszewski <brgl@...ev.pl> To: Jonathan Corbet <corbet@....net>, Sekhar Nori <nsekhar@...com>, Kevin Hilman <khilman@...nel.org>, Russell King <linux@...linux.org.uk>, Arnd Bergmann <arnd@...db.de>, Greg Kroah-Hartman <gregkh@...uxfoundation.org>, David Woodhouse <dwmw2@...radead.org>, Brian Norris <computersforpeace@...il.com>, Boris Brezillon <boris.brezillon@...tlin.com>, Marek Vasut <marek.vasut@...il.com>, Richard Weinberger <richard@....at>, Grygorii Strashko <grygorii.strashko@...com>, "David S . Miller" <davem@...emloft.net>, Srinivas Kandagatla <srinivas.kandagatla@...aro.org>, Naren <naren.kernel@...il.com>, Mauro Carvalho Chehab <mchehab+samsung@...nel.org>, Andrew Morton <akpm@...ux-foundation.org>, Lukas Wunner <lukas@...ner.de>, Dan Carpenter <dan.carpenter@...cle.com>, Florian Fainelli <f.fainelli@...il.com>, Ivan Khoronzhuk <ivan.khoronzhuk@...aro.org>, Sven Van Asbroeck <svendev@...x.com>, Paolo Abeni <pabeni@...hat.com>, Alban Bedel <albeu@...e.fr>, Rob Herring <robh@...nel.org>, David Lechner <david@...hnology.com>, Andrew Lunn <andrew@...n.ch> Cc: linux-doc@...r.kernel.org, linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org, linux-i2c@...r.kernel.org, linux-mtd@...ts.infradead.org, linux-omap@...r.kernel.org, netdev@...r.kernel.org, Bartosz Golaszewski <bgolaszewski@...libre.com> Subject: [PATCH v2 16/29] net: add support for nvmem to eth_platform_get_mac_address() From: Bartosz Golaszewski <bgolaszewski@...libre.com> Many non-DT platforms read the MAC address from EEPROM. Usually it's either done with callbacks defined in board files or from SoC-specific ethernet drivers. In order to generalize this, try to read the MAC from nvmem in eth_platform_get_mac_address() using a standard lookup name: "mac-address". Signed-off-by: Bartosz Golaszewski <bgolaszewski@...libre.com> --- net/ethernet/eth.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index d01dd55de037..f6f6af05fb58 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -54,6 +54,7 @@ #include <linux/if_ether.h> #include <linux/of_net.h> #include <linux/pci.h> +#include <linux/nvmem-consumer.h> #include <net/dst.h> #include <net/arp.h> #include <net/sock.h> @@ -557,6 +558,39 @@ static int mac_address_from_arch(u8 *mac_addr) return 0; } +static int mac_address_from_nvmem(struct device *dev, u8 *mac_addr) +{ + const unsigned char *addr; + struct nvmem_cell *cell; + size_t alen; + int rv = 0; + + cell = nvmem_cell_get(dev, "mac-address"); + if (IS_ERR(cell)) + return PTR_ERR(cell); + + addr = nvmem_cell_read(cell, &alen); + if (IS_ERR(addr)) { + rv = PTR_ERR(addr); + goto put_nvmem; + } + + if (alen != ETH_ALEN || !is_valid_ether_addr(addr)) { + rv = -ENODEV; + goto free_addr; + } + + ether_addr_copy(mac_addr, addr); + +free_addr: + kfree(addr); + +put_nvmem: + nvmem_cell_put(cell); + + return rv; +} + int eth_platform_get_mac_address(struct device *dev, u8 *mac_addr) { int rv; @@ -569,6 +603,10 @@ int eth_platform_get_mac_address(struct device *dev, u8 *mac_addr) if (!rv) return 0; + rv = mac_address_from_nvmem(dev, mac_addr); + if (!rv) + return 0; + return -ENODEV; } EXPORT_SYMBOL(eth_platform_get_mac_address); -- 2.18.0
Powered by blists - more mailing lists