}
 
 static struct nft_chain *nft_chain_lookup_byid(const struct net *net,
+                                              const struct nft_table *table,
                                               const struct nlattr *nla)
 {
        struct nftables_pernet *nft_net = nft_pernet(net);
                struct nft_chain *chain = trans->ctx.chain;
 
                if (trans->msg_type == NFT_MSG_NEWCHAIN &&
+                   chain->table == table &&
                    id == nft_trans_chain_id(trans))
                        return chain;
        }
                        return -EOPNOTSUPP;
 
        } else if (nla[NFTA_RULE_CHAIN_ID]) {
-               chain = nft_chain_lookup_byid(net, nla[NFTA_RULE_CHAIN_ID]);
+               chain = nft_chain_lookup_byid(net, table, nla[NFTA_RULE_CHAIN_ID]);
                if (IS_ERR(chain)) {
                        NL_SET_BAD_ATTR(extack, nla[NFTA_RULE_CHAIN_ID]);
                        return PTR_ERR(chain);
                                                 tb[NFTA_VERDICT_CHAIN],
                                                 genmask);
                } else if (tb[NFTA_VERDICT_CHAIN_ID]) {
-                       chain = nft_chain_lookup_byid(ctx->net,
+                       chain = nft_chain_lookup_byid(ctx->net, ctx->table,
                                                      tb[NFTA_VERDICT_CHAIN_ID]);
                        if (IS_ERR(chain))
                                return PTR_ERR(chain);