linux-brain/fs/fat
OGAWA Hirofumi 3554b8a172 fat: work around race with userspace's read via blockdev while mounting
[ Upstream commit 07bfa4415a ]

If userspace reads the buffer via blockdev while mounting,
sb_getblk()+modify can race with buffer read via blockdev.

For example,

            FS                               userspace
    bh = sb_getblk()
    modify bh->b_data
                                  read
				    ll_rw_block(bh)
				      fill bh->b_data by on-disk data
				      /* lost modified data by FS */
				      set_buffer_uptodate(bh)
    set_buffer_uptodate(bh)

Userspace should not use the blockdev while mounting though, the udev
seems to be already doing this.  Although I think the udev should try to
avoid this, workaround the race by small overhead.

Link: http://lkml.kernel.org/r/87pnk7l3sw.fsf_-_@mail.parknet.co.jp
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Reported-by: Jan Stancek <jstancek@redhat.com>
Tested-by: Jan Stancek <jstancek@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-10-07 18:55:12 +02:00
..
Kconfig fat: add config option to set UTF-8 mount option by default 2016-03-22 15:36:02 -07:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cache.c fat: validate ->i_start before using 2018-09-15 09:45:27 +02:00
dir.c fat: work around race with userspace's read via blockdev while mounting 2019-10-07 18:55:12 +02:00
fat.h fat: validate ->i_start before using 2018-09-15 09:45:27 +02:00
fatent.c fat: work around race with userspace's read via blockdev while mounting 2019-10-07 18:55:12 +02:00
file.c fs/fat/file.c: issue flush after the writeback of FAT 2019-06-15 11:54:51 +02:00
inode.c fat: fix memory allocation failure handling of match_strdup() 2018-07-25 11:25:07 +02:00
misc.c VFS: Convert sb->s_flags & MS_RDONLY to sb_rdonly(sb) 2017-07-17 08:45:34 +01:00
namei_msdos.c Merge remote-tracking branch 'ovl/rename2' into for-linus 2016-10-10 23:02:51 -04:00
namei_vfat.c vfat: deduplicate hex2bin() 2017-09-08 18:26:50 -07:00
nfs.c VFS: normal filesystems (and lustre): d_inode() annotations 2015-04-15 15:06:57 -04:00