Description of problem: cdrom_read_capacity() will blindly return the capacity from the device without sanity-checking it. This later causes code in fs/buffer.c to oops. Fix this by checking that the device is telling us sensible things.
Proposed upstream patch: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=e8e7b9eb11c34ee18bde8b7011af41938d1ad667
With reference to http://lkml.org/lkml/2008/6/22/90, problem was triggered by running "genisoimage -C 16,737776 -M /dev/fd/3 -R -J foobar | builtin_dd of=/dev/dvd obs=32k seek=46111" on a ppc64 machine.
There's a follow-up patch that fixes a bug in commit e8e7b9eb11c34ee18bde8b7011af41938d1ad667. Please include commit 938bb03d188a1e688fb0bcae49788f540193e80a in your backported patch. Thanks.
Created attachment 314506 [details] Backport of mainstream patches The attached patch is the backport of the upstream git patches. On all tests I did here with RHEL5 with and without the patch, I couldn't reproduce the bug on i386. I suspect that it occurs only on some other architecture (the original report were on ppc64), or when the first DVD record has an unusual block size. The patch were posted today.
in kernel-2.6.18-110.el5 You can download this test kernel from http://people.redhat.com/dzickus/el5
An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHSA-2009-0225.html