Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
[cascardo/linux.git] / net / netfilter / nft_immediate.c
index 810385e..db3b746 100644 (file)
@@ -24,12 +24,12 @@ struct nft_immediate_expr {
 };
 
 static void nft_immediate_eval(const struct nft_expr *expr,
-                              struct nft_data data[NFT_REG_MAX + 1],
+                              struct nft_regs *regs,
                               const struct nft_pktinfo *pkt)
 {
        const struct nft_immediate_expr *priv = nft_expr_priv(expr);
 
-       nft_data_copy(&data[priv->dreg], &priv->data);
+       nft_data_copy(&regs->data[priv->dreg], &priv->data, priv->dlen);
 }
 
 static const struct nla_policy nft_immediate_policy[NFTA_IMMEDIATE_MAX + 1] = {
@@ -49,17 +49,15 @@ static int nft_immediate_init(const struct nft_ctx *ctx,
            tb[NFTA_IMMEDIATE_DATA] == NULL)
                return -EINVAL;
 
-       priv->dreg = ntohl(nla_get_be32(tb[NFTA_IMMEDIATE_DREG]));
-       err = nft_validate_output_register(priv->dreg);
-       if (err < 0)
-               return err;
-
-       err = nft_data_init(ctx, &priv->data, &desc, tb[NFTA_IMMEDIATE_DATA]);
+       err = nft_data_init(ctx, &priv->data, sizeof(priv->data), &desc,
+                           tb[NFTA_IMMEDIATE_DATA]);
        if (err < 0)
                return err;
        priv->dlen = desc.len;
 
-       err = nft_validate_data_load(ctx, priv->dreg, &priv->data, desc.type);
+       priv->dreg = nft_parse_register(tb[NFTA_IMMEDIATE_DREG]);
+       err = nft_validate_register_store(ctx, priv->dreg, &priv->data,
+                                         desc.type, desc.len);
        if (err < 0)
                goto err1;
 
@@ -81,7 +79,7 @@ static int nft_immediate_dump(struct sk_buff *skb, const struct nft_expr *expr)
 {
        const struct nft_immediate_expr *priv = nft_expr_priv(expr);
 
-       if (nla_put_be32(skb, NFTA_IMMEDIATE_DREG, htonl(priv->dreg)))
+       if (nft_dump_register(skb, NFTA_IMMEDIATE_DREG, priv->dreg))
                goto nla_put_failure;
 
        return nft_data_dump(skb, NFTA_IMMEDIATE_DATA, &priv->data,