]> git.proxmox.com Git - mirror_zfs.git/commitdiff
FreeBSD: do_mount() passes wrong string length to helper
authorRichard Yao <richard.yao@alumni.stonybrook.edu>
Thu, 3 Nov 2022 17:53:17 +0000 (13:53 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 18 Nov 2022 19:34:25 +0000 (11:34 -0800)
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 #14136

lib/libzfs/os/freebsd/libzfs_zmount.c

index 6a26cae1e090ac149a2b03e6835ad5dfc71eed2b..34976f7bbf46b3eb5ad56583e078f460558fc78c 100644 (file)
@@ -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)
@@ -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