All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/2] phy: ocelot-serdes: fix out-of-bounds read
@ 2018-10-19  9:18 Gustavo A. R. Silva
  2018-10-19  9:19 ` [PATCH v3 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1 Gustavo A. R. Silva
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Gustavo A. R. Silva @ 2018-10-19  9:18 UTC (permalink / raw)
  To: linux-kernel
  Cc: Rob Herring, Mark Rutland, devicetree, Kishon Vijay Abraham I,
	David S. Miller, Quentin Schulz, netdev, Gustavo A. R. Silva

This patchset aims to fix an out-of-bounds bug in
the phy-ocelot-serdes driver.

Currently, there is an out-of-bounds read on array ctrl->phys,
once variable i reaches the maximum array size of SERDES_MAX
in the for loop.

Quentin Schulz pointed out that SERDES_MAX is a valid value to
index ctrl->phys. So, I updated SERDES_MAX to be SERDES6G_MAX + 1
in include/dt-bindings/phy/phy-ocelot-serdes.h.

Then I changed the condition in the for loop from
i <= SERDES_MAX to i < SERDES_MAX in order to
complete the fix.

The reason I'm sending this fix as series is because
checkpatch reported an error when I first tried to
integrate the whole solution into a singe patch. So,
changes to dt-bindings should be sent as a separate
patch.

Thanks!

Changes in v3:
 - Post the series to netdev, so Dave can take it.

Changes in v2:
 - Send the whole series to Kishon Vijay Abraham I, so it
   can be taken into the PHY tree.
 - Add Quentin's Reviewed-by to commit log in both patches.

Gustavo A. R. Silva (2):
  dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1
  phy: ocelot-serdes: fix out-of-bounds read

 drivers/phy/mscc/phy-ocelot-serdes.c        | 4 ++--
 include/dt-bindings/phy/phy-ocelot-serdes.h | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

-- 
2.7.4


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v3 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1
  2018-10-19  9:18 [PATCH v3 0/2] phy: ocelot-serdes: fix out-of-bounds read Gustavo A. R. Silva
@ 2018-10-19  9:19 ` Gustavo A. R. Silva
  2018-10-19  9:21 ` [PATCH v3 2/2] phy: ocelot-serdes: fix out-of-bounds read Gustavo A. R. Silva
  2018-10-23  2:27 ` [PATCH v3 0/2] " David Miller
  2 siblings, 0 replies; 5+ messages in thread
From: Gustavo A. R. Silva @ 2018-10-19  9:19 UTC (permalink / raw)
  To: linux-kernel
  Cc: Rob Herring, Mark Rutland, devicetree, Kishon Vijay Abraham I,
	David S. Miller, Quentin Schulz, netdev, Gustavo A. R. Silva

SERDES_MAX is a valid value to index ctrl->phys in
drivers/phy/mscc/phy-ocelot-serdes.c. But, currently,
there is an out-of-bounds bug in the mentioned driver
when reading from ctrl->phys, because the size of
array ctrl->phys is SERDES_MAX.

Partially fix this by updating SERDES_MAX to be SERDES6G_MAX + 1.

Notice that this is the first part of the solution to
the out-of-bounds bug mentioned above. Although this
change is not dependent on any other one.

Suggested-by: Quentin Schulz <quentin.schulz@bootlin.com>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
---
Changes in v3:
 - Post the patch to netdev.

Changes in v2:
 - Add Quentin's Reviewed-by to commit log.
 - Add Rob's Acked-by to commit log.

 include/dt-bindings/phy/phy-ocelot-serdes.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/dt-bindings/phy/phy-ocelot-serdes.h b/include/dt-bindings/phy/phy-ocelot-serdes.h
index bd28f21..fe70ada 100644
--- a/include/dt-bindings/phy/phy-ocelot-serdes.h
+++ b/include/dt-bindings/phy/phy-ocelot-serdes.h
@@ -7,6 +7,6 @@
 #define SERDES1G_MAX	SERDES1G(5)
 #define SERDES6G(x)	(SERDES1G_MAX + 1 + (x))
 #define SERDES6G_MAX	SERDES6G(2)
