patch for 2.1.61 fat/msdos problems

Bill Hawes (whawes@star.net)
Tue, 04 Nov 1997 14:49:54 -0500


This is a multi-part message in MIME format.
--------------777DC5600F6B3874B0F08065
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

The attached patch corrects a number of inode-related problems in the
fat and msdos filesystems, plus some memory leaks. One of the memory
leaks is very easy to trigger, and could allow a malicious user with
mount privileges to bring a system down pretty quickly.

A summary of the changes:
(1) in fat_put_inode, don't do anything until the last effective use,
then clean up any linked and depend inodes.

(2) in fat_put_super, iocharset wasn't always being freed

(3) in fat_read_super, most of the error exits failed to release the
iocharset buffer. I've restructured to code to clean everything up on
errors.

(4) The nls_io field wasn't being initialized, leading to an oops on
umount if you don't have the nls code page loaded.

(5) for msdos_rmdir, change the test on i_count > 1 to d_count > 1 after
shrinking child dentries. The shrink is being done with
shrink_dcache_sb for now, but will change to shrink_dcache_parent when
it becomes available. The code here seems to rely on the inode being
iput immediately, because it it isn't you get "FAT cache corruption"
messages.

(6) In msdos_rename, the code was losing track of linked and depend
inodes under certain circumstances, leading to leaked inode counts. I
think this is a latent bug in the old code that gets triggered easily
with the dentry layer keeping inodes around for longer.

The patch checks out OK here, but I'm not much of a user of msdos disks,
so I'd appreciate it if others could test it thoroughly. If you've
experienced problems with msdos or fat fs, like "Inodes busy after
umount", this should fix things up.

Regards,
Bill
--------------777DC5600F6B3874B0F08065
Content-Type: application/x-gzip; name="fat_61-patch.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="fat_61-patch.gz"

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
rk/cGbqmb9dk5xaeVwAA
--------------777DC5600F6B3874B0F08065--