Testing for regressions in Media Controller API register, ioctl, syscall,
and unregister paths. There have a few problems that result in user-after
free on media_device, media_devnode, and cdev pointers when the driver is
unbound while ioctl is in progress.

Test Procedure:

Run bin/unbind loop while ioctls are in progress.
Run rmmod and modprobe.
Disconnect the device.

Setup:

Build media_device_test
cd tools/testing/selftests/media_tests
make

Regressions test for cdev user-after free error on /dev/mediaX when driver
is unbound:

Start media_device_test to regression test media devnode dynamic alloc
and cdev user-after-free fixes. This opens media dev files and sits in
a loop running media ioctl MEDIA_IOC_DEVICE_INFO command once every 10
seconds. The idea is when device file goes away, media devnode and cdev
should stick around until this test exits.

The test for a random number of iterations or until user kills it with a
sleep 10 in between the ioctl calls.

sudo ./media_device_test -d /dev/mediaX

Regression test for media_devnode unregister race with ioctl_syscall:

Start 6 open_loop_test.sh tests with different /dev/mediaX files. When
device file goes away after unbind, device file name changes. Start the
test with possible device names. If we start with /dev/media0 for example,
after unbind, /dev/media1 or /dev/media2 could get created. The idea is
keep ioctls going while bind/unbind runs.

Copy bind_unbind_sample.txt and make changes to specify the driver name
and number to run bind and unbind. Start the bind_unbind.sh

Run dmesg looking for any user-after free errors or mutex lock errors.
it.cgi/linux/net-next.git/log/tools/usb/ffs-aio-example'>log</a><a href='/cgit.cgi/linux/net-next.git/tree/tools/usb/ffs-aio-example?id=5f155c2563592b1908a7df2dcbd44893fde3e419'>tree</a><a href='/cgit.cgi/linux/net-next.git/commit/tools/usb/ffs-aio-example?id=5f155c2563592b1908a7df2dcbd44893fde3e419'>commit</a><a href='/cgit.cgi/linux/net-next.git/diff/tools/usb/ffs-aio-example?id=5f155c2563592b1908a7df2dcbd44893fde3e419'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/tools/usb/ffs-aio-example'>
<input type='hidden' name='id' value='5f155c2563592b1908a7df2dcbd44893fde3e419'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/log/?id=5f155c2563592b1908a7df2dcbd44893fde3e419'>root</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools?id=5f155c2563592b1908a7df2dcbd44893fde3e419'>tools</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools/usb?id=5f155c2563592b1908a7df2dcbd44893fde3e419'>usb</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools/usb/ffs-aio-example?id=5f155c2563592b1908a7df2dcbd44893fde3e419'>ffs-aio-example</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/cgit.cgi/linux/net-next.git/log/tools/usb/ffs-aio-example?id=5f155c2563592b1908a7df2dcbd44893fde3e419&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>