|
@@ -83,17 +83,26 @@ static int nft_bitwise_init(const struct nft_ctx *ctx,
|
|
tb[NFTA_BITWISE_MASK]);
|
|
tb[NFTA_BITWISE_MASK]);
|
|
if (err < 0)
|
|
if (err < 0)
|
|
return err;
|
|
return err;
|
|
- if (d1.len != priv->len)
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ if (d1.len != priv->len) {
|
|
|
|
+ err = -EINVAL;
|
|
|
|
+ goto err1;
|
|
|
|
+ }
|
|
|
|
|
|
err = nft_data_init(NULL, &priv->xor, sizeof(priv->xor), &d2,
|
|
err = nft_data_init(NULL, &priv->xor, sizeof(priv->xor), &d2,
|
|
tb[NFTA_BITWISE_XOR]);
|
|
tb[NFTA_BITWISE_XOR]);
|
|
if (err < 0)
|
|
if (err < 0)
|
|
- return err;
|
|
|
|
- if (d2.len != priv->len)
|
|
|
|
- return -EINVAL;
|
|
|
|
|
|
+ goto err1;
|
|
|
|
+ if (d2.len != priv->len) {
|
|
|
|
+ err = -EINVAL;
|
|
|
|
+ goto err2;
|
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
|
+err2:
|
|
|
|
+ nft_data_uninit(&priv->xor, d2.type);
|
|
|
|
+err1:
|
|
|
|
+ nft_data_uninit(&priv->mask, d1.type);
|
|
|
|
+ return err;
|
|
}
|
|
}
|
|
|
|
|
|
static int nft_bitwise_dump(struct sk_buff *skb, const struct nft_expr *expr)
|
|
static int nft_bitwise_dump(struct sk_buff *skb, const struct nft_expr *expr)
|