Currently, if cmd in the split ops array is of lower value than the
previous one, genl_validate_ops() continues to do the checks as if
the values are equal. This may result in non-obvious WARN_ON() hit in
these check.
Instead, check the incorrect ordering explicitly and put a WARN_ON()
in case it is broken.
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://lore.kernel.org/r/20230720111354.562242-1-jiri@resnulli.us
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
 
                        return -EINVAL;
 
                /* Check sort order */
-               if (a->cmd < b->cmd)
+               if (a->cmd < b->cmd) {
                        continue;
+               } else if (a->cmd > b->cmd) {
+                       WARN_ON(1);
+                       return -EINVAL;
+               }
 
                if (a->internal_flags != b->internal_flags ||
                    ((a->flags ^ b->flags) & ~(GENL_CMD_CAP_DO |