Pino Toscano
2014-Nov-12 09:02 UTC
[Libguestfs] [PATCH] daemon: check xfs label lengths (RHBZ#1162966).
Similar to commit 52f9cd4882135910ea06e1e50ac6441d455c9ab1, but for xfs filesystems. --- daemon/daemon.h | 4 ++++ daemon/labels.c | 6 ++++++ daemon/xfs.c | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/daemon/daemon.h b/daemon/daemon.h index 0ccbc9e..f442efd 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -253,6 +253,10 @@ extern void main_loop (int sock) __attribute__((noreturn)); /*-- in xattr.c --*/ extern int copy_xattrs (const char *src, const char *dest); +/*-- in xfs.c --*/ +/* Documented in xfs_admin(8). */ +#define XFS_LABEL_MAX 12 + /* ordinary daemon functions use these to indicate errors * NB: you don't need to prefix the string with the current command, * it is added automatically by the client-side RPC stubs. diff --git a/daemon/labels.c b/daemon/labels.c index f417c57..cfcb4df 100644 --- a/daemon/labels.c +++ b/daemon/labels.c @@ -118,6 +118,12 @@ xfslabel (const char *device, const char *label) return -1; } + if (strlen (label) > XFS_LABEL_MAX) { + reply_with_error ("%s: xfs labels are limited to %d bytes", + label, XFS_LABEL_MAX); + return -1; + } + r = command (NULL, &err, str_xfs_admin, "-L", label, device, NULL); if (r == -1) { reply_with_error ("%s", err); diff --git a/daemon/xfs.c b/daemon/xfs.c index 725f7b3..687013b 100644 --- a/daemon/xfs.c +++ b/daemon/xfs.c @@ -498,6 +498,12 @@ do_xfs_admin (const char *device, } if (optargs_bitmask & GUESTFS_XFS_ADMIN_LABEL_BITMASK) { + if (strlen (label) > XFS_LABEL_MAX) { + reply_with_error ("%s: xfs labels are limited to %d bytes", + label, XFS_LABEL_MAX); + return -1; + } + ADD_ARG (argv, i, "-L"); ADD_ARG (argv, i, label); } -- 1.9.3
Richard W.M. Jones
2014-Nov-13 13:29 UTC
Re: [Libguestfs] [PATCH] daemon: check xfs label lengths (RHBZ#1162966).
On Wed, Nov 12, 2014 at 10:02:33AM +0100, Pino Toscano wrote:> Similar to commit 52f9cd4882135910ea06e1e50ac6441d455c9ab1, but for xfs > filesystems. > --- > daemon/daemon.h | 4 ++++ > daemon/labels.c | 6 ++++++ > daemon/xfs.c | 6 ++++++ > 3 files changed, 16 insertions(+) > > diff --git a/daemon/daemon.h b/daemon/daemon.h > index 0ccbc9e..f442efd 100644 > --- a/daemon/daemon.h > +++ b/daemon/daemon.h > @@ -253,6 +253,10 @@ extern void main_loop (int sock) __attribute__((noreturn)); > /*-- in xattr.c --*/ > extern int copy_xattrs (const char *src, const char *dest); > > +/*-- in xfs.c --*/ > +/* Documented in xfs_admin(8). */ > +#define XFS_LABEL_MAX 12 > + > /* ordinary daemon functions use these to indicate errors > * NB: you don't need to prefix the string with the current command, > * it is added automatically by the client-side RPC stubs. > diff --git a/daemon/labels.c b/daemon/labels.c > index f417c57..cfcb4df 100644 > --- a/daemon/labels.c > +++ b/daemon/labels.c > @@ -118,6 +118,12 @@ xfslabel (const char *device, const char *label) > return -1; > } > > + if (strlen (label) > XFS_LABEL_MAX) { > + reply_with_error ("%s: xfs labels are limited to %d bytes", > + label, XFS_LABEL_MAX); > + return -1; > + } > + > r = command (NULL, &err, str_xfs_admin, "-L", label, device, NULL); > if (r == -1) { > reply_with_error ("%s", err); > diff --git a/daemon/xfs.c b/daemon/xfs.c > index 725f7b3..687013b 100644 > --- a/daemon/xfs.c > +++ b/daemon/xfs.c > @@ -498,6 +498,12 @@ do_xfs_admin (const char *device, > } > > if (optargs_bitmask & GUESTFS_XFS_ADMIN_LABEL_BITMASK) { > + if (strlen (label) > XFS_LABEL_MAX) { > + reply_with_error ("%s: xfs labels are limited to %d bytes", > + label, XFS_LABEL_MAX); > + return -1; > + } > + > ADD_ARG (argv, i, "-L"); > ADD_ARG (argv, i, label); > } > -- > 1.9.3Looks OK to me, ACK. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html