Patches contributed by University of Minnesota


commit 9e28989d41c0eab57ec0bb156617a8757406ff8a
Author: Kangjie Lu <kjlu@umn.edu>
Date:   Thu Dec 20 15:12:11 2018 -0600

    mfd: mc13xxx: Fix a missing check of a register-read failure
    
    When mc13xxx_reg_read() fails, "old_adc0" is uninitialized and will
    contain random value. Further execution uses "old_adc0" even when
    mc13xxx_reg_read() fails.
    The fix checks the return value of mc13xxx_reg_read(), and exits
    the execution when it fails.
    
    Signed-off-by: Kangjie Lu <kjlu@umn.edu>
    Signed-off-by: Lee Jones <lee.jones@linaro.org>

diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c
index f475e848252f..d0bf50e3568d 100644
--- a/drivers/mfd/mc13xxx-core.c
+++ b/drivers/mfd/mc13xxx-core.c
@@ -274,7 +274,9 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx, unsigned int mode,
 
 	mc13xxx->adcflags |= MC13XXX_ADC_WORKING;
 
-	mc13xxx_reg_read(mc13xxx, MC13XXX_ADC0, &old_adc0);
+	ret = mc13xxx_reg_read(mc13xxx, MC13XXX_ADC0, &old_adc0);
+	if (ret)
+		goto out;
 
 	adc0 = MC13XXX_ADC0_ADINC1 | MC13XXX_ADC0_ADINC2 |
 	       MC13XXX_ADC0_CHRGRAWDIV;

commit 9c6260de505b63638dd86fcc33849b17f6146d94
Author: Aditya Pakki <pakki001@umn.edu>
Date:   Mon Dec 24 12:24:45 2018 -0600

    infiniband/qedr: Potential null ptr dereference of qp
    
    idr_find() may fail and return a NULL pointer. The fix checks the return
    value of the function and returns an error in case of NULL.
    
    Signed-off-by: Aditya Pakki <pakki001@umn.edu>
    Acked-by: Michal Kalderon <michal.kalderon@marvell.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>

diff --git a/drivers/infiniband/hw/qedr/qedr_iw_cm.c b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
index 505fa3648762..93b16237b767 100644
--- a/drivers/infiniband/hw/qedr/qedr_iw_cm.c
+++ b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
@@ -492,6 +492,8 @@ int qedr_iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
 	int i;
 
 	qp = idr_find(&dev->qpidr.idr, conn_param->qpn);
+	if (unlikely(!qp))
+		return -EINVAL;
 
 	laddr = (struct sockaddr_in *)&cm_id->m_local_addr;
 	raddr = (struct sockaddr_in *)&cm_id->m_remote_addr;

commit 94edd87a1c59f3efa6fdf4e98d6d492e6cec6173
Author: Aditya Pakki <pakki001@umn.edu>
Date:   Wed Dec 26 12:56:22 2018 -0600

    infiniband: bnxt_re: qplib: Check the return value of send_message
    
    In bnxt_qplib_map_tc2cos(), bnxt_qplib_rcfw_send_message() can return an
    error value but it is lost. Propagate this error to the callers.
    
    Signed-off-by: Aditya Pakki <pakki001@umn.edu>
    Acked-By: Devesh Sharma <devesh.sharma@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>

diff --git a/drivers/infiniband/hw/bnxt_re/qplib_sp.c b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
index be03b5738f71..efa0f2949dc7 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_sp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_sp.c
@@ -780,9 +780,8 @@ int bnxt_qplib_map_tc2cos(struct bnxt_qplib_res *res, u16 *cids)
 	req.cos0 = cpu_to_le16(cids[0]);
 	req.cos1 = cpu_to_le16(cids[1]);
 
