From owner-svn-src-head@FreeBSD.ORG Thu Jun 18 21:55:58 2015 Return-Path: Delivered-To: svn-src-head@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id F04E17D8; Thu, 18 Jun 2015 21:55:57 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DD8B1F14; Thu, 18 Jun 2015 21:55:57 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t5ILtvbd068884; Thu, 18 Jun 2015 21:55:57 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t5ILttwm068873; Thu, 18 Jun 2015 21:55:55 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <201506182155.t5ILttwm068873@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Thu, 18 Jun 2015 21:55:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r284582 - in head: sys/geom/label usr.sbin/fstyp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jun 2015 21:55:58 -0000 Author: trasz Date: Thu Jun 18 21:55:55 2015 New Revision: 284582 URL: https://svnweb.freebsd.org/changeset/base/284582 Log: 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. PR: 200828 Differential Revision: https://reviews.freebsd.org/D2830 Reviewed by: asomers@, emaste@ MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Modified: head/sys/geom/label/g_label.c head/sys/geom/label/g_label.h head/sys/geom/label/g_label_iso9660.c head/sys/geom/label/g_label_msdosfs.c head/usr.sbin/fstyp/cd9660.c head/usr.sbin/fstyp/fstyp.c head/usr.sbin/fstyp/fstyp.h head/usr.sbin/fstyp/msdosfs.c Modified: head/sys/geom/label/g_label.c ============================================================================== --- head/sys/geom/label/g_label.c Thu Jun 18 21:25:07 2015 (r284581) +++ head/sys/geom/label/g_label.c Thu Jun 18 21:55:55 2015 (r284582) @@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -96,6 +97,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, Modified: head/sys/geom/label/g_label.h ============================================================================== --- head/sys/geom/label/g_label.h Thu Jun 18 21:25:07 2015 (r284581) +++ head/sys/geom/label/g_label.h Thu Jun 18 21:55:55 2015 (r284582) @@ -86,6 +86,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 { Modified: head/sys/geom/label/g_label_iso9660.c ============================================================================== --- head/sys/geom/label/g_label_iso9660.c Thu Jun 18 21:25:07 2015 (r284581) +++ head/sys/geom/label/g_label_iso9660.c Thu Jun 18 21:55:55 2015 (r284582) @@ -47,7 +47,6 @@ g_label_iso9660_taste(struct g_consumer { 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 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 = { Modified: head/sys/geom/label/g_label_msdosfs.c ============================================================================== --- head/sys/geom/label/g_label_msdosfs.c Thu Jun 18 21:25:07 2015 (r284581) +++ head/sys/geom/label/g_label_msdosfs.c Thu Jun 18 21:55:55 2015 (r284582) @@ -48,7 +48,6 @@ g_label_msdosfs_taste(struct g_consumer 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 } 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) Modified: head/usr.sbin/fstyp/cd9660.c ============================================================================== --- head/usr.sbin/fstyp/cd9660.c Thu Jun 18 21:25:07 2015 (r284581) +++ head/usr.sbin/fstyp/cd9660.c Thu Jun 18 21:55:55 2015 (r284582) @@ -45,7 +45,6 @@ int fstyp_cd9660(FILE *fp, char *label, size_t size) { char *sector, *volume; - int i; sector = read_buf(fp, ISO9660_OFFSET, 512); if (sector == NULL) @@ -58,13 +57,6 @@ fstyp_cd9660(FILE *fp, char *label, size bzero(label, size); strlcpy(label, volume, MIN(size, VOLUME_LEN)); free(sector); - for (i = size - 1; i > 0; i--) { - if (label[i] == '\0') - continue; - else if (label[i] == ' ') - label[i] = '\0'; - else - break; - } + rtrim(label, size); return (0); } Modified: head/usr.sbin/fstyp/fstyp.c ============================================================================== --- head/usr.sbin/fstyp/fstyp.c Thu Jun 18 21:25:07 2015 (r284581) +++ head/usr.sbin/fstyp/fstyp.c Thu Jun 18 21:55:55 2015 (r284582) @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -104,6 +105,21 @@ checked_strdup(const char *s) return (c); } +void +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 void usage(void) { Modified: head/usr.sbin/fstyp/fstyp.h ============================================================================== --- head/usr.sbin/fstyp/fstyp.h Thu Jun 18 21:25:07 2015 (r284581) +++ head/usr.sbin/fstyp/fstyp.h Thu Jun 18 21:55:55 2015 (r284582) @@ -36,6 +36,7 @@ void *read_buf(FILE *fp, off_t off, size_t len); char *checked_strdup(const char *s); +void rtrim(char *label, size_t size); int fstyp_cd9660(FILE *fp, char *label, size_t size); int fstyp_ext2fs(FILE *fp, char *label, size_t size); Modified: head/usr.sbin/fstyp/msdosfs.c ============================================================================== --- head/usr.sbin/fstyp/msdosfs.c Thu Jun 18 21:25:07 2015 (r284581) +++ head/usr.sbin/fstyp/msdosfs.c Thu Jun 18 21:55:55 2015 (r284582) @@ -48,7 +48,6 @@ fstyp_msdosfs(FILE *fp, char *label, siz FAT32_BSBPB *pfat32_bsbpb; FAT_DES *pfat_entry; uint8_t *sector0, *sector; - uint32_t i; sector0 = NULL; sector = NULL; @@ -161,14 +160,7 @@ fstyp_msdosfs(FILE *fp, char *label, siz } endofchecks: - for (i = size - 1; i > 0; i--) { - if (label[i] == '\0') - continue; - else if (label[i] == ' ') - label[i] = '\0'; - else - break; - } + rtrim(label, size); free(sector0); free(sector);