]> git.proxmox.com Git - mirror_zfs.git/commitdiff
FreeBSD: zfs_register_callbacks() must implement error check correctly
authorRichard Yao <richard.yao@alumni.stonybrook.edu>
Mon, 5 Dec 2022 18:16:50 +0000 (13:16 -0500)
committerTony Hutter <hutter2@llnl.gov>
Thu, 19 Jan 2023 20:50:36 +0000 (12:50 -0800)
I read the following article and noticed a couple of ZFS bugs mentioned:

https://pvs-studio.com/en/blog/posts/cpp/0377/

I decided to search for them in the modern OpenZFS codebase and then
found one that matched the description of the first one:

V593 Consider reviewing the expression of the 'A = B != C' kind. The
expression is calculated as following: 'A = (B != C)'. zfs_vfsops.c 498

The consequence of this is that the error value is replaced with `1`
when there is an error. When there is no error, 0 is correctly passed.
This is a very minor issue that is unlikely to cause any real problems.

The incorrect error code would either be returned to the mount command
on a failure or any of `zfs receive`, `zfs recv`, `zfs rollback` or `zfs
upgrade`.

The second one has already been fixed.

Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Damian Szuberski <szuberskidamian@gmail.com>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #14261

module/os/freebsd/zfs/zfs_vfsops.c

index 05d41d4e3b2aa146559c6b455e12e2a95de62330..248b2d924f8c6b0696ec6e1b54d4895f38227e5e 100644 (file)
@@ -720,7 +720,7 @@ zfs_register_callbacks(vfs_t *vfsp)
                nbmand = B_FALSE;
        } else if (vfs_optionisset(vfsp, MNTOPT_NBMAND, NULL)) {
                nbmand = B_TRUE;
-       } else if ((error = dsl_prop_get_int_ds(ds, "nbmand", &nbmand) != 0)) {
+       } else if ((error = dsl_prop_get_int_ds(ds, "nbmand", &nbmand)) != 0) {
                dsl_pool_config_exit(dmu_objset_pool(os), FTAG);
                return (error);
        }