From patchwork Tue Jul 25 20:45:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 108699 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp28742qge; Tue, 25 Jul 2017 13:45:44 -0700 (PDT) X-Received: by 10.99.104.74 with SMTP id d71mr20218748pgc.7.1501015544866; Tue, 25 Jul 2017 13:45:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1501015544; cv=none; d=google.com; s=arc-20160816; b=kzq8bTUCxZaRz9hQSbUvTP8ynHP95nldw0P6TckhuNlDACI4PbBCeU2rM15B52BADN WJF3gxSyXQDk3GDDyU2S2ZxXOy8xidGpjpXVZnfVqvfW4aTcf/r6c6zU+ZpI/QOYtvK4 sIcVWM8kBtK/aAvP15oV7GpbX1L/cDdVabV8nXGGkgq1QsY5bapOuwg6bzPtDHAkH0ni uAhHvtMfMnn6+m7dCYSCMqb9rFOhO2Ueb1nA/39wcLhJ6R0TaVMjyjP3ygA8V6n/OfMo lMvvNCdFtRQ8Lu4SX1mjZ6iFhc4T2k5fiAtPKCK9pYkqosHJB0GZyNrxrI9kdkdupgX0 M2sA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=WANjGoObH+9ngJ7IwqVbjzK6wudKo7hArhspfeo+HNA=; b=06VCbf2G5cuCu81x8Iu6gOsAlO/8FATwjP+bczcIYyIlc2r5+9VZjGy/qSvZRLQtcU rEa2xL8f1FQB044/UM+nFA4RdM0ywpMHpruU1Fmy/tCfFcM3Ta78mbmJTrjpYtmvzeU+ xPRKQVfPonhgv5nKIDRFuX+uSQ9cBK89xfQQXGCQTlKRLbjrFQARp/uW8eJwvJ5My/TQ 2P9JfCi79zHAeDKGn1XWdvz+gCnISv9v1Msc62Iqml1Z/S4GSPkemIbkJytXDh6ZgzLj aFfmh8U3eZEPiftfQJM10GQyxHAVRDvro6KN97AMMNXqyROep8ii47ZwDwO2tbyiLhkY 0kYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.b=L2pC4/Iw; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u1si9102153plm.762.2017.07.25.13.45.44; Tue, 25 Jul 2017 13:45:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.b=L2pC4/Iw; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752616AbdGYUpm (ORCPT + 6 others); Tue, 25 Jul 2017 16:45:42 -0400 Received: from mail-pg0-f51.google.com ([74.125.83.51]:34526 "EHLO mail-pg0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751609AbdGYUpk (ORCPT ); Tue, 25 Jul 2017 16:45:40 -0400 Received: by mail-pg0-f51.google.com with SMTP id 123so74821926pgj.1 for ; Tue, 25 Jul 2017 13:45:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=WANjGoObH+9ngJ7IwqVbjzK6wudKo7hArhspfeo+HNA=; b=L2pC4/IwMiIRHxMs8YTM7UOS03D6gq2NQrnlt6sQA4f7bTaBkFVZfLv7Zb5GH7CpZ2 R3UFNwNx820VkNFPCLZH6gMHDp7IswHNEUtCC1o50AqIhQPFDwQdXZcfqfdERsNRxXVj H9fSkpB7LKrLOI1T7xI6PijSr5YB322MXMR2o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=WANjGoObH+9ngJ7IwqVbjzK6wudKo7hArhspfeo+HNA=; b=Exa00gFJAgFlV2QIYfJRPZg4p+vRAievx0TC3xs/RoJKB8TODqKhVzQKG9/E4bXCKx +Z55xVW7yiWoHaaJ6WAU8N/xKO2jVk6MKvXY7nVHKJ6uLHb5SiKsEbhInMAsE4VaaLAv +EbB9t6cvcsJVN6/5kwHiR8zu6X+zSWhDM6S4yvg3H6hrxh7ou6yDWq//pTtqkG9pYeQ cJOkWWCV531WfwdZK2mzMsqQOxrSi9CA0pXCfrAuaW0QHqTogTbnWtNCDJAfSXFXmHah XI/6t3rIjmUs3llh1qHprNL+pcxP1of7Pc25Lq1GRbbCFB1x+/9Mqljq7HPO+mJv1PN+ fjCw== X-Gm-Message-State: AIVw113HUB3kXI9zOUIHWs5wkpN1Aden0n4n20DL5NYrHJkVCjejW3Bx FFYrw2nYB48+1Vf9QshC1A== X-Received: by 10.84.218.4 with SMTP id q4mr22598242pli.202.1501015539929; Tue, 25 Jul 2017 13:45:39 -0700 (PDT) Received: from localhost.localdomain ([106.51.135.235]) by smtp.gmail.com with ESMTPSA id d4sm532125pfj.59.2017.07.25.13.45.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 25 Jul 2017 13:45:38 -0700 (PDT) From: Amit Pundir To: Greg KH Cc: Stable , Ben Hutchings , "David S . Miller" Subject: [PATCH for-3.18 03/15] sh_eth: Fix ethtool operation crash when net device is down Date: Wed, 26 Jul 2017 02:15:14 +0530 Message-Id: <1501015526-32178-4-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1501015526-32178-1-git-send-email-amit.pundir@linaro.org> References: <1501015526-32178-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Ben Hutchings commit 4f9dce230b32eec45cec8c28cae61efdfa2f7d57 upstream. The driver connects and disconnects the PHY device whenever the net device is brought up and down. The ethtool get_settings, set_settings and nway_reset operations will dereference a null or dangling pointer if called while it is down. I think it would be preferable to keep the PHY connected, but there may be good reasons not to. As an immediate fix for this bug: - Set the phydev pointer to NULL after disconnecting the PHY - Change those three operations to return -ENODEV while the PHY is not connected Signed-off-by: Ben Hutchings Signed-off-by: David S. Miller Signed-off-by: Amit Pundir --- drivers/net/ethernet/renesas/sh_eth.c | 10 ++++++++++ 1 file changed, 10 insertions(+) -- 2.7.4 diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c index c44bae495804..f25b5b8b120f 100644 --- a/drivers/net/ethernet/renesas/sh_eth.c +++ b/drivers/net/ethernet/renesas/sh_eth.c @@ -1832,6 +1832,9 @@ static int sh_eth_get_settings(struct net_device *ndev, unsigned long flags; int ret; + if (!mdp->phydev) + return -ENODEV; + spin_lock_irqsave(&mdp->lock, flags); ret = phy_ethtool_gset(mdp->phydev, ecmd); spin_unlock_irqrestore(&mdp->lock, flags); @@ -1846,6 +1849,9 @@ static int sh_eth_set_settings(struct net_device *ndev, unsigned long flags; int ret; + if (!mdp->phydev) + return -ENODEV; + spin_lock_irqsave(&mdp->lock, flags); /* disable tx and rx */ @@ -1880,6 +1886,9 @@ static int sh_eth_nway_reset(struct net_device *ndev) unsigned long flags; int ret; + if (!mdp->phydev) + return -ENODEV; + spin_lock_irqsave(&mdp->lock, flags); ret = phy_start_aneg(mdp->phydev); spin_unlock_irqrestore(&mdp->lock, flags); @@ -2189,6 +2198,7 @@ static int sh_eth_close(struct net_device *ndev) if (mdp->phydev) { phy_stop(mdp->phydev); phy_disconnect(mdp->phydev); + mdp->phydev = NULL; } free_irq(ndev->irq, ndev);