phy: ocelot-serdes: fix out-of-bounds bug
Subsystems (2)
cover phy: ocelot-serdes: fix out-of-bounds bug
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
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(-)
Signature · 1 line
2.7.4
PATCH 1/2 dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1
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.
--- include/dt-bindings/phy/phy-ocelot-serdes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/dt-bindings/phy/phy-ocelot-serdes.h +1 -1
@@ -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
Signature · 1 line
2.7.4
Re: [PATCH 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1
Hi Gustavo,
Quoted 6 lines · Gustavo A. R. Silva
SERDES_MAXis a valid value to indexctrl->physindrivers/phy/mscc/phy-ocelot-serdes.c. But, currently, there is an out-of-bounds bug in the mentioned driver when reading fromctrl->phys, because the size of arrayctrl->physisSERDES_MAX.
Quoted 6 lines
Partially fix this by updating
SERDES_MAXto beSERDES6G_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.
Thanks,
Quentin
Re: [PATCH 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1
Hi,
Quoted 9 lines · Quentin Schulz
Hi Gustavo,
Quoted 6 lines · Gustavo A. R. Silva
SERDES_MAXis a valid value to indexctrl->physindrivers/phy/mscc/phy-ocelot-serdes.c. But, currently, there is an out-of-bounds bug in the mentioned driver when reading fromctrl->phys, because the size of arrayctrl->physisSERDES_MAX.
Quoted 9 lines
Quoted 6 lines
Partially fix this by updating
SERDES_MAXto beSERDES6G_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.
Reviewed-by Quentin Schulz <[email protected]>
Friendly ping. Who can you take this?
Thanks!
--
Gustavo
Re: [PATCH 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1
Quoted 19 lines · Gustavo A. R. Silva
Hi,
Quoted 16 lines · Quentin Schulz
Hi Gustavo,
Quoted 12 lines · Gustavo A. R. Silva
SERDES_MAXis a valid value to indexctrl->physindrivers/phy/mscc/phy-ocelot-serdes.c. But, currently, there is an out-of-bounds bug in the mentioned driver when reading fromctrl->phys, because the size of arrayctrl->physisSERDES_MAX.Partially fix this by updating
SERDES_MAXto beSERDES6G_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.
Quoted 4 lines
Quoted 2 lines
Reviewed-by Quentin Schulz <[email protected]>Friendly ping. Who can you take this?
Applied. No need (nor benefit) to ping me. You can check the status of DT patches on patchwork[1]. If it is there and in the "New" state, it is in my queue.
Rob
[1] https://patchwork.ozlabs.org/project/devicetree-bindings/list/
Re: [PATCH 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1
Quoted 7 lines · Rob Herring
Quoted 2 lines
Friendly ping. Who can you take this?
Applied. No need (nor benefit) to ping me. You can check the status of DT patches on patchwork[1]. If it is there and in the "New" state, it is in my queue.
OK. I've got it. I just didn't know who usually takes these dt-bindings patches.
Quoted 4 lines
Rob
[1] https://patchwork.ozlabs.org/project/devicetree-bindings/list/
Thanks, Rob.
--
Gustavo
Re: [PATCH 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1
In reply to Rob HerringQuoted 20 lines · Rob Herring
Quoted 19 lines · Gustavo A. R. Silva
Hi,
Quoted 16 lines · Quentin Schulz
Hi Gustavo,
Quoted 12 lines · Gustavo A. R. Silva
SERDES_MAXis a valid value to indexctrl->physindrivers/phy/mscc/phy-ocelot-serdes.c. But, currently, there is an out-of-bounds bug in the mentioned driver when reading fromctrl->phys, because the size of arrayctrl->physisSERDES_MAX.Partially fix this by updating
SERDES_MAXto beSERDES6G_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.
Quoted 8 lines
Quoted 4 lines
Quoted 2 lines
Reviewed-by Quentin Schulz <[email protected]>Friendly ping. Who can you take this?
Applied. No need (nor benefit) to ping me. You can check the status of DT patches on patchwork[1]. If it is there and in the "New" state, it is in my queue.
Actually, this doesn't apply to my tree as the file doesn't exist. It needs to go thru the phy tree. You didn't Cc the maintainer nor list, so resend.
Rob
Re: [PATCH 1/2] dt-bindings: phy: Update SERDES_MAX to be SERDES_MAX + 1
Quoted 10 lines · Rob Herring
Quoted 5 lines
Quoted 1 line
Friendly ping. Who can you take this?
Applied. No need (nor benefit) to ping me. You can check the status of DT patches on patchwork[1]. If it is there and in the "New" state, it is in my queue.
Actually, this doesn't apply to my tree as the file doesn't exist. It needs to go thru the phy tree. You didn't Cc the maintainer nor list, so resend.
This is what I get when I run the get_maintainer script:
linux$ scripts/get_maintainer.pl --nokeywords --nogit --nogit-fallback include/dt-bindings/phy/phy-ocelot-serdes.h Rob Herring <[email protected]> (maintainer:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS) Mark Rutland <[email protected]> (maintainer:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS) [email protected] (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS) [email protected] (open list)
But I'll send it to the phy guys as you suggest.
Quoted 2 lines
Acked-by Rob Herring <[email protected]>
Thanks
--
Gustavo
PATCH 2/2 phy: ocelot-serdes: fix out-of-bounds read
In reply to Gustavo A. R. SilvaCurrently, 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")
--- drivers/phy/mscc/phy-ocelot-serdes.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/phy/mscc/phy-ocelot-serdes.c +2 -2
@@ -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 (!ctrl->regs)return -ENODEV ; -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;
Signature · 1 line
2.7.4
Re: [PATCH 2/2] phy: ocelot-serdes: fix out-of-bounds read
Hi Gustavo,
Quoted 7 lines · Gustavo A. R. Silva
Currently, there is an out-of-bounds read on array
ctrl->phys, once variable i reaches the maximum array size ofSERDES_MAXin the for loop.Fix this by changing the condition in the for loop from i <=
SERDES_MAXto i <SERDES_MAX.
Thanks,
Quentin
Re: [PATCH 2/2] phy: ocelot-serdes: fix out-of-bounds read
Hi,
Quoted 7 lines · Quentin Schulz
Hi Gustavo,
Quoted 4 lines · Gustavo A. R. Silva
Currently, there is an out-of-bounds read on array
ctrl->phys, once variable i reaches the maximum array size ofSERDES_MAXin the for loop.
Quoted 6 lines
Quoted 3 lines
Fix this by changing the condition in the for loop from i <=
SERDES_MAXto i <SERDES_MAX.Reviewed-by Quentin Schulz <[email protected]>
Friendly ping. Who can you take this?
Thanks!
--
Gustavo
Re: [PATCH 2/2] phy: ocelot-serdes: fix out-of-bounds read
Hi,
Quoted 10 lines · Gustavo A. R. Silva
Hi,
Quoted 7 lines · Quentin Schulz
Hi Gustavo,
Quoted 4 lines · Gustavo A. R. Silva
Currently, there is an out-of-bounds read on array
ctrl->phys, once variable i reaches the maximum array size ofSERDES_MAXin the for loop.
Quoted 8 lines
Quoted 6 lines
Quoted 3 lines
Fix this by changing the condition in the for loop from i <=
SERDES_MAXto i <SERDES_MAX.Reviewed-by Quentin Schulz <[email protected]>Friendly ping. Who can you take this?
This can go during the 4.20 -rc cycle.
Thanks
Kishon
Re: [PATCH 2/2] phy: ocelot-serdes: fix out-of-bounds read
Hi Kishon,
Quoted 17 lines · Kishon Vijay Abraham I
Hi,
Quoted 14 lines · Gustavo A. R. Silva
Hi,
Quoted 11 lines · Quentin Schulz
Hi Gustavo,
Quoted 7 lines · Gustavo A. R. Silva
Currently, there is an out-of-bounds read on array
ctrl->phys, once variable i reaches the maximum array size ofSERDES_MAXin the for loop.Fix this by changing the condition in the for loop from i <=
SERDES_MAXto i <SERDES_MAX.
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
Reviewed-by Quentin Schulz <[email protected]>Friendly ping. Who can you take this?
This can go during the 4.20 -rc cycle.
Should I resend the following patch to you, so the whole series is applied to your phy tree?
https://lore.kernel.org/patchwork/patch/997326/
Thanks
--
Gustavo
Re: [PATCH 2/2] phy: ocelot-serdes: fix out-of-bounds read
Hi,
Quoted 25 lines · Gustavo A. R. Silva
Hi Kishon,
Quoted 22 lines · Kishon Vijay Abraham I
Hi,
Quoted 18 lines · Gustavo A. R. Silva
Hi,
Quoted 7 lines · Quentin Schulz
Hi Gustavo,
Quoted 4 lines · Gustavo A. R. Silva
Currently, there is an out-of-bounds read on array
ctrl->phys, once variable i reaches the maximum array size ofSERDES_MAXin the for loop.Quoted 6 lines
Quoted 3 lines
Fix this by changing the condition in the for loop from i <=
SERDES_MAXto i <SERDES_MAX.Reviewed-by Quentin Schulz <[email protected]>Friendly ping. Who can you take this?
Quoted 7 lines
Quoted 2 lines
This can go during the 4.20 -rc cycle.
Should I resend the following patch to you, so the whole series is applied to your phy tree?
This is merged by David Miller.
Thanks
Kishon
Hi Gustavo,
Quoted 15 lines · 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 ofSERDES_MAXin the for loop.Quentin Schulz pointed out that
SERDES_MAXis a valid value to indexctrl->phys. So, I updatedSERDES_MAXto beSERDES6G_MAX+ 1 ininclude/dt-bindings/phy/phy-ocelot-serdes.h.Then I changed the condition in the for loop from
i <=SERDES_MAXto i <SERDES_MAXin order to
complete the fix.
Quoted 6 lines
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.
Much appreciated, thank you!
Quentin
Quoted 18 lines · Quentin Schulz
Hi Gustavo,
Quoted 15 lines · 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 ofSERDES_MAXin the for loop.Quentin Schulz pointed out that
SERDES_MAXis a valid value to indexctrl->phys. So, I updatedSERDES_MAXto beSERDES6G_MAX+ 1 ininclude/dt-bindings/phy/phy-ocelot-serdes.h.Then I changed the condition in the for loop from
i <=SERDES_MAXto i <SERDES_MAXin order to
complete the fix.
Quoted 9 lines
Quoted 6 lines
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.
Much appreciated, thank you!
Glad to help. :)
Thanks
--
Gustavo