UBUNTU: SAUCE: fbcon -- fix race between open and removal of framebuffers
authorAndy Whitcroft <apw@canonical.com>
Thu, 29 Jul 2010 15:48:20 +0000 (16:48 +0100)
committerLeann Ogasawara <leann.ogasawara@canonical.com>
Mon, 28 Mar 2011 13:50:33 +0000 (06:50 -0700)
commita4934a16b5f0b036eccc6985dbd2d8b42e45675a
treef36d2802d1b70bc6b713e0992bbc00d2b5bcef74
parentad661e4fc04e934844ec4227a02e8d5297a0e215
UBUNTU: SAUCE: fbcon -- fix race between open and removal of framebuffers

Currently there is no locking for updates to the registered_fb list.
This allows an open through /dev/fbN to pick up a registered framebuffer
pointer in parallel with it being released, as happens when a conflicting
framebuffer is ejected or on module unload.  There is also no reference
counting on the framebuffer descriptor which is referenced from all open
files, leading to references to released or reused memory to persist on
these open files.

This patch adds a reference count to the framebuffer descriptor to prevent
it from being released until after all pending opens are closed.  This
allows the pending opens to detect the closed status and unmap themselves.
It also adds locking to the framebuffer lookup path, locking it against
the removal path such that it is possible to atomically lookup and take a
reference to the descriptor.  It also adds locking to the read and write
paths which currently could access the framebuffer descriptor after it
has been freed.  Finally it moves the device to FBINFO_STATE_REMOVED to
indicate that all access should be errored for this device.

Signed-off-by: Andy Whitcroft <apw@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com>
drivers/video/fbmem.c
include/linux/fb.h