summaryrefslogtreecommitdiffstats
path: root/sys/geom
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2015-08-02 10:08:57 +0000
committertrasz <trasz@FreeBSD.org>2015-08-02 10:08:57 +0000
commit75c063e8b8ed27522de533ba24a98e50a29617e6 (patch)
treefdfa2cf5f8ca6dda97dd9a21a4b61ec291b9e26e /sys/geom
parent529945ff14626dc8dc217b57e92818e9ab7e55f3 (diff)
downloadFreeBSD-src-75c063e8b8ed27522de533ba24a98e50a29617e6.zip
FreeBSD-src-75c063e8b8ed27522de533ba24a98e50a29617e6.tar.gz
MFC r284582:
Fix off-by-one error in fstyp(8) and geom_label(4) that made them use a single space (" ") as a CD9660 label name when no label was present. Similar problem was also present in msdosfs label recognition. Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'sys/geom')
-rw-r--r--sys/geom/label/g_label.c15
-rw-r--r--sys/geom/label/g_label.h2
-rw-r--r--sys/geom/label/g_label_iso9660.c10
-rw-r--r--sys/geom/label/g_label_msdosfs.c10
4 files changed, 19 insertions, 18 deletions
diff --git a/sys/geom/label/g_label.c b/sys/geom/label/g_label.c
index fc16f7f..553643a 100644
--- a/sys/geom/label/g_label.c
+++ b/sys/geom/label/g_label.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <sys/malloc.h>
#include <sys/libkern.h>
#include <sys/sbuf.h>
+#include <sys/stddef.h>
#include <sys/sysctl.h>
#include <geom/geom.h>
#include <geom/geom_slice.h>
@@ -93,6 +94,20 @@ const struct g_label_desc *g_labels[] = {
NULL
};
+void
+g_label_rtrim(char *label, size_t size)
+{
+ ptrdiff_t i;
+
+ for (i = size - 1; i >= 0; i--) {
+ if (label[i] == '\0')
+ continue;
+ else if (label[i] == ' ')
+ label[i] = '\0';
+ else
+ break;
+ }
+}
static int
g_label_destroy_geom(struct gctl_req *req __unused, struct g_class *mp,
diff --git a/sys/geom/label/g_label.h b/sys/geom/label/g_label.h
index eca3126..ff7b035 100644
--- a/sys/geom/label/g_label.h
+++ b/sys/geom/label/g_label.h
@@ -88,6 +88,8 @@ extern struct g_label_desc g_label_ntfs;
extern struct g_label_desc g_label_gpt;
extern struct g_label_desc g_label_gpt_uuid;
extern struct g_label_desc g_label_disk_ident;
+
+extern void g_label_rtrim(char *label, size_t size);
#endif /* _KERNEL */
struct g_label_metadata {
diff --git a/sys/geom/label/g_label_iso9660.c b/sys/geom/label/g_label_iso9660.c
index 154cefc..c3c49b0 100644
--- a/sys/geom/label/g_label_iso9660.c
+++ b/sys/geom/label/g_label_iso9660.c
@@ -47,7 +47,6 @@ g_label_iso9660_taste(struct g_consumer *cp, char *label, size_t size)
{
struct g_provider *pp;
char *sector, *volume;
- int i;
g_topology_assert_not();
pp = cp->provider;
@@ -68,14 +67,7 @@ g_label_iso9660_taste(struct g_consumer *cp, char *label, size_t size)
bzero(label, size);
strlcpy(label, volume, MIN(size, VOLUME_LEN));
g_free(sector);
- for (i = size - 1; i > 0; i--) {
- if (label[i] == '\0')
- continue;
- else if (label[i] == ' ')
- label[i] = '\0';
- else
- break;
- }
+ g_label_rtrim(label, size);
}
struct g_label_desc g_label_iso9660 = {
diff --git a/sys/geom/label/g_label_msdosfs.c b/sys/geom/label/g_label_msdosfs.c
index 5f65a72..918fabc 100644
--- a/sys/geom/label/g_label_msdosfs.c
+++ b/sys/geom/label/g_label_msdosfs.c
@@ -48,7 +48,6 @@ g_label_msdosfs_taste(struct g_consumer *cp, char *label, size_t size)
FAT32_BSBPB *pfat32_bsbpb;
FAT_DES *pfat_entry;
uint8_t *sector0, *sector;
- uint32_t i;
g_topology_assert_not();
pp = cp->provider;
@@ -200,14 +199,7 @@ g_label_msdosfs_taste(struct g_consumer *cp, char *label, size_t size)
}
endofchecks:
- for (i = size - 1; i > 0; i--) {
- if (label[i] == '\0')
- continue;
- else if (label[i] == ' ')
- label[i] = '\0';
- else
- break;
- }
+ g_label_rtrim(label, size);
error:
if (sector0 != NULL)
OpenPOWER on IntegriCloud