media: pci: cx23885: handle adding to list failure

[ Upstream commit c5d59528e2 ]

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:
Nicholas Mc Guire 2018-09-09 12:02:32 -04:00 committed by Greg Kroah-Hartman
parent 85c2f31ac3
commit b3ad2c5249

View file

@ -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;
} }