Stuart Swales 2f09719af7 adfs: fix E+/F+ dir size > 2048 crashing kernel
Kernel crashes in fs/adfs module when accessing directories with a large
number of objects on mounted Acorn ADFS E+/F+ format discs (or images) as
the existing code writes off the end of the fixed array of struct
buffer_head pointers.

Additionally, each directory access that didn't crash would leak a buffer
as nr_buffers was not adjusted correctly for E+/F+ discs (was always left
as one less than required).

The patch fixes this by allocating a dynamically-sized set of struct
buffer_head pointers if necessary for the E+/F+ case (many directories
still do in fact fit in 2048 bytes) and sets the correct nr_buffers so
that all buffers are released.

Addresses https://bugzilla.kernel.org/show_bug.cgi?id=26072

Tested by tar'ing the contents of my RISC PC's E+ format 20Gb HDD which
contains a number of large directories that previously crashed the kernel.

Signed-off-by: Stuart Swales <stuart.swales.croftnuisk@gmail.com>
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-03-22 17:44:17 -07:00
..
2011-03-17 14:02:57 +01:00
2011-02-25 11:12:37 -08:00
2011-02-21 22:31:47 +00:00
2011-03-10 13:22:34 -06:00
2011-01-07 17:50:26 +11:00
2011-03-03 01:28:17 -05:00
2011-01-07 17:50:26 +11:00
2011-01-14 09:23:36 -08:00
2011-01-12 20:03:42 -05:00
2011-03-02 22:27:36 +01:00
2011-01-07 17:50:26 +11:00
2011-03-03 01:28:16 -05:00
2011-03-17 14:02:57 +01:00
2011-03-21 00:45:50 -04:00
2011-03-01 15:47:58 +01:00
2011-03-17 14:02:57 +01:00
2011-01-07 17:50:26 +11:00
2011-01-07 17:50:26 +11:00
2010-10-29 04:16:31 -04:00
2011-01-07 17:50:26 +11:00
2011-03-03 01:28:16 -05:00
2010-10-29 04:16:28 -04:00
2011-03-21 00:16:09 -04:00
2011-03-15 02:21:44 -04:00
2011-01-07 17:50:27 +11:00
2011-03-21 00:16:08 -04:00
2011-01-13 17:32:32 -08:00
2011-03-21 01:10:41 -04:00
2011-01-07 17:50:33 +11:00
2011-03-14 09:15:28 -04:00