summaryrefslogtreecommitdiffstats
path: root/sys/geom/label/g_label_ext2fs.c
diff options
context:
space:
mode:
authorsobomax <sobomax@FreeBSD.org>2011-03-08 17:00:31 +0000
committersobomax <sobomax@FreeBSD.org>2011-03-08 17:00:31 +0000
commite356b9f82bc64f86cd73c09b9aa1d563311aa214 (patch)
treeecb77aeabf0015fd1442e3bd558930a5c7bb35c7 /sys/geom/label/g_label_ext2fs.c
parent269e1daa8fe439dcd0d7320b0f334d69afbf872e (diff)
downloadFreeBSD-src-e356b9f82bc64f86cd73c09b9aa1d563311aa214.zip
FreeBSD-src-e356b9f82bc64f86cd73c09b9aa1d563311aa214.tar.gz
Some linux distros put mount point into the ext2fs labels, such as '/', or
'/boot', which confuses the devfs code and can cause userland programs to fail reading /dev/ext2fs directory with weird error code, such as any program that uses pwlib. Strip any leading slashes before feeding the label to the geom_label code. Sponsored by: Sippy Software, Inc. MFC after: 1 week
Diffstat (limited to 'sys/geom/label/g_label_ext2fs.c')
-rw-r--r--sys/geom/label/g_label_ext2fs.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/geom/label/g_label_ext2fs.c b/sys/geom/label/g_label_ext2fs.c
index 2e00493..1c2eeb8 100644
--- a/sys/geom/label/g_label_ext2fs.c
+++ b/sys/geom/label/g_label_ext2fs.c
@@ -53,6 +53,7 @@ g_label_ext2fs_taste(struct g_consumer *cp, char *label, size_t size)
{
struct g_provider *pp;
e2sb_t *fs;
+ char *s_volume_name;
g_topology_assert_not();
pp = cp->provider;
@@ -74,13 +75,18 @@ g_label_ext2fs_taste(struct g_consumer *cp, char *label, size_t size)
goto exit_free;
}
+ s_volume_name = fs->s_volume_name;
+ /* Terminate label */
+ s_volume_name[sizeof(fs->s_volume_name) - 1] = '\0';
+
+ if (s_volume_name[0] == '/')
+ s_volume_name += 1;
+
/* Check for volume label */
- if (fs->s_volume_name[0] == '\0')
+ if (s_volume_name[0] == '\0')
goto exit_free;
- /* Terminate label */
- fs->s_volume_name[sizeof(fs->s_volume_name) - 1] = '\0';
- strlcpy(label, fs->s_volume_name, size);
+ strlcpy(label, s_volume_name, size);
exit_free:
g_free(fs);
OpenPOWER on IntegriCloud