netfilter: nf_tables: bail out if stateful expression provides no .clone
authorPablo Neira Ayuso <pablo@netfilter.org>
Sun, 7 Jan 2024 22:00:15 +0000 (23:00 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 17 Jan 2024 11:02:46 +0000 (12:02 +0100)
All existing NFT_EXPR_STATEFUL provide a .clone interface, remove
fallback to copy content of stateful expression since this is never
exercised and bail out if .clone interface is not defined.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_tables_api.c

index 2548d7d..b3db974 100644 (file)
@@ -3274,14 +3274,13 @@ int nft_expr_clone(struct nft_expr *dst, struct nft_expr *src)
 {
        int err;
 
-       if (src->ops->clone) {
-               dst->ops = src->ops;
-               err = src->ops->clone(dst, src);
-               if (err < 0)
-                       return err;
-       } else {
-               memcpy(dst, src, src->ops->size);
-       }
+       if (WARN_ON_ONCE(!src->ops->clone))
+               return -EINVAL;
+
+       dst->ops = src->ops;
+       err = src->ops->clone(dst, src);
+       if (err < 0)
+               return err;
 
        __module_get(src->ops->type->owner);