#include <net/netfilter/nf_conntrack_zones.h>
 
 struct nft_connlimit {
-       struct nf_conncount_list        list;
+       struct nf_conncount_list        *list;
        u32                             limit;
        bool                            invert;
 };
                return;
        }
 
-       if (nf_conncount_add(nft_net(pkt), &priv->list, tuple_ptr, zone)) {
+       if (nf_conncount_add(nft_net(pkt), priv->list, tuple_ptr, zone)) {
                regs->verdict.code = NF_DROP;
                return;
        }
 
-       count = priv->list.count;
+       count = priv->list->count;
 
        if ((count > priv->limit) ^ priv->invert) {
                regs->verdict.code = NFT_BREAK;
                        invert = true;
        }
 
-       nf_conncount_list_init(&priv->list);
+       priv->list = kmalloc(sizeof(*priv->list), GFP_KERNEL);
+       if (!priv->list)
+               return -ENOMEM;
+
+       nf_conncount_list_init(priv->list);
        priv->limit     = limit;
        priv->invert    = invert;
 
                                     struct nft_connlimit *priv)
 {
        nf_ct_netns_put(ctx->net, ctx->family);
-       nf_conncount_cache_free(&priv->list);
+       nf_conncount_cache_free(priv->list);
+       kfree(priv->list);
 }
 
 static int nft_connlimit_do_dump(struct sk_buff *skb,
        struct nft_connlimit *priv_dst = nft_expr_priv(dst);
        struct nft_connlimit *priv_src = nft_expr_priv(src);
 
-       nf_conncount_list_init(&priv_dst->list);
+       priv_dst->list = kmalloc(sizeof(*priv_dst->list), GFP_ATOMIC);
+       if (priv_dst->list)
+               return -ENOMEM;
+
+       nf_conncount_list_init(priv_dst->list);
        priv_dst->limit  = priv_src->limit;
        priv_dst->invert = priv_src->invert;
 
 {
        struct nft_connlimit *priv = nft_expr_priv(expr);
 
-       nf_conncount_cache_free(&priv->list);
+       nf_conncount_cache_free(priv->list);
+       kfree(priv->list);
 }
 
 static bool nft_connlimit_gc(struct net *net, const struct nft_expr *expr)
        bool ret;
 
        local_bh_disable();
-       ret = nf_conncount_gc_list(net, &priv->list);
+       ret = nf_conncount_gc_list(net, priv->list);
        local_bh_enable();
 
        return ret;