Quan Tian <tianquan23@xxxxxxxxx> wrote: > u32 nlpid; > char *name; > - u16 udlen; > - u8 *udata; > + struct nlattr *udata; I missed this detail. As Pablo pointed out this pointer now needs a __rcu annotation. And this needs something like: struct nlattr *udata = rcu_dereference(table->udata); if (udata) { if (nla_put(skb, NFTA_TABLE_USERDATA, nla_len(udata), nla_data(udata))) > + if (nla_put(skb, NFTA_TABLE_USERDATA, nla_len(table->udata), > + nla_data(table->udata))) ... because this version can observe different table->udata for nla_len() and nla_data() calls if the swap() has the "right" / "wrong" timing.