]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Fix multiple evaluations of VERIFY() and ASSERT() on failures
authorDeHackEd <DeHackEd@users.noreply.github.com>
Wed, 21 Feb 2018 22:54:26 +0000 (17:54 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 21 Feb 2018 22:54:26 +0000 (14:54 -0800)
Reviewed-by: loli10K <ezomori.nozomu@gmail.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: DHE <git@dehacked.net>
Closes #684
Closes #685

include/sys/debug.h

index cd78171df025ba8dee92251f71fee0bf9c05e9a8..a4a4580666a6e7102a83ce19a261012311525b03 100644 (file)
@@ -63,12 +63,15 @@ void spl_dumpstack(void);
            spl_panic(__FILE__, __FUNCTION__, __LINE__,                 \
            "%s", "VERIFY(" #cond ") failed\n"))
 
-#define        VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE, FMT, CAST)                  \
-       (void) ((!((TYPE)(LEFT) OP (TYPE)(RIGHT))) &&                   \
-           spl_panic(__FILE__, __FUNCTION__, __LINE__,                 \
-           "VERIFY3(" #LEFT " " #OP " " #RIGHT ") "                    \
-           "failed (" FMT " " #OP " " FMT ")\n",                       \
-           CAST (LEFT), CAST (RIGHT)))
+#define        VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE, FMT, CAST)  do {            \
+               TYPE _verify3_left = (TYPE)(LEFT);                              \
+               TYPE _verify3_right = (TYPE)(RIGHT);                            \
+               if (!(_verify3_left OP _verify3_right))                 \
+                   spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
+                   "VERIFY3(" #LEFT " " #OP " " #RIGHT ") "            \
+                   "failed (" FMT " " #OP " " FMT ")\n",               \
+                   CAST (_verify3_left), CAST (_verify3_right));       \
+       } while (0)
 
 #define        VERIFY3B(x,y,z) VERIFY3_IMPL(x, y, z, boolean_t, "%d", (boolean_t))
 #define        VERIFY3S(x,y,z) VERIFY3_IMPL(x, y, z, int64_t, "%lld", (long long))