Skip to content

Commit

Permalink
FreeBSD: do_mount() passes wrong string length to helper
Browse files Browse the repository at this point in the history
It should pass `MNT_LINE_MAX`, but passes `sizeof (mntpt)`. This is
harmless because the strlen is not actually used by the helper, but
FreeBSD's Coverity scans complained about it.

This was missed in my audit of various string functions since it is not
actually passed to a string function.

Upon review, it was noticed that the helper function does not need to be
a separate function, so I have inlined it as cleanup.

Reported-by: Coverity (CID 1432079)
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: szubersk <szuberskidamian@gmail.com>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes openzfs#14136
  • Loading branch information
ryao authored and behlendorf committed Nov 18, 2022
1 parent 31247c7 commit 0a0166c
Showing 1 changed file with 8 additions and 18 deletions.
26 changes: 8 additions & 18 deletions lib/libzfs/os/freebsd/libzfs_zmount.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,33 +73,30 @@ build_iovec(struct iovec **iov, int *iovlen, const char *name, void *val,
*iovlen = ++i;
}

static int
do_mount_(const char *spec, const char *dir, int mflag,
char *dataptr, int datalen, const char *optptr, int optlen)
int
do_mount(zfs_handle_t *zhp, const char *mntpt, const char *opts, int flags)
{
struct iovec *iov;
char *optstr, *p, *tofree;
int iovlen, rv;
const char *spec = zfs_get_name(zhp);

assert(spec != NULL);
assert(dir != NULL);
assert(dataptr == NULL), (void) dataptr;
assert(datalen == 0), (void) datalen;
assert(optptr != NULL);
assert(optlen > 0), (void) optlen;
assert(mntpt != NULL);
assert(opts != NULL);

tofree = optstr = strdup(optptr);
tofree = optstr = strdup(opts);
assert(optstr != NULL);

iov = NULL;
iovlen = 0;
if (strstr(optstr, MNTOPT_REMOUNT) != NULL)
build_iovec(&iov, &iovlen, "update", NULL, 0);
if (mflag & MS_RDONLY)
if (flags & MS_RDONLY)
build_iovec(&iov, &iovlen, "ro", NULL, 0);
build_iovec(&iov, &iovlen, "fstype", __DECONST(char *, MNTTYPE_ZFS),
(size_t)-1);
build_iovec(&iov, &iovlen, "fspath", __DECONST(char *, dir),
build_iovec(&iov, &iovlen, "fspath", __DECONST(char *, mntpt),
(size_t)-1);
build_iovec(&iov, &iovlen, "from", __DECONST(char *, spec), (size_t)-1);
while ((p = strsep(&optstr, ",/")) != NULL)
Expand All @@ -109,14 +106,7 @@ do_mount_(const char *spec, const char *dir, int mflag,
if (rv < 0)
return (errno);
return (rv);
}

int
do_mount(zfs_handle_t *zhp, const char *mntpt, const char *opts, int flags)
{

return (do_mount_(zfs_get_name(zhp), mntpt, flags, NULL, 0,
opts, sizeof (mntpt)));
}

int
Expand Down

0 comments on commit 0a0166c

Please sign in to comment.