Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa93ca18 authored by OGAWA Hirofumi's avatar OGAWA Hirofumi Committed by Linus Torvalds
Browse files

fat: Fix _fat_bmap() race



fat_get_cluster() assumes the requested blocknr isn't truncated during
read. _fat_bmap() doesn't follow this rule.

This protects it by ->i_mutex.

Signed-off-by: default avatarOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent dfc209c0
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -199,7 +199,14 @@ static ssize_t fat_direct_IO(int rw, struct kiocb *iocb,

static sector_t _fat_bmap(struct address_space *mapping, sector_t block)
{
	return generic_block_bmap(mapping, block, fat_get_block);
	sector_t blocknr;

	/* fat_get_cluster() assumes the requested blocknr isn't truncated. */
	mutex_lock(&mapping->host->i_mutex);
	blocknr = generic_block_bmap(mapping, block, fat_get_block);
	mutex_unlock(&mapping->host->i_mutex);

	return blocknr;
}

static const struct address_space_operations fat_aops = {