mirror of https://gitee.com/openkylin/linux.git
netfilter: nf_tables: use-after-free in dynamic operations
Smatch reports:
net/netfilter/nf_tables_api.c:2167 nf_tables_expr_destroy()
error: dereferencing freed memory 'expr->ops'
net/netfilter/nf_tables_api.c
2162 static void nf_tables_expr_destroy(const struct nft_ctx *ctx,
2163 struct nft_expr *expr)
2164 {
2165 if (expr->ops->destroy)
2166 expr->ops->destroy(ctx, expr);
^^^^
--> 2167 module_put(expr->ops->type->owner);
^^^^^^^^^
2168 }
Smatch says there are three functions which free expr->ops.
Fixes: b8e2040063
("netfilter: nft_compat: use .release_ops and remove list of extension")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
273fe3f100
commit
3f3a390dbd
|
@ -2162,9 +2162,11 @@ static int nf_tables_newexpr(const struct nft_ctx *ctx,
|
|||
static void nf_tables_expr_destroy(const struct nft_ctx *ctx,
|
||||
struct nft_expr *expr)
|
||||
{
|
||||
const struct nft_expr_type *type = expr->ops->type;
|
||||
|
||||
if (expr->ops->destroy)
|
||||
expr->ops->destroy(ctx, expr);
|
||||
module_put(expr->ops->type->owner);
|
||||
module_put(type->owner);
|
||||
}
|
||||
|
||||
struct nft_expr *nft_expr_init(const struct nft_ctx *ctx,
|
||||
|
|
Loading…
Reference in New Issue