net: stmmac: sti: Fix uninitialized pointer dereference if !OF
authorGeert Uytterhoeven <geert@linux-m68k.org>
Mon, 15 Dec 2014 11:25:51 +0000 (12:25 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 15 Dec 2014 16:48:02 +0000 (11:48 -0500)
If CONFIG_OF is not set:

drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c: In function ‘sti_dwmac_parse_data’:
drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c:318: warning: ‘rs’ is used uninitialized in this function

of_property_read_string() will return -ENOSYS in this case, and rs will
be an uninitialized pointer.

While the fallback clock selection is already selected correctly in this
case, the string comparisons should be skipped too, else the system will
crash while dereferencing the uninitialized pointer.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c

index 0e137751e76e45b4e904a9156c6a4a07aad58e09..056b358b4a72441d424a9b3cf0094919e383c600 100644 (file)
@@ -309,16 +309,16 @@ static int sti_dwmac_parse_data(struct sti_dwmac *dwmac,
 
        if (IS_PHY_IF_MODE_GBIT(dwmac->interface)) {
                const char *rs;
-               dwmac->tx_retime_src = TX_RETIME_SRC_CLKGEN;
 
                err = of_property_read_string(np, "st,tx-retime-src", &rs);
-               if (err < 0)
+               if (err < 0) {
                        dev_warn(dev, "Use internal clock source\n");
-
-               if (!strcasecmp(rs, "clk_125"))
+                       dwmac->tx_retime_src = TX_RETIME_SRC_CLKGEN;
+               } else if (!strcasecmp(rs, "clk_125")) {
                        dwmac->tx_retime_src = TX_RETIME_SRC_CLK_125;
-               else if (!strcasecmp(rs, "txclk"))
+               } else if (!strcasecmp(rs, "txclk")) {
                        dwmac->tx_retime_src = TX_RETIME_SRC_TXCLK;
+               }
 
                dwmac->speed = SPEED_1000;
        }