nft_do_chain(struct nft_pktinfo *pkt, const struct nf_hook_ops *ops)
 {
        const struct nft_chain *chain = ops->priv, *basechain = chain;
-       const struct net *net = read_pnet(&nft_base_chain(basechain)->pnet);
+       const struct net *chain_net = read_pnet(&nft_base_chain(basechain)->pnet);
+       const struct net *net = dev_net(pkt->in ? pkt->in : pkt->out);
        const struct nft_rule *rule;
        const struct nft_expr *expr, *last;
        struct nft_regs regs;
        int rulenum;
        unsigned int gencursor = nft_genmask_cur(net);
 
+       /* Ignore chains that are not for the current network namespace */
+       if (!net_eq(net, chain_net))
+               return NF_ACCEPT;
+
 do_chain:
        rulenum = 0;
        rule = list_entry(&chain->rules, struct nft_rule, list);