zone_rule->nat = nat;
 
-       spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+       spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
        if (!spec)
                return -ENOMEM;
 
 
        zone_rule->attr = attr;
 
-       kfree(spec);
+       kvfree(spec);
        ct_dbg("Offloaded ct entry rule in zone %d", entry->tuple.zone);
 
        return 0;
 err_mod_hdr:
        kfree(attr);
 err_attr:
-       kfree(spec);
+       kvfree(spec);
        return err;
 }
 
        struct mlx5_ct_ft *ft;
        u32 fte_id = 1;
 
-       post_ct_spec = kzalloc(sizeof(*post_ct_spec), GFP_KERNEL);
+       post_ct_spec = kvzalloc(sizeof(*post_ct_spec), GFP_KERNEL);
        ct_flow = kzalloc(sizeof(*ct_flow), GFP_KERNEL);
        if (!post_ct_spec || !ct_flow) {
-               kfree(post_ct_spec);
+               kvfree(post_ct_spec);
                kfree(ct_flow);
                return ERR_PTR(-ENOMEM);
        }
 
        attr->ct_attr.ct_flow = ct_flow;
        dealloc_mod_hdr_actions(&pre_mod_acts);
-       kfree(post_ct_spec);
+       kvfree(post_ct_spec);
 
        return rule;
 
 err_idr:
        mlx5_tc_ct_del_ft_cb(ct_priv, ft);
 err_ft:
-       kfree(post_ct_spec);
+       kvfree(post_ct_spec);
        kfree(ct_flow);
        netdev_warn(priv->netdev, "Failed to offload ct flow, err %d\n", err);
        return ERR_PTR(err);
 
        struct mlx5_flow_spec *spec;
        int err = 0;
 
-       spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+       spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
        if (!spec)
                return -ENOMEM;
 
        if (err)
                mlx5_modify_header_dealloc(mdev, modify_hdr);
 out_spec:
-       kfree(spec);
+       kvfree(spec);
        return err;
 }
 
 
        if (!mlx5_eswitch_reg_c1_loopback_supported(esw))
                return ERR_PTR(-EOPNOTSUPP);
 
-       spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+       spec = kvzalloc(sizeof(*spec), GFP_KERNEL);
        if (!spec)
                return ERR_PTR(-ENOMEM);
 
        dest.ft = esw->offloads.ft_offloads;
 
        flow_rule = mlx5_add_flow_rules(ft, spec, &flow_act, &dest, 1);
-       kfree(spec);
+       kvfree(spec);
 
        if (IS_ERR(flow_rule))
                esw_warn(esw->dev,