-	bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void *)&resp, NULL,
-				     0);
-	return 0;
+	return bnxt_qplib_rcfw_send_message(rcfw, (void *)&req, (void *)&resp,
+						NULL, 0);
 }
 
 int bnxt_qplib_get_roce_stats(struct bnxt_qplib_rcfw *rcfw,

commit 093c48213ee37c3c3ff1cf5ac1aa2a9d8bc66017
Author: Wenwen Wang <wang6495@umn.edu>
Date:   Wed Dec 26 20:15:13 2018 -0600

    gdrom: fix a memory leak bug
    
    In probe_gdrom(), the buffer pointed by 'gd.cd_info' is allocated through
    kzalloc() and is used to hold the information of the gdrom device. To
    register and unregister the device, the pointer 'gd.cd_info' is passed to
    the functions register_cdrom() and unregister_cdrom(), respectively.
    However, this buffer is not freed after it is used, which can cause a
    memory leak bug.
    
    This patch simply frees the buffer 'gd.cd_info' in exit_gdrom() to fix the
    above issue.
    
    Signed-off-by: Wenwen Wang <wang6495@umn.edu>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>

diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c
index a5b8afe3609c..f8b7345fe1cb 100644
--- a/drivers/cdrom/gdrom.c
+++ b/drivers/cdrom/gdrom.c
@@ -873,6 +873,7 @@ static void __exit exit_gdrom(void)
 	platform_device_unregister(pd);
 	platform_driver_unregister(&gdrom_driver);
 	kfree(gd.toc);
+	kfree(gd.cd_info);
 }
 
 module_init(init_gdrom);

commit eb8950861c1bfd3eecc8f6faad213e3bca0dc395
Author: Kangjie Lu <kjlu@umn.edu>
Date:   Fri Dec 21 00:46:23 2018 -0600

    netfilter: nf_tables: fix a missing check of nla_put_failure
    
    If nla_nest_start() may fail. The fix checks its return value and goes
    to nla_put_failure if it fails.
    
    Signed-off-by: Kangjie Lu <kjlu@umn.edu>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>

diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index fec814dace5a..2b0a93300dd7 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -5727,6 +5727,8 @@ static int nf_tables_fill_flowtable_info(struct sk_buff *skb, struct net *net,
 		goto nla_put_failure;
 
 	nest = nla_nest_start(skb, NFTA_FLOWTABLE_HOOK);
+	if (!nest)
+		goto nla_put_failure;
 	if (nla_put_be32(skb, NFTA_FLOWTABLE_HOOK_NUM, htonl(flowtable->hooknum)) ||
 	    nla_put_be32(skb, NFTA_FLOWTABLE_HOOK_PRIORITY, htonl(flowtable->priority)))
 		goto nla_put_failure;

commit 92ee77d148bf06d8c52664be4d1b862583fd5c0e
Author: Kangjie Lu <kjlu@umn.edu>
Date:   Wed Dec 26 00:31:08 2018 -0600

    net: marvell: fix a missing check of acpi_match_device
    
    When acpi_match_device fails, its return value is NULL. Directly using
    the return value without a check may result in a NULL-pointer
    dereference. The fix checks if acpi_match_device fails, and if so,
    returns -EINVAL.
    
    Signed-off-by: Kangjie Lu <kjlu@umn.edu>
    Signed-off-by: David S. Miller <davem@davemloft.net>

diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index f1dab0b55769..c9444346475b 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -5255,6 +5255,8 @@ static int mvpp2_probe(struct platform_device *pdev)
 	if (has_acpi_companion(&pdev->dev)) {
 		acpi_id = acpi_match_device(pdev->dev.driver->acpi_match_table,
 					    &pdev->dev);
+		if (!acpi_id)
+			return -EINVAL;
 		priv->hw_version = (unsigned long)acpi_id->driver_data;
 	} else {
 		priv->hw_version =

commit 46273cf7e009231d2b6bc10a926e82b8928a9fb2
Author: Kangjie Lu <kjlu@umn.edu>
Date:   Wed Dec 26 00:09:04 2018 -0600

    tipc: fix a missing check of genlmsg_put
    
    genlmsg_put could fail. The fix inserts a check of its return value, and
    if it fails, returns -EMSGSIZE.
    
    Signed-off-by: Kangjie Lu <kjlu@umn.edu>
    Signed-off-by: David S. Miller <davem@davemloft.net>

diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c
index 21f6ccc89401..40f5cae623a7 100644
--- a/net/tipc/netlink_compat.c
+++ b/net/tipc/netlink_compat.c
@@ -904,6 +904,8 @@ static int tipc_nl_compat_publ_dump(struct tipc_nl_compat_msg *msg, u32 sock)
 
 	hdr = genlmsg_put(args, 0, 0, &tipc_genl_family, NLM_F_MULTI,
 			  TIPC_NL_PUBL_GET);
+	if (!hdr)
+		return -EMSGSIZE;
 
 	nest = nla_nest_start(args, TIPC_NLA_SOCK);
 	if (!nest) {

commit ff07d48d7bc0974d4f96a85a4df14564fb09f1ef
Author: Kangjie Lu <kjlu@umn.edu>
Date:   Tue Dec 25 22:23:19 2018 -0600

    atl1e: checking the status of atl1e_write_phy_reg
    
    atl1e_write_phy_reg() could fail. The fix issues an error message when
    it fails.
    
    Signed-off-by: Kangjie Lu <kjlu@umn.edu>
    Signed-off-by: David S. Miller <davem@davemloft.net>

diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
index 9dc6da039a6d..3164aad29bcf 100644
--- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
+++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
@@ -473,7 +473,9 @@ static void atl1e_mdio_write(struct net_device *netdev, int phy_id,
 {
 	struct atl1e_adapter *adapter = netdev_priv(netdev);
 
-	atl1e_write_phy_reg(&adapter->hw, reg_num & MDIO_REG_ADDR_MASK, val);
+	if (atl1e_write_phy_reg(&adapter->hw,
+				reg_num & MDIO_REG_ADDR_MASK, val))
+		netdev_err(netdev, "write phy register failed\n");
 }
 
 static int atl1e_mii_ioctl(struct net_device *netdev,

commit e49505f7255be8ced695919c08a29bf2c3d79616
Author: Kangjie Lu <kjlu@umn.edu>
Date:   Tue Dec 25 22:08:18 2018 -0600

    net: dsa: bcm_sf2: Propagate error value from mdio_write
    
    Both bcm_sf2_sw_indir_rw and mdiobus_write_nested could fail, so let's
    return their error codes upstream.
    
    Signed-off-by: Kangjie Lu <kjlu@umn.edu>
    Signed-off-by: David S. Miller <davem@davemloft.net>

diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c
index aa4a1f5206f1..361fbde76654 100644
--- a/drivers/net/dsa/bcm_sf2.c
+++ b/drivers/net/dsa/bcm_sf2.c
@@ -303,11 +303,10 @@ static int bcm_sf2_sw_mdio_write(struct mii_bus *bus, int addr, int regnum,
 	 * send them to our master MDIO bus controller
 	 */
 	if (addr == BRCM_PSEUDO_PHY_ADDR && priv->indir_phy_mask & BIT(addr))
-		bcm_sf2_sw_indir_rw(priv, 0, addr, regnum, val);
+		return bcm_sf2_sw_indir_rw(priv, 0, addr, regnum, val);
 	else
-		mdiobus_write_nested(priv->master_mii_bus, addr, regnum, val);
-
-	return 0;
+		return mdiobus_write_nested(priv->master_mii_bus, addr,
+				regnum, val);
 }
 
 static irqreturn_t bcm_sf2_switch_0_isr(int irq, void *dev_id)

commit f86a3b83833e7cfe558ca4d70b64ebc48903efec
Author: Kangjie Lu <kjlu@umn.edu>
Date:   Tue Dec 25 20:57:14 2018 -0600

    net: stmicro: fix a missing check of clk_prepare
    
    clk_prepare() could fail, so let's check its status, and if it fails,
    return its error code upstream.
    
    Signed-off-by: Kangjie Lu <kjlu@umn.edu>
    Signed-off-by: David S. Miller <davem@davemloft.net>

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
index d07520fb969e..62ccbd47c1db 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
@@ -59,7 +59,9 @@ static int sun7i_gmac_init(struct platform_device *pdev, void *priv)
 		gmac->clk_enabled = 1;
 	} else {
 		clk_set_rate(gmac->tx_clk, SUN7I_GMAC_MII_RATE);
-		clk_prepare(gmac->tx_clk);
+		ret = clk_prepare(gmac->tx_clk);
+		if (ret)
+			return ret;
 	}
 
 	return 0;