From patchwork Wed Mar 19 11:21:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qasim Ijaz X-Patchwork-Id: 14022493 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99093254B05; Wed, 19 Mar 2025 11:22:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742383357; cv=none; b=raKyw7pOcN4TTNzZYcB1ILDjNdCeyQLbkShU2lY/d2QmLiWjXaKSgWj6RvGLlaq8IdMAs4PiPPGC8A4n08vdkzXi/9+qXv7BWV2VwaDJJ6Wg5dIoL+8nePyKLjyeHiD+D9swJiuEQ0RzichBsCFmtJvSrMhPrF62x9us5Thn0+E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742383357; c=relaxed/simple; bh=aY+wT718jcd7J9zYcBPNjAxxvgMi/7jJqwdrk3HqTIE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=kw9ZIaHRHCLshYBxRrDRpObi7AkeYU+L+9rNMERPJM211/gCFRf3XZtovWbfWxS1uAP0CNhpbvctJ6ndgCKxbm8OTWo5pKSTRZnUkJjTtQXGCC7g1aVBzA5NuKhFQZJR5NH0+tdCFOMQM/uW2Kj179gqjJoOloJb1rWX++Lie/E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=A4cgMsPl; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="A4cgMsPl" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-39129fc51f8so5986130f8f.0; Wed, 19 Mar 2025 04:22:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742383353; x=1742988153; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yqFmyb1JpY335n5hykX+2u4g/6H0xVX+LFgESzsIi/w=; b=A4cgMsPla1CWwWVu7RKMYAxXi19+QtETv5crQ+5eO1po7uYNVFhhCtP5IeOO5o+s5x mmRWbvFbrclzhsMmZWx5ksCxSoey4gTmAiLA/V3y7NwGD36un8bUowS+c5zvFfLKuD8f D+G7BDIHAxevKCsWu3MCJvNJZXYPnEK+GslXLwPmTIYio8RCkS3zqbqWZJAqR6G75DjV oDTpyww7ZnOL16SlFrrls+IWUk0AW9s8jDNZ0koqYB4vRUbCjeGPlloDNUVFEw+fIF64 WR3SFc/2crfyT3fl1Jtre+THj9yecE1Zy7C2X0U0iwjnMHN6q+AAZfbpmmfc9bF6uDxH vBSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742383353; x=1742988153; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yqFmyb1JpY335n5hykX+2u4g/6H0xVX+LFgESzsIi/w=; b=a9S6Ebtemt/0wHCe9P2QvOPyUusk9pyd4LbeJJgg9K+KmnYcKRvioTVAK/p1IDTEFU N2eTTrfJeRfHB6wpMZ4b/X4SdlPw4dO5mF0tGLMK/v9bhr4FNkOOqWY+MkPcrJKiwuVV BtaCBuACfobWECHFb9tZnDtG1x5VkUMAGlNtapVCCG8sWEhvImcRX+DP2VYcAasCuTHy 0/DEQgAc7fwZhwz66/AnV+WbnBWFa/U0HOrf6xJn/VxASn2C0ucTTRhfrt+iFoYhyj3n AZOrwCPasUVtmXnzM66ECfVzOtzXdxm1NUFyHBi1wTbsmh97yLoC34EA6EgZ2Xz25OX6 +YCQ== X-Forwarded-Encrypted: i=1; AJvYcCU8zZZpuHilNMH47pYDF0GzOQwFRcz7KIclZonVLCZNciOrewb6SL9Sx7MTEDsqZsRDQm2MeFFd@vger.kernel.org, AJvYcCVyTdgRUlz9FSxLqy/Em+T4Cj3uKbaPb/3KCjOKWCKCoRWp+D5FUOHPW/1DjsMRmO+eOkw/LNNWvXQIYxQ=@vger.kernel.org, AJvYcCXfr14WRzbzNbJZA4ZhphZZL9dagqqSK4NwFxD75aQ90ZUEuAN2r8v5oS/k3N7NpGQU+FbXzyQi@vger.kernel.org X-Gm-Message-State: AOJu0Yykyq9nazoH97AJT7CiYqp1ffneAxfBLyQ7q1nAu+6aTCCm5dBp MJ47gtXJVWT5CU13zFP4Z/P1uWCZoL19WSJptL422FK9115kguzp X-Gm-Gg: ASbGncslXTMpnM3bhCvESr0DJ6jL4/GJMCETxS2RxUS/CRCuuhKVVU7NtDLvJ1QUJnC nDoPFmolnxc4BtyoM0em7Y56B5L1DlPQchgIvi4vqBd2zZXy7ntxPA/OdP1hOahZFw8CQuOzxsv qZkBNZ+A0q2462rduhLb4hNfBFQNp7wUb0YlxN72BJDdZa1CsI3HaifqpHuLshxV3pk1mXBj3xq moKepkHDkLXeaCqBx45Gq2ISx7/hsO+Bn1lzh7Inq+IZh7zngZGzoxrn7m4nHaVf53dn0DA1/+q klac+C2Q36seGXSHDyO30tSahDphfM0j1DtDMBq7E3uy X-Google-Smtp-Source: AGHT+IFL9MGUujUDBlU3/GDWOPTBACNACMU/SkTPOYXvhtc0IL+svb6lUh6e379UZLXYraEphqGwbg== X-Received: by 2002:a5d:5847:0:b0:390:e311:a8c7 with SMTP id ffacd0b85a97d-399739b63d0mr1968735f8f.5.1742383352680; Wed, 19 Mar 2025 04:22:32 -0700 (PDT) Received: from qasdev.Home ([2a02:c7c:6696:8300:7659:65a:5e42:31a9]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d43f331dasm16129995e9.8.2025.03.19.04.22.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Mar 2025 04:22:32 -0700 (PDT) From: Qasim Ijaz To: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org Cc: linux-usb@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Qasim Ijaz , syzbot , stable@vger.kernel.org Subject: [PATCH 1/4] net: fix uninitialised access in mii_nway_restart() Date: Wed, 19 Mar 2025 11:21:53 +0000 Message-Id: <20250319112156.48312-2-qasdev00@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250319112156.48312-1-qasdev00@gmail.com> References: <20250319112156.48312-1-qasdev00@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org In mii_nway_restart() during the line: bmcr = mii->mdio_read(mii->dev, mii->phy_id, MII_BMCR); The code attempts to call mii->mdio_read which is ch9200_mdio_read(). ch9200_mdio_read() utilises a local buffer, which is initialised with control_read(): unsigned char buff[2]; However buff is conditionally initialised inside control_read(): if (err == size) { memcpy(data, buf, size); } If the condition of "err == size" is not met, then buff remains uninitialised. Once this happens the uninitialised buff is accessed and returned during ch9200_mdio_read(): return (buff[0] | buff[1] << 8); The problem stems from the fact that ch9200_mdio_read() ignores the return value of control_read(), leading to uinit-access of buff. To fix this we should check the return value of control_read() and return early on error. Reported-by: syzbot Closes: https://syzkaller.appspot.com/bug?extid=3361c2d6f78a3e0892f9 Tested-by: syzbot Fixes: 4a476bd6d1d9 ("usbnet: New driver for QinHeng CH9200 devices") Cc: stable@vger.kernel.org Signed-off-by: Qasim Ijaz Reviewed-by: Simon Horman --- drivers/net/mii.c | 2 ++ drivers/net/usb/ch9200.c | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/net/mii.c b/drivers/net/mii.c index 37bc3131d31a..e305bf0f1d04 100644 --- a/drivers/net/mii.c +++ b/drivers/net/mii.c @@ -464,6 +464,8 @@ int mii_nway_restart (struct mii_if_info *mii) /* if autoneg is off, it's an error */ bmcr = mii->mdio_read(mii->dev, mii->phy_id, MII_BMCR); + if (bmcr < 0) + return bmcr; if (bmcr & BMCR_ANENABLE) { bmcr |= BMCR_ANRESTART; diff --git a/drivers/net/usb/ch9200.c b/drivers/net/usb/ch9200.c index f69d9b902da0..a206ffa76f1b 100644 --- a/drivers/net/usb/ch9200.c +++ b/drivers/net/usb/ch9200.c @@ -178,6 +178,7 @@ static int ch9200_mdio_read(struct net_device *netdev, int phy_id, int loc) { struct usbnet *dev = netdev_priv(netdev); unsigned char buff[2]; + int ret; netdev_dbg(netdev, "%s phy_id:%02x loc:%02x\n", __func__, phy_id, loc); @@ -185,8 +186,10 @@ static int ch9200_mdio_read(struct net_device *netdev, int phy_id, int loc) if (phy_id != 0) return -ENODEV; - control_read(dev, REQUEST_READ, 0, loc * 2, buff, 0x02, - CONTROL_TIMEOUT_MS); + ret = control_read(dev, REQUEST_READ, 0, loc * 2, buff, 0x02, + CONTROL_TIMEOUT_MS); + if (ret < 0) + return ret; return (buff[0] | buff[1] << 8); } From patchwork Wed Mar 19 11:21:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qasim Ijaz X-Patchwork-Id: 14022494 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 076C025522F; Wed, 19 Mar 2025 11:22:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742383359; cv=none; b=JCQMa/pua5b8Eu3YPKuJg1tUbi9yRyxrI12J2UfIjB2NiEa/P8KBKESKbVUyuNRvg587XYbcOnOFq3TTSH2I3Cf046revSWUSNQ2/MS/q8XUzwt/rqcrq+5hPFixxr2W6EtupHi699qdITcHmXgszlpML4ECeHd5RXLGQB25V8w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742383359; c=relaxed/simple; bh=6h7bnQpHtPCW6xgpQ4IOScIZSu9bbeGGjJjoBgCuU4I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZG9mwOZeuzTVf4BnmG5yiRSJpm4pdsE5LUw0wjExn1HK6/bNoV8rNXFAkP9xoyDWH4/5iAi8COAFYbZ29q0PA+Vmv63Z1hXHejXAdWRSt7CXHhvFkq+qnr2AbG85DLrL6x+tQ3P5YY2cUPcWrgWNcjxyYAzJPLc3JLxT5X2xt/U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=E4+GGYSU; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="E4+GGYSU" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-43bb6b0b898so43852065e9.1; Wed, 19 Mar 2025 04:22:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742383355; x=1742988155; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4koewqxDTHBpZ5lG3AGHNZx2prhe+ZMYSkvtcR+jWI0=; b=E4+GGYSU/XN6y1LTpzF0Nc7lLDCPz3QkulezfxHCtlj2ktJT8XIaAesGS4p/9obVNH BHF4mkROjjwRbci1RXtFDvG2qAn3OTbMC4d/zRiKRqg89zUCkIb24hpl7sGhTlhsvYdF unFHdVM33zH4k17jG4fpiNCoCFGMOkNRpjTu0bV0fzF6VNmu1P2Y6lMTfDNUXtQU5KwL Hpo1dg5c/vVALmaA9QKr7ABVUSJr2M/fNUjRmC5cuMrN6AjQRXFGNzsGlwPfVlc2BED0 N0ofOCR31uP4KnN4lAY51BGx8xX5MwlvSE0/cg/50AWn4mafV9mc73wr37wNwFgW7Trk p16A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742383355; x=1742988155; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4koewqxDTHBpZ5lG3AGHNZx2prhe+ZMYSkvtcR+jWI0=; b=nIq+4sG8cE988lTiqqJXDrEXXOtGYHAwHdBP/rldtP9EcNSR4HiYHDsoUokAnl0wJf 8o1uQir23A+N5M+WFEdwoteDZitrEil+IS+4A25FmAdORRthh1uyr9p+OWgbb86nAFgR jASgQNaOoHAU1eDol+3jbEF2qq8VzALuhzpwXyqhYYHv+vTKJ+f8r/OVBkZWiriDCLaQ FtQc35haO0kmz3gcoVIYHxUZzHUBymtfXfTjq1HT2lO6togx9pV6+SBbOUUtpF0747Xp fatgvfuGVqsqEDxz5g8CmuMS01Yvc9xrudnEGdGc1IY19ktvviyc208VvOffVY43B8zM 0m/w== X-Forwarded-Encrypted: i=1; AJvYcCWz1kEaZ0A5/YRMDBajRxIbsA44vgnkacEgxT6V/uv5/WA9yzI98fJu+cisZbESZA+8Zgx2XLNtqZnLGDk=@vger.kernel.org, AJvYcCXtuh2tIEaFKiiNf6117RicAFnlTJY41Wxx4Q9CLwVLwLQQOuQk338S6AyC/TDylo4WC2jCXo7E@vger.kernel.org X-Gm-Message-State: AOJu0YzqxQLveWCc2I72zZruWnk4nL0cpWHU17ss9q83a4zf0Cw/iPUT 651DRnePHG4L5P7Oq3VplYxlZKvD++2c8EnQbqJkN5imDaBpjWL6fXz/kw== X-Gm-Gg: ASbGncuuqnq6aIetyuik21s6MtXmdOJKVz/Hh96JkBy51ntyBYlc682SED7+KDrid7Y ouigcwxXwUutNbs2MVFXC4XL+L6KRJ+UCQa8t7FGkAxpNJmnIsQ1roJEoTW5qJAbbtKOVQ5TVbr 7+6cG2zx/uZYSxm+tdUmMctYGTEaZ3Y+kabQMoiPF91BHCJGVuKl1H7mflyOncveM2Yyc2jN8po jwgGXoE9L0E7ail4H8TCKct0TqKtLUvQECOfQVQ7KP9E8dOpOJyy+8FctWj684ffG0y3Ff3XgMm EQ2JTkyX4+ep++vRke5yjPkqcpBfQG+tn6JqiK3y2p4j X-Google-Smtp-Source: AGHT+IFjh8y0LX65htmjE2swKmejXWXdaxkB9KzsHz3/x3m6UmpICPzfObosTXJmlXfCz0tN27HDLg== X-Received: by 2002:a05:600c:1990:b0:43b:ce08:c382 with SMTP id 5b1f17b1804b1-43d4379b70bmr19613965e9.16.1742383354964; Wed, 19 Mar 2025 04:22:34 -0700 (PDT) Received: from qasdev.Home ([2a02:c7c:6696:8300:7659:65a:5e42:31a9]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d43f331dasm16129995e9.8.2025.03.19.04.22.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Mar 2025 04:22:34 -0700 (PDT) From: Qasim Ijaz To: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org Cc: linux-usb@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Qasim Ijaz Subject: [PATCH 2/4] net: ch9200: remove extraneous return in control_write() to propagate failures Date: Wed, 19 Mar 2025 11:21:54 +0000 Message-Id: <20250319112156.48312-3-qasdev00@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250319112156.48312-1-qasdev00@gmail.com> References: <20250319112156.48312-1-qasdev00@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The control_write() function sets err to -EINVAL however there is an incorrectly placed 'return 0' statement after it which stops the propogation of the error. Fix this issue by removing the 'return 0'. Fixes: 4a476bd6d1d9 ("usbnet: New driver for QinHeng CH9200 devices") Signed-off-by: Qasim Ijaz Reviewed-by: Simon Horman --- drivers/net/usb/ch9200.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/net/usb/ch9200.c b/drivers/net/usb/ch9200.c index a206ffa76f1b..3a81e9e96fd3 100644 --- a/drivers/net/usb/ch9200.c +++ b/drivers/net/usb/ch9200.c @@ -168,8 +168,6 @@ static int control_write(struct usbnet *dev, unsigned char request, err = -EINVAL; kfree(buf); - return 0; - err_out: return err; } From patchwork Wed Mar 19 11:21:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qasim Ijaz X-Patchwork-Id: 14022495 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 66B362561AA; Wed, 19 Mar 2025 11:22:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742383360; cv=none; b=Q6OhQGQqKBs4xwhivw2I7H4kYlq8M6rDJ1551KrvGHqANXl3/aE9cflw4oYvp1VvaYEIdzk+cWuju49U/VoHmudaAbImyG7mckqR6/BbRirFOUAPSK4as7vZYWqOjGI6/qP8WxKpEQoRw+SV1lc36WtcBnV1BMceVfvdiKFjC80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742383360; c=relaxed/simple; bh=zl6mHtQV+ZU1gIP6Tu6sH5DzDDCDv5gaX0PKfL0UMSc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ojXF1WFRrAe5+gARdE5QQVTjk0ICZE/t2sXTUwXOZEfPjfUz+XseHBZHpResOFqoFITVW/+AZ45xLFmsqRGJSAyQj+XYJZAe3u0kYUCXxO5D1Z8sPJ26gqufJvmrJa/yuQ8k5X0t+LSBVHAYhI9XdWYnitYvigUhzfSA+WrDNgE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TzgcBfQm; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TzgcBfQm" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43cfebc343dso31712585e9.2; Wed, 19 Mar 2025 04:22:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742383357; x=1742988157; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VmnLqMstgAFg7ssuq9RhKNXQtfwhVeH5LoQjqlH9X9s=; b=TzgcBfQmD/dPt1H2soLLQjXo8wm7FibdTyoCn3O+L73a1dVn/XnyQo2SxTSa5FFdT2 c3H4twqLa/u1vka0qOPBmPVfL9vNF2rHS4Vf/Gx5a0XCJnGuT9asimbkkch6YJJYJwnd c/Kx+FmeHQa7BIR+e3jK4ky9pmUETEfpmwDeQ7+w1h2wDQqsgVDoxrcUSwlMSuOlEl8m ztmqvyarLa7sS1SLjRsQlGegNe8HLklGpM63fnolrgCxtmWy6IK3x2D+Ijdju4w7Lq00 L9wxCVUNwXRgVbZTmJXG7e5hPzlyqt7PwBWWheCDjVlb2ozV0Cduk/2plKIRr0YuGDZh S6gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742383357; x=1742988157; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VmnLqMstgAFg7ssuq9RhKNXQtfwhVeH5LoQjqlH9X9s=; b=SeY3DApx6ft/ZpmFUYk1PsCTus08c37azVJppGYqvP+cgi/Db5WiPDONWCY3FwQvlP hRzSsQ6tDy6DhGqpZ6ZEwDYMhTdnuCmIznbIH+7BDIUaCZ+FqSHAxN1AkH1rH5TaDew0 ecQpa9FYkOeVOTr4bXlzO2j9oGDFDY0GmaEVhEr7nRNYeJIUJXXh0fU+9+uPXkDbI7F5 0ceFfS1X0no9g+31QJE+CNoGrqSrCHVMy7Idg8/xw+UiJ3Wd7kQ1cqZV6aujvIq+joZu xlbKK970bWhBBwX2O0Ex6fXqCqZlDhLBTGIL5qWGrbMieJO71DOf+CCVbA89C0GPtbYj KV+w== X-Forwarded-Encrypted: i=1; AJvYcCVvF/zmfjf1FvNrB539APcaOew05yzRlkzvOKpZbdNQ4hd7ejdSEcY4YE1Pe+V+P0RXETu0ADETnn8TG68=@vger.kernel.org, AJvYcCXI4qtuqMpvcA8Z5g2OCCRCLZgFVwkQamY0HbwXez03iute5gmqGHxSLGVICFjivbO5VZNTUdIZ@vger.kernel.org X-Gm-Message-State: AOJu0YzYMIwFAeyZJLoE+dSi0YeiARxSWf8573GXiJvbAo71X6311tTy uYASXuI+o1OMdea8fyLZG6z0hQAWyRSrU/o1kugthnpdsWKf1Rhs X-Gm-Gg: ASbGncuVquwh5uW3mkIhKmZdN1HhxpmO/dZwmFABvzygW99yrSqv3CWBqVE1DYyFVxO SdFVeq5cQ4hyQIeRv34jDIa7Lb3MzXZyH2XLd1Bwexcy3deHDKjiAJXnpCDIcKPdR0hRG/jslaU iXUE527606KvosLd36uR09V/B/3Elk3ju3X2MNzbT75bSryig5LgE6pL1QPQZjaFdB6v5oJFkUp k3D3/A5SApIP6y7lBPz8Yh2UDkm2rICv8ezgDexfGFmbU5CbayvyYApL0kW/6bXCOOK3tOfKN2w XODrGVGLTOJzJCUvI8//wU/ueDW++5CqF93uHYIe+AUH X-Google-Smtp-Source: AGHT+IGThtIACP4EnrX9+iEIa7mQjXDoJ5u4Y3diPXjPa7xzN2QhsMdiAdjIcAWdwck2/2Vz8CUqEw== X-Received: by 2002:a05:600c:348e:b0:43b:cb12:ba6d with SMTP id 5b1f17b1804b1-43d437802c8mr22122825e9.3.1742383356427; Wed, 19 Mar 2025 04:22:36 -0700 (PDT) Received: from qasdev.Home ([2a02:c7c:6696:8300:7659:65a:5e42:31a9]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d43f331dasm16129995e9.8.2025.03.19.04.22.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Mar 2025 04:22:36 -0700 (PDT) From: Qasim Ijaz To: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org Cc: linux-usb@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Qasim Ijaz Subject: [PATCH 3/4] net: ch9200: improve error handling in get_mac_address() Date: Wed, 19 Mar 2025 11:21:55 +0000 Message-Id: <20250319112156.48312-4-qasdev00@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250319112156.48312-1-qasdev00@gmail.com> References: <20250319112156.48312-1-qasdev00@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The get_mac_address() function has an issue where it does not directly check the return value of each control_read(), instead it sums up the return values and checks them all at the end which means if any call to control_read() fails the function just continues on. Handle this by validating the return value of each call and fail fast and early instead of continuing. Fixes: 4a476bd6d1d9 ("usbnet: New driver for QinHeng CH9200 devices") Signed-off-by: Qasim Ijaz Reviewed-by: Simon Horman --- drivers/net/usb/ch9200.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/net/usb/ch9200.c b/drivers/net/usb/ch9200.c index 3a81e9e96fd3..a910aea0febe 100644 --- a/drivers/net/usb/ch9200.c +++ b/drivers/net/usb/ch9200.c @@ -304,24 +304,27 @@ static int ch9200_rx_fixup(struct usbnet *dev, struct sk_buff *skb) static int get_mac_address(struct usbnet *dev, unsigned char *data) { - int err = 0; unsigned char mac_addr[0x06]; - int rd_mac_len = 0; + int rd_mac_len; netdev_dbg(dev->net, "%s:\n\tusbnet VID:%0x PID:%0x\n", __func__, le16_to_cpu(dev->udev->descriptor.idVendor), le16_to_cpu(dev->udev->descriptor.idProduct)); - memset(mac_addr, 0, sizeof(mac_addr)); - rd_mac_len = control_read(dev, REQUEST_READ, 0, - MAC_REG_STATION_L, mac_addr, 0x02, - CONTROL_TIMEOUT_MS); - rd_mac_len += control_read(dev, REQUEST_READ, 0, MAC_REG_STATION_M, - mac_addr + 2, 0x02, CONTROL_TIMEOUT_MS); - rd_mac_len += control_read(dev, REQUEST_READ, 0, MAC_REG_STATION_H, - mac_addr + 4, 0x02, CONTROL_TIMEOUT_MS); - if (rd_mac_len != ETH_ALEN) - err = -EINVAL; + rd_mac_len = control_read(dev, REQUEST_READ, 0, MAC_REG_STATION_L, + mac_addr, 0x02, CONTROL_TIMEOUT_MS); + if (rd_mac_len < 0) + return rd_mac_len; + + rd_mac_len = control_read(dev, REQUEST_READ, 0, MAC_REG_STATION_M, + mac_addr + 2, 0x02, CONTROL_TIMEOUT_MS); + if (rd_mac_len < 0) + return rd_mac_len; + + rd_mac_len = control_read(dev, REQUEST_READ, 0, MAC_REG_STATION_H, + mac_addr + 4, 0x02, CONTROL_TIMEOUT_MS); + if (rd_mac_len < 0) + return rd_mac_len; data[0] = mac_addr[5]; data[1] = mac_addr[4]; @@ -330,7 +333,7 @@ static int get_mac_address(struct usbnet *dev, unsigned char *data) data[4] = mac_addr[1]; data[5] = mac_addr[0]; - return err; + return 0; } static int ch9200_bind(struct usbnet *dev, struct usb_interface *intf) @@ -386,6 +389,9 @@ static int ch9200_bind(struct usbnet *dev, struct usb_interface *intf) CONTROL_TIMEOUT_MS); retval = get_mac_address(dev, addr); + if (retval < 0) + return retval; + eth_hw_addr_set(dev->net, addr); return retval; From patchwork Wed Mar 19 11:21:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qasim Ijaz X-Patchwork-Id: 14022496 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 498D22571B3; Wed, 19 Mar 2025 11:22:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742383363; cv=none; b=qbRAQ2M3pE5WUIFifCmXXBInUuhbMabC7mRDF72q17v6wfqoVA/tj7CYXS4UpI0TWZFFe5GyuF20yIuiWKrcEKM9G+4GslybK+SdoUfWVE9qBKsPJMT05CEvaHXVwOfNitbuYEV2VwDowqvZMeFrqFREEPIgtmbfZdAHQYM5vzY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742383363; c=relaxed/simple; bh=OircmpDGdmxw5CMXq7XknY6CRaTkq0shBEgdN8YmMxU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ieo3NoTkVrXhjIcKs6XfPS0ylqMYLSo43xEEUKwTU5tyo/hmuaj8oQUD/jtfQxtFDzSzJX1EhSwDUTuI6QspUt8TIaPdnu6ZklJErkl6UOFQPZq+ulkJ8qTr/zuOqFvGinqGXe/sYh/wOyz0rEp8cCUxB4os8lTfwmFiTIzdy4U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=A9Gsi4bg; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="A9Gsi4bg" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-43d04ea9d9aso20569375e9.3; Wed, 19 Mar 2025 04:22:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742383358; x=1742988158; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mUwxD5jrSlU2QA0dVdywVoLJpdQCeU5/vf36fdL18Xw=; b=A9Gsi4bgrkQehvGZi/13TlqTbRmSJf5BbdQfwXxTv+1M2os1XSBJFAe9OLDu4u4thi gzs4yUqZAp0Z5LlMKxbcuK4wkOeTiecl+Ake6bisF4yJMXVxBndh4rLHwynvgso8gQjJ F0ZVSjOiZIMPZe696VLxZMoxZ6Z744HSofo7/NJ7etC6wX+ba64Cv7LfqwfYHOROx8F8 fxU31AgkBJxvOcL0wLimG/SJDMwd/3A33wNv0Nsu8sAuCvoycUBdduO9Y8Lx8L7W5pLT obybLNy9XWjgPKxeqs8lPfcSTDgc0jzypJFOCSAsyzNjOz+a1qOBXe6Cr5oXBydKetUb v2AQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742383358; x=1742988158; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mUwxD5jrSlU2QA0dVdywVoLJpdQCeU5/vf36fdL18Xw=; b=Lin2nkqPdiCgP1enZEXstuLzlOd6H4uf9LAfRE6WTjPBLqHmL2WO4sqfMYJpgC7Tdt vRn76E5HdlCsxzKGWfZ4VPfdO18qJa3Ip+/jk4vzG+gH/Q3s44633V8AerRnsT52P9qi N1CYr8DQf/XWexopM7+41ftWKwWTql5swDSEI+ieM3UiwdtNRqdL3sCpN4VpaHdKajra B9QOGyTA54TMXXFZXSAuWrotJ3ipV1YwJaDFCkh3/gVFr04YUcgtO+5GHWY+s6mPHp76 Kes/YwvPcrh7NMZaRZKZb4v/Ghmz3cml85oxJJXv/wBGtSF3ZqlUvrTQuUKztheb/9Qi FihQ== X-Forwarded-Encrypted: i=1; AJvYcCU7sbv1crRTpJ/cdsYOZxzX4j5nJ2VKOa50mMmXFcinPe5c3cK6TKxVlqcogN2EXR/sDq1klf4sTKekhME=@vger.kernel.org, AJvYcCUxujZHItBza9+H6uBSsk6m3z3gWQuGdD8nuGINtfq5kpKMleSpdxNLeWSUhRBxHpzizB6EUCMd@vger.kernel.org X-Gm-Message-State: AOJu0YzpEMJ2SX1yBqeWNy6R0TojQbMmhexanOijmcLEElr8ePgcM4Wf JAQEoisbsj3NSSdqF2XWkPb/zf47sUr/p5HpNBlXxXsmUskY8Vdj X-Gm-Gg: ASbGncvx0JN42fj1U2OjZdhPiFoXIpirbTXPva7TWRDyBWVrg+HfPlAKQl8rbq0EPMg DIQbdusYJmQTWEGF4JJhHd7cNttQApZGRi0hU1+8SJwATtsilqPuiJKDco0G6HJ2A2EJf79c+1u G2cFAUHi42pNEd3+cYikIcc0xqzBF45ZebaGLaZwfr8wkBt+Eqs32s3/HYD79oSxsXqc6D7nWfc wPKaEwTykLEpKDDex4xhfO5/Bt8GgZRHWVS9LoFELfsUBOStfLOsS7PQpNxEE1HL9fvzs0VdFLZ bau1CkorZxMUGuBXiXoUwsH/yehYJYJRlgtemJTnjUTj X-Google-Smtp-Source: AGHT+IHrxnA3liebLtQhqb06QfOjuFh2roeWDQ4FiS24+gpcLm0r2HfgE+C5btgQDzNHwYSVdvuRhQ== X-Received: by 2002:a05:600c:3b2a:b0:43d:45a:8fca with SMTP id 5b1f17b1804b1-43d4389a281mr17512725e9.30.1742383358163; Wed, 19 Mar 2025 04:22:38 -0700 (PDT) Received: from qasdev.Home ([2a02:c7c:6696:8300:7659:65a:5e42:31a9]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43d43f331dasm16129995e9.8.2025.03.19.04.22.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Mar 2025 04:22:37 -0700 (PDT) From: Qasim Ijaz To: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org Cc: linux-usb@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Qasim Ijaz Subject: [PATCH 4/4] net: ch9200: add error handling in ch9200_bind() Date: Wed, 19 Mar 2025 11:21:56 +0000 Message-Id: <20250319112156.48312-5-qasdev00@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250319112156.48312-1-qasdev00@gmail.com> References: <20250319112156.48312-1-qasdev00@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The ch9200_bind() function has no error handling for any control_write() calls. Fix this by checking if any control_write() call fails and propagate the error to the caller. Fixes: 4a476bd6d1d9 ("usbnet: New driver for QinHeng CH9200 devices") Signed-off-by: Qasim Ijaz Reviewed-by: Simon Horman --- drivers/net/usb/ch9200.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/net/usb/ch9200.c b/drivers/net/usb/ch9200.c index a910aea0febe..01ed37e9f725 100644 --- a/drivers/net/usb/ch9200.c +++ b/drivers/net/usb/ch9200.c @@ -338,12 +338,12 @@ static int get_mac_address(struct usbnet *dev, unsigned char *data) static int ch9200_bind(struct usbnet *dev, struct usb_interface *intf) { - int retval = 0; + int retval; unsigned char data[2]; u8 addr[ETH_ALEN]; retval = usbnet_get_endpoints(dev, intf); - if (retval) + if (retval < 0) return retval; dev->mii.dev = dev->net; @@ -361,32 +361,44 @@ static int ch9200_bind(struct usbnet *dev, struct usb_interface *intf) data[1] = 0x0F; retval = control_write(dev, REQUEST_WRITE, 0, MAC_REG_THRESHOLD, data, 0x02, CONTROL_TIMEOUT_MS); + if (retval < 0) + return retval; data[0] = 0xA0; data[1] = 0x90; retval = control_write(dev, REQUEST_WRITE, 0, MAC_REG_FIFO_DEPTH, data, 0x02, CONTROL_TIMEOUT_MS); + if (retval < 0) + return retval; data[0] = 0x30; data[1] = 0x00; retval = control_write(dev, REQUEST_WRITE, 0, MAC_REG_PAUSE, data, 0x02, CONTROL_TIMEOUT_MS); + if (retval < 0) + return retval; data[0] = 0x17; data[1] = 0xD8; retval = control_write(dev, REQUEST_WRITE, 0, MAC_REG_FLOW_CONTROL, data, 0x02, CONTROL_TIMEOUT_MS); + if (retval < 0) + return retval; /* Undocumented register */ data[0] = 0x01; data[1] = 0x00; retval = control_write(dev, REQUEST_WRITE, 0, 254, data, 0x02, CONTROL_TIMEOUT_MS); + if (retval < 0) + return retval; data[0] = 0x5F; data[1] = 0x0D; retval = control_write(dev, REQUEST_WRITE, 0, MAC_REG_CTRL, data, 0x02, CONTROL_TIMEOUT_MS); + if (retval < 0) + return retval; retval = get_mac_address(dev, addr); if (retval < 0) @@ -394,7 +406,7 @@ static int ch9200_bind(struct usbnet *dev, struct usb_interface *intf) eth_hw_addr_set(dev->net, addr); - return retval; + return 0; } static const struct driver_info ch9200_info = {