netfilter: nf_tables: add nft_expr_type_request_module()
This helper function makes sure the family specific extension is loaded. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
Родитель
2a3a93ef0b
Коммит
b9c04ae790
|
@ -2019,6 +2019,19 @@ static const struct nft_expr_type *__nft_expr_type_get(u8 family,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
static int nft_expr_type_request_module(struct net *net, u8 family,
|
||||
struct nlattr *nla)
|
||||
{
|
||||
nft_request_module(net, "nft-expr-%u-%.*s", family,
|
||||
nla_len(nla), (char *)nla_data(nla));
|
||||
if (__nft_expr_type_get(family, nla))
|
||||
return -EAGAIN;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct nft_expr_type *nft_expr_type_get(struct net *net,
|
||||
u8 family,
|
||||
struct nlattr *nla)
|
||||
|
@ -2035,9 +2048,7 @@ static const struct nft_expr_type *nft_expr_type_get(struct net *net,
|
|||
lockdep_nfnl_nft_mutex_not_held();
|
||||
#ifdef CONFIG_MODULES
|
||||
if (type == NULL) {
|
||||
nft_request_module(net, "nft-expr-%u-%.*s", family,
|
||||
nla_len(nla), (char *)nla_data(nla));
|
||||
if (__nft_expr_type_get(family, nla))
|
||||
if (nft_expr_type_request_module(net, family, nla) == -EAGAIN)
|
||||
return ERR_PTR(-EAGAIN);
|
||||
|
||||
nft_request_module(net, "nft-expr-%.*s",
|
||||
|
|
Загрузка…
Ссылка в новой задаче