Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b19c7df3 authored by Evgeny Novikov's avatar Evgeny Novikov Committed by Greg Kroah-Hartman
Browse files

video: fbdev: w100fb: Reset global state



[ Upstream commit 8738ddcac644964ae128ccd3d80d48773c8d528e ]

w100fb_probe() did not reset the global state to its initial state. This
can result in invocation of iounmap() even when there was not the
appropriate successful call of ioremap(). For instance, this may be the
case if first probe fails after two successful ioremap() while second
probe fails when first ioremap() fails. The similar issue is with
w100fb_remove(). The patch fixes both bugs.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: default avatarEvgeny Novikov <novikov@ispras.ru>
Co-developed-by: default avatarKirill Shilimanov <kirill.shilimanov@huawei.com>
Signed-off-by: default avatarKirill Shilimanov <kirill.shilimanov@huawei.com>
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 055cdd2e
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -770,12 +770,18 @@ int w100fb_probe(struct platform_device *pdev)
		fb_dealloc_cmap(&info->cmap);
		kfree(info->pseudo_palette);
	}
	if (remapped_fbuf != NULL)
	if (remapped_fbuf != NULL) {
		iounmap(remapped_fbuf);
	if (remapped_regs != NULL)
		remapped_fbuf = NULL;
	}
	if (remapped_regs != NULL) {
		iounmap(remapped_regs);
	if (remapped_base != NULL)
		remapped_regs = NULL;
	}
	if (remapped_base != NULL) {
		iounmap(remapped_base);
		remapped_base = NULL;
	}
	if (info)
		framebuffer_release(info);
	return err;
@@ -795,8 +801,11 @@ static int w100fb_remove(struct platform_device *pdev)
	fb_dealloc_cmap(&info->cmap);

	iounmap(remapped_base);
	remapped_base = NULL;
	iounmap(remapped_regs);
	remapped_regs = NULL;
	iounmap(remapped_fbuf);
	remapped_fbuf = NULL;

	framebuffer_release(info);