media: isif: reset global state
isif_probe() invokes iounmap() on error handling paths, but it does not reset the global state. So, later it can invoke iounmap() even when ioremap() fails. This is the case also for isif_remove(). The patch resets the global state after invoking iounmap() to avoid this. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Evgeny Novikov <novikov@ispras.ru> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
d30ac9d81a
commit
6651dba2bd
|
@ -1075,10 +1075,14 @@ fail_base_iomap:
|
|||
release_mem_region(res->start, resource_size(res));
|
||||
i--;
|
||||
fail_nobase_res:
|
||||
if (isif_cfg.base_addr)
|
||||
if (isif_cfg.base_addr) {
|
||||
iounmap(isif_cfg.base_addr);
|
||||
if (isif_cfg.linear_tbl0_addr)
|
||||
isif_cfg.base_addr = NULL;
|
||||
}
|
||||
if (isif_cfg.linear_tbl0_addr) {
|
||||
iounmap(isif_cfg.linear_tbl0_addr);
|
||||
isif_cfg.linear_tbl0_addr = NULL;
|
||||
}
|
||||
|
||||
while (i >= 0) {
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, i);
|
||||
|
@ -1096,8 +1100,11 @@ static int isif_remove(struct platform_device *pdev)
|
|||
int i = 0;
|
||||
|
||||
iounmap(isif_cfg.base_addr);
|
||||
isif_cfg.base_addr = NULL;
|
||||
iounmap(isif_cfg.linear_tbl0_addr);
|
||||
isif_cfg.linear_tbl0_addr = NULL;
|
||||
iounmap(isif_cfg.linear_tbl1_addr);
|
||||
isif_cfg.linear_tbl1_addr = NULL;
|
||||
while (i < 3) {
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, i);
|
||||
if (res)
|
||||
|
|
Loading…
Reference in New Issue