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: Thu, 17 May 2018 10:29:06 +0200 From: Antoine Tenart <antoine.tenart@...tlin.com> To: davem@...emloft.net, linux@...linux.org.uk Cc: Antoine Tenart <antoine.tenart@...tlin.com>, netdev@...r.kernel.org, linux-kernel@...r.kernel.org, thomas.petazzoni@...tlin.com, maxime.chevallier@...tlin.com, gregory.clement@...tlin.com, miquel.raynal@...tlin.com, nadavh@...vell.com, stefanc@...vell.com, ymarkman@...vell.com, mw@...ihalf.com Subject: [PATCH net-next 1/2] net: phy: sfp: make the i2c-bus property really optional The SFF,SFP documentation is clear about making all the DT properties, with the exception of the compatible, optional. In practice this is not the case and without an i2c-bus property provided the SFP code will throw NULL pointer exceptions. This patch is an attempt to fix this. Signed-off-by: Antoine Tenart <antoine.tenart@...tlin.com> --- drivers/net/phy/sfp.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c index 4ab6e9a50bbe..0fd2a92a6f7b 100644 --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c @@ -298,11 +298,17 @@ static void sfp_set_state(struct sfp *sfp, unsigned int state) static int sfp_read(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len) { + if (!sfp->read) + return -ENODEV; + return sfp->read(sfp, a2, addr, buf, len); } static int sfp_write(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len) { + if (!sfp->write) + return -ENODEV; + return sfp->write(sfp, a2, addr, buf, len); } @@ -533,6 +539,8 @@ static int sfp_sm_mod_hpower(struct sfp *sfp) return 0; err = sfp_read(sfp, true, SFP_EXT_STATUS, &val, sizeof(val)); + if (err == -ENODEV) + goto err; if (err != sizeof(val)) { dev_err(sfp->dev, "Failed to read EEPROM: %d\n", err); err = -EAGAIN; @@ -542,6 +550,8 @@ static int sfp_sm_mod_hpower(struct sfp *sfp) val |= BIT(0); err = sfp_write(sfp, true, SFP_EXT_STATUS, &val, sizeof(val)); + if (err == -ENODEV) + goto err; if (err != sizeof(val)) { dev_err(sfp->dev, "Failed to write EEPROM: %d\n", err); err = -EAGAIN; @@ -565,6 +575,8 @@ static int sfp_sm_mod_probe(struct sfp *sfp) int ret; ret = sfp_read(sfp, false, 0, &id, sizeof(id)); + if (ret == -ENODEV) + return ret; if (ret < 0) { dev_err(sfp->dev, "failed to read EEPROM: %d\n", ret); return -EAGAIN; -- 2.17.0
Powered by blists - more mailing lists