Message ID | 20190311063632.21111-1-kjlu@umn.edu |
---|---|
State | Changes Requested |
Delegated to: | David Miller |
Headers | show |
Series | net: ocelot_board: fix a NULL pointer dereference | expand |
On 11/03/2019 01:36:32-0500, Kangjie Lu wrote: > In case devm_kcalloc fails, the fix returns -ENOMEM to avoid > NULL pointer dereference. > > Signed-off-by: Kangjie Lu <kjlu@umn.edu> Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com> > --- > drivers/net/ethernet/mscc/ocelot_board.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/net/ethernet/mscc/ocelot_board.c b/drivers/net/ethernet/mscc/ocelot_board.c > index e7f90101d2e0..af68abf1632a 100644 > --- a/drivers/net/ethernet/mscc/ocelot_board.c > +++ b/drivers/net/ethernet/mscc/ocelot_board.c > @@ -256,6 +256,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev) > > ocelot->ports = devm_kcalloc(&pdev->dev, ocelot->num_phys_ports, > sizeof(struct ocelot_port *), GFP_KERNEL); > + if (!ocelot->ports) > + return -ENOMEM; > > INIT_LIST_HEAD(&ocelot->multicast); > ocelot_init(ocelot); > -- > 2.17.1 >
On 03/11/2019 03:26 AM, Alexandre Belloni wrote: > On 11/03/2019 01:36:32-0500, Kangjie Lu wrote: >> In case devm_kcalloc fails, the fix returns -ENOMEM to avoid >> NULL pointer dereference. >> >> Signed-off-by: Kangjie Lu <kjlu@umn.edu> > Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com> > A proper error path is needed to avoid memory leaks. >> --- >> drivers/net/ethernet/mscc/ocelot_board.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/drivers/net/ethernet/mscc/ocelot_board.c b/drivers/net/ethernet/mscc/ocelot_board.c >> index e7f90101d2e0..af68abf1632a 100644 >> --- a/drivers/net/ethernet/mscc/ocelot_board.c >> +++ b/drivers/net/ethernet/mscc/ocelot_board.c >> @@ -256,6 +256,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev) >> >> ocelot->ports = devm_kcalloc(&pdev->dev, ocelot->num_phys_ports, >> sizeof(struct ocelot_port *), GFP_KERNEL); >> + if (!ocelot->ports) >> + return -ENOMEM; >> >> INIT_LIST_HEAD(&ocelot->multicast); >> ocelot_init(ocelot); >> -- >> 2.17.1 >> >
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Mon, 11 Mar 2019 07:14:58 -0700 > > > On 03/11/2019 03:26 AM, Alexandre Belloni wrote: >> On 11/03/2019 01:36:32-0500, Kangjie Lu wrote: >>> In case devm_kcalloc fails, the fix returns -ENOMEM to avoid >>> NULL pointer dereference. >>> >>> Signed-off-by: Kangjie Lu <kjlu@umn.edu> >> Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com> >> > > A proper error path is needed to avoid memory leaks. This seems to be a major chronic problem with all of these patches. Kangjie please put more care into the patches you are submitting. You absolutely CANNOT just add a error check and return, you must handle releasing resources and any other necessary cleanups.
> On Mar 11, 2019, at 9:14 AM, Eric Dumazet <eric.dumazet@gmail.com> wrote: > > > > On 03/11/2019 03:26 AM, Alexandre Belloni wrote: >> On 11/03/2019 01:36:32-0500, Kangjie Lu wrote: >>> In case devm_kcalloc fails, the fix returns -ENOMEM to avoid >>> NULL pointer dereference. >>> >>> Signed-off-by: Kangjie Lu <kjlu@umn.edu> >> Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com> >> > > A proper error path is needed to avoid memory leaks. Which objects require free specifically? The memory allocated with devm_kzalloc() is freed automatically. No need to explicitly free it again. -Kangjie > >>> --- >>> drivers/net/ethernet/mscc/ocelot_board.c | 2 ++ >>> 1 file changed, 2 insertions(+) >>> >>> diff --git a/drivers/net/ethernet/mscc/ocelot_board.c b/drivers/net/ethernet/mscc/ocelot_board.c >>> index e7f90101d2e0..af68abf1632a 100644 >>> --- a/drivers/net/ethernet/mscc/ocelot_board.c >>> +++ b/drivers/net/ethernet/mscc/ocelot_board.c >>> @@ -256,6 +256,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev) >>> >>> ocelot->ports = devm_kcalloc(&pdev->dev, ocelot->num_phys_ports, >>> sizeof(struct ocelot_port *), GFP_KERNEL); >>> + if (!ocelot->ports) >>> + return -ENOMEM; >>> >>> INIT_LIST_HEAD(&ocelot->multicast); >>> ocelot_init(ocelot); >>> -- >>> 2.17.1 >>> >>
diff --git a/drivers/net/ethernet/mscc/ocelot_board.c b/drivers/net/ethernet/mscc/ocelot_board.c index e7f90101d2e0..af68abf1632a 100644 --- a/drivers/net/ethernet/mscc/ocelot_board.c +++ b/drivers/net/ethernet/mscc/ocelot_board.c @@ -256,6 +256,8 @@ static int mscc_ocelot_probe(struct platform_device *pdev) ocelot->ports = devm_kcalloc(&pdev->dev, ocelot->num_phys_ports, sizeof(struct ocelot_port *), GFP_KERNEL); + if (!ocelot->ports) + return -ENOMEM; INIT_LIST_HEAD(&ocelot->multicast); ocelot_init(ocelot);
In case devm_kcalloc fails, the fix returns -ENOMEM to avoid NULL pointer dereference. Signed-off-by: Kangjie Lu <kjlu@umn.edu> --- drivers/net/ethernet/mscc/ocelot_board.c | 2 ++ 1 file changed, 2 insertions(+)