-#define SERDES_MAX	SERDES6G_MAX
+#define SERDES_MAX	(SERDES6G_MAX + 1)
 
 #endif
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v3 2/2] phy: ocelot-serdes: fix out-of-bounds read
  2018-10-19  9:18 [PATCH v3 0/2] phy: ocelot-serdes: fix out-of-bounds read Gustavo A. R. Silva
  2018-10-19  9:19 ` [PATCH v3 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1 Gustavo A. R. Silva
@ 2018-10-19  9:21 ` Gustavo A. R. Silva
  2018-10-23  2:27 ` [PATCH v3 0/2] " David Miller
  2 siblings, 0 replies; 5+ messages in thread
From: Gustavo A. R. Silva @ 2018-10-19  9:21 UTC (permalink / raw)
  To: linux-kernel
  Cc: Kishon Vijay Abraham I, David S. Miller, Quentin Schulz, netdev,
	Gustavo A. R. Silva

Currently, there is an out-of-bounds read on array ctrl->phys,
once variable i reaches the maximum array size of SERDES_MAX
in the for loop.

Fix this by changing the condition in the for loop from
i <= SERDES_MAX to i < SERDES_MAX.

Addresses-Coverity-ID: 1473966 ("Out-of-bounds read")
Addresses-Coverity-ID: 1473959 ("Out-of-bounds read")
Fixes: 51f6b410fc22 ("phy: add driver for Microsemi Ocelot SerDes muxing")
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
---
Changes in v3:
 - Post the patch to netdev.

Changes in v2:
 - Rebase and add Quentin's Reviewed-by to commit log.

 drivers/phy/mscc/phy-ocelot-serdes.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/phy/mscc/phy-ocelot-serdes.c b/drivers/phy/mscc/phy-ocelot-serdes.c
index b2be546..cbb49d9 100644
--- a/drivers/phy/mscc/phy-ocelot-serdes.c
+++ b/drivers/phy/mscc/phy-ocelot-serdes.c
@@ -206,7 +206,7 @@ static struct phy *serdes_simple_xlate(struct device *dev,
 	port = args->args[0];
 	idx = args->args[1];
 
-	for (i = 0; i <= SERDES_MAX; i++) {
+	for (i = 0; i < SERDES_MAX; i++) {
 		struct serdes_macro *macro = phy_get_drvdata(ctrl->phys[i]);
 
 		if (idx != macro->idx)
@@ -260,7 +260,7 @@ static int serdes_probe(struct platform_device *pdev)
 	if (IS_ERR(ctrl->regs))
 		return PTR_ERR(ctrl->regs);
 
-	for (i = 0; i <= SERDES_MAX; i++) {
+	for (i = 0; i < SERDES_MAX; i++) {
 		ret = serdes_phy_create(ctrl, i, &ctrl->phys[i]);
 		if (ret)
 			return ret;
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v3 0/2] phy: ocelot-serdes: fix out-of-bounds read
  2018-10-19  9:18 [PATCH v3 0/2] phy: ocelot-serdes: fix out-of-bounds read Gustavo A. R. Silva
  2018-10-19  9:19 ` [PATCH v3 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1 Gustavo A. R. Silva
  2018-10-19  9:21 ` [PATCH v3 2/2] phy: ocelot-serdes: fix out-of-bounds read Gustavo A. R. Silva
@ 2018-10-23  2:27 ` David Miller
  2018-10-23 11:14   ` Gustavo A. R. Silva
  2 siblings, 1 reply; 5+ messages in thread
From: David Miller @ 2018-10-23  2:27 UTC (permalink / raw)
  To: gustavo
  Cc: linux-kernel, robh+dt, mark.rutland, devicetree, kishon,
	quentin.schulz, netdev

From: "Gustavo A. R. Silva" <gustavo@embeddedor.com>
Date: Fri, 19 Oct 2018 11:18:43 +0200

> This patchset aims to fix an out-of-bounds bug in
> the phy-ocelot-serdes driver.
> 
> Currently, there is an out-of-bounds read on array ctrl->phys,
> once variable i reaches the maximum array size of SERDES_MAX
> in the for loop.
> 
> Quentin Schulz pointed out that SERDES_MAX is a valid value to
> index ctrl->phys. So, I updated SERDES_MAX to be SERDES6G_MAX + 1
> in include/dt-bindings/phy/phy-ocelot-serdes.h.
> 
> Then I changed the condition in the for loop from
> i <= SERDES_MAX to i < SERDES_MAX in order to
> complete the fix.
> 
> The reason I'm sending this fix as series is because
> checkpatch reported an error when I first tried to
> integrate the whole solution into a singe patch. So,
> changes to dt-bindings should be sent as a separate
> patch.
> 
> Thanks!
> 
> Changes in v3:
>  - Post the series to netdev, so Dave can take it.
> 
> Changes in v2:
>  - Send the whole series to Kishon Vijay Abraham I, so it
>    can be taken into the PHY tree.
>  - Add Quentin's Reviewed-by to commit log in both patches.

Series applied.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3 0/2] phy: ocelot-serdes: fix out-of-bounds read
  2018-10-23  2:27 ` [PATCH v3 0/2] " David Miller
@ 2018-10-23 11:14   ` Gustavo A. R. Silva
  0 siblings, 0 replies; 5+ messages in thread
From: Gustavo A. R. Silva @ 2018-10-23 11:14 UTC (permalink / raw)
  To: David Miller
  Cc: linux-kernel, robh+dt, mark.rutland, devicetree, kishon,
	quentin.schulz, netdev



On 10/23/18 4:27 AM, David Miller wrote:
>>
>> Changes in v3:
>>  - Post the series to netdev, so Dave can take it.
>>
>> Changes in v2:
>>  - Send the whole series to Kishon Vijay Abraham I, so it
>>    can be taken into the PHY tree.
>>  - Add Quentin's Reviewed-by to commit log in both patches.
> 
> Series applied.
> 

Thanks, Dave.
--
Gustavo

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-10-23 11:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-19  9:18 [PATCH v3 0/2] phy: ocelot-serdes: fix out-of-bounds read Gustavo A. R. Silva
2018-10-19  9:19 ` [PATCH v3 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1 Gustavo A. R. Silva
2018-10-19  9:21 ` [PATCH v3 2/2] phy: ocelot-serdes: fix out-of-bounds read Gustavo A. R. Silva
2018-10-23  2:27 ` [PATCH v3 0/2] " David Miller
2018-10-23 11:14   ` Gustavo A. R. Silva

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.