media: c8sectpfe: fix double free in configure_channels()
Subsystems (2)
PATCH 1/1 media: c8sectpfe: fix double free in configure_channels()
The configure_channels() function has a double free because configure_memdma_and_inputblock() calls free_input_block() and then it's called again in the error handling code.
Fixes c5f5d0f99794 ("[media] c8sectpfe: STiH407/10 Linux DVB demux support")
Signed-off-by Dan Carpenter <[email protected]>
--- drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c +3 -5
@@ -925,7 +925,6 @@ static int c8sectpfe_remove(struct platform_device *pdev)static int configure_channels (struct c8sectpfei *fei) {int index =0 , ret; -struct channel_info *tsin;struct device_node *child, *np = fei->dev->of_node;/* iterate round each tsin and configure memdma descriptor and IB hw */
@@ -943,10 +942,9 @@ static int configure_channels(struct c8sectpfei *fei)return 0 ; err_unmap: -for (index =0 ; index < fei->tsin_count; index++) { - tsin = fei->channel_data[index]; -free_input_block (fei, tsin); - } +while (--index >=0 ) +free_input_block (fei, fei->channel_data[index]); +return ret; }
Signature · 1 line
2.20.1
Hi Dan
Quoted 27 lines · Dan Carpenter
The
configure_channels()function has a double free becauseconfigure_memdma_and_inputblock()callsfree_input_block()and then it's called again in the error handling code.Fixes c5f5d0f99794 ("[media] c8sectpfe: STiH407/10 Linux DVB demux support")Signed-off-by Dan Carpenter <[email protected]>--- drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c +0
-1@@ -925,7 +925,6 @@ static int c8sectpfe_remove(struct platform_device *pdev)static int configure_channels (struct c8sectpfei *fei) {int index =0 , ret; -struct channel_info *tsin;struct device_node *child, *np = fei->dev->of_node;/* iterate round each tsin and configure memdma descriptor and IB hw */ @@ -943,10 +942,9 @@ static int configure_channels(struct c8sectpfei *fei)return 0 ; err_unmap:
drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c static int configure_channels(struct c8sectpfei *fei) · line 950
Quoted 10 lines
drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c +3
-4-for (index =0 ; index < fei->tsin_count; index++) { - tsin = fei->channel_data[index]; -free_input_block (fei, tsin); - } +while (--index >=0 ) +free_input_block (fei, fei->channel_data[index]); +return ret; }
Reviewed-by Patrice Chotard <[email protected]>
Thanks
Patrice