Date: Tue, 8 Nov 2011 10:22:09 -0500 From: Andrew Duane <aduane@juniper.net> To: Ed Schouten <ed@80386.nl>, Lucas Holt <luke@foolishgames.com> Cc: "rank1seeker@gmail.com" <rank1seeker@gmail.com>, "hackers@freebsd.org" <hackers@freebsd.org> Subject: RE: BUG: 'glabel label' name's lenght, is truncated without err/warn Message-ID: <AC6674AB7BC78549BB231821ABF7A9AEB80F4764EA@EMBX01-WF.jnpr.net> In-Reply-To: <20111108113349.GG2258@hoeg.nl> References: <20111105.110247.867.1@DOMY-PC> <1859A0FF-C3BF-4EC3-9CC6-FA97B9AF5C99@foolishgames.com> <20111108113349.GG2258@hoeg.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
Checking the return code of strlcpy won't say if the entire string fit (exactly) correctly, or if it was truncated. I think explicitly checking the length of label first is cleaner and more correct.
I would, however, replace "15" with "sizeof(md.md_label) - 1" both in the check and the printf.
...................................
Andrew Duane
Juniper Networks
o +1 978 589 0551
m +1 603-770-7088
aduane@juniper.net
> -----Original Message-----
> From: owner-freebsd-hackers@freebsd.org [mailto:owner-freebsd-
> hackers@freebsd.org] On Behalf Of Ed Schouten
> Sent: Tuesday, November 08, 2011 6:34 AM
> To: Lucas Holt
> Cc: rank1seeker@gmail.com; hackers@freebsd.org
> Subject: Re: BUG: 'glabel label' name's lenght, is truncated without
> err/warn
>
> * Lucas Holt <luke@foolishgames.com>, 20111105 15:24:
> > --- src/sbin/geom/class/label/geom_label.c 2008/11/21 21:05:31
> 1.3
> > +++ src/sbin/geom/class/label/geom_label.c 2011/11/05 14:15:23
> 1.4
> > @@ -118,6 +118,12 @@ label_label(struct gctl_req *req)
> > return;
> > }
> >
> > + label = gctl_get_ascii(req, "arg0");
> > + if (strlen(label) > 15) {
> > + gctl_error(req, "Label cannot exceed 15 characters");
> > + return;
> > + }
> > +
> > /*
> > * Clear last sector first to spoil all components if device
> exists.
> > */
> > @@ -131,7 +137,6 @@ label_label(struct gctl_req *req)
> >
> > strlcpy(md.md_magic, G_LABEL_MAGIC, sizeof(md.md_magic));
> > md.md_version = G_LABEL_VERSION;
> > - label = gctl_get_ascii(req, "arg0");
> > strlcpy(md.md_label, label, sizeof(md.md_label));
> > md.md_provsize = g_get_mediasize(name);
> > if (md.md_provsize == 0) {
>
> Why not simply perform the strlcpy and check whether
>
> if (strlcpy(...) >= sizeof(md.md_label)
>
> ?
>
> --
> Ed Schouten <ed@80386.nl>
> WWW: http://80386.nl/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AC6674AB7BC78549BB231821ABF7A9AEB80F4764EA>
