Fixes an issue where bind mounts with shorter mount directories than the original mount are prioritized when running df. The root cause of this is that /proc/self/mountinfo now lists the filesystem device with bind mounts rather than the source directory. With /etc/mtab the source device was listed as the originating directory so this was not an issue.
More information is available here. https://bugs.launchpad.net/ubuntu/+source/coreutils/+bug/1432871 --- src/df.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/df.c b/src/df.c index 2e541b9..00c77c1 100644 --- a/src/df.c +++ b/src/df.c @@ -652,9 +652,14 @@ filter_mount_list (bool devices_only) else if ((strchr (me->me_devname, '/') /* let "real" devices with '/' in the name win. */ && ! strchr (devlist->me->me_devname, '/')) - /* let a shorter mountdir win. */ - || (strlen (devlist->me->me_mountdir) + /* let a shorter mountdir win. */ + /* Only if it's not a bind mount. */ + || ((strlen (devlist->me->me_mountdir) > strlen (me->me_mountdir)) + && (devlist->me->me_mntroot != NULL + && me->me_mntroot != NULL + && (strlen (devlist->me->me_mntroot) + > strlen(me->me_mntroot)))) /* let an entry overmounted on a new device win... */ || (! STREQ (devlist->me->me_devname, me->me_devname) /* ... but only when matching an existing mnt point, -- 1.9.1
