err = devlink_fmsg_obj_nest_start(fmsg);
        if (err)
-               return err;
+               goto out;
 
        err = reporter->ops->diagnose(reporter, fmsg, info->extack);
        if (err)
-               return err;
+               goto out;
 
        err = devlink_fmsg_obj_nest_end(fmsg);
        if (err)
-               return err;
+               goto out;
+
+       err = devlink_fmsg_snd(fmsg, info,
+                              DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE, 0);
 
-       return devlink_fmsg_snd(fmsg, info,
-                               DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE, 0);
+out:
+       devlink_fmsg_free(fmsg);
+       return err;
 }
 
 static int