mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-10 18:53:38 +00:00
media: pci: cx23885: handle adding to list failure
[ Upstream commitc5d59528e2
] altera_hw_filt_init() which calls append_internal() assumes that the node was successfully linked in while in fact it can silently fail. So the call-site needs to set return to -ENOMEM on append_internal() returning NULL and exit through the err path. Fixes:349bcf02e3
("[media] Altera FPGA based CI driver module") Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
85c2f31ac3
commit
b3ad2c5249
1 changed files with 10 additions and 0 deletions
|
@ -665,6 +665,10 @@ static int altera_hw_filt_init(struct altera_ci_config *config, int hw_filt_nr)
|
||||||
}
|
}
|
||||||
|
|
||||||
temp_int = append_internal(inter);
|
temp_int = append_internal(inter);
|
||||||
|
if (!temp_int) {
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
inter->filts_used = 1;
|
inter->filts_used = 1;
|
||||||
inter->dev = config->dev;
|
inter->dev = config->dev;
|
||||||
inter->fpga_rw = config->fpga_rw;
|
inter->fpga_rw = config->fpga_rw;
|
||||||
|
@ -699,6 +703,7 @@ static int altera_hw_filt_init(struct altera_ci_config *config, int hw_filt_nr)
|
||||||
__func__, ret);
|
__func__, ret);
|
||||||
|
|
||||||
kfree(pid_filt);
|
kfree(pid_filt);
|
||||||
|
kfree(inter);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -733,6 +738,10 @@ int altera_ci_init(struct altera_ci_config *config, int ci_nr)
|
||||||
}
|
}
|
||||||
|
|
||||||
temp_int = append_internal(inter);
|
temp_int = append_internal(inter);
|
||||||
|
if (!temp_int) {
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
inter->cis_used = 1;
|
inter->cis_used = 1;
|
||||||
inter->dev = config->dev;
|
inter->dev = config->dev;
|
||||||
inter->fpga_rw = config->fpga_rw;
|
inter->fpga_rw = config->fpga_rw;
|
||||||
|
@ -801,6 +810,7 @@ int altera_ci_init(struct altera_ci_config *config, int ci_nr)
|
||||||
ci_dbg_print("%s: Cannot initialize CI: Error %d.\n", __func__, ret);
|
ci_dbg_print("%s: Cannot initialize CI: Error %d.\n", __func__, ret);
|
||||||
|
|
||||||
kfree(state);
|
kfree(state);
|
||||||
|
kfree(inter);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue