Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fs: Don't return 0 from get_anon_bdev

Commit 9e30cc9595303b27b48 removed an internal mount. This
has the side-effect that rootfs now has FSID 0. Many
userspace utilities assume that st_dev in struct stat
is never 0, so this change breaks a number of tools in
early userspace.

Since we don't know how many userspace programs are affected,
make sure that FSID is at least 1.

References: http://article.gmane.org/gmane.linux.kernel/1666905
References: http://permalink.gmane.org/gmane.linux.utilities.util-linux-ng/8557
Cc: 3.14 <stable@vger.kernel.org>
Signed-off-by: Thomas Bächler <thomas@archlinux.org>
Acked-by: Tejun Heo <tj@kernel.org>
Acked-by: H. Peter Anvin <hpa@zytor.com>
Tested-by: Alexandre Demers <alexandre.f.demers@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Thomas Bächler and committed by
Greg Kroah-Hartman
a2a4dc49 c9eaa447

+4 -1
+4 -1
fs/super.c
··· 800 800 801 801 static DEFINE_IDA(unnamed_dev_ida); 802 802 static DEFINE_SPINLOCK(unnamed_dev_lock);/* protects the above */ 803 - static int unnamed_dev_start = 0; /* don't bother trying below it */ 803 + /* Many userspace utilities consider an FSID of 0 invalid. 804 + * Always return at least 1 from get_anon_bdev. 805 + */ 806 + static int unnamed_dev_start = 1; 804 807 805 808 int get_anon_bdev(dev_t *p) 806 809 {