[NETFILTER]: check nf_log function call arguments
Check whether pf is too large in order to prevent array overflow. Signed-off-by: Harald Welte <laforge@netfilter.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
d72367b6f3
Коммит
8a61fadb39
|
@ -157,7 +157,7 @@ struct nf_logger {
|
||||||
|
|
||||||
/* Function to register/unregister log function. */
|
/* Function to register/unregister log function. */
|
||||||
int nf_log_register(int pf, struct nf_logger *logger);
|
int nf_log_register(int pf, struct nf_logger *logger);
|
||||||
void nf_log_unregister_pf(int pf);
|
int nf_log_unregister_pf(int pf);
|
||||||
void nf_log_unregister_logger(struct nf_logger *logger);
|
void nf_log_unregister_logger(struct nf_logger *logger);
|
||||||
|
|
||||||
/* Calls the registered backend logging function */
|
/* Calls the registered backend logging function */
|
||||||
|
|
|
@ -24,6 +24,9 @@ int nf_log_register(int pf, struct nf_logger *logger)
|
||||||
{
|
{
|
||||||
int ret = -EBUSY;
|
int ret = -EBUSY;
|
||||||
|
|
||||||
|
if (pf >= NPROTO)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
/* Any setup of logging members must be done before
|
/* Any setup of logging members must be done before
|
||||||
* substituting pointer. */
|
* substituting pointer. */
|
||||||
spin_lock(&nf_log_lock);
|
spin_lock(&nf_log_lock);
|
||||||
|
@ -38,14 +41,19 @@ int nf_log_register(int pf, struct nf_logger *logger)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(nf_log_register);
|
EXPORT_SYMBOL(nf_log_register);
|
||||||
|
|
||||||
void nf_log_unregister_pf(int pf)
|
int nf_log_unregister_pf(int pf)
|
||||||
{
|
{
|
||||||
|
if (pf >= NPROTO)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
spin_lock(&nf_log_lock);
|
spin_lock(&nf_log_lock);
|
||||||
nf_logging[pf] = NULL;
|
nf_logging[pf] = NULL;
|
||||||
spin_unlock(&nf_log_lock);
|
spin_unlock(&nf_log_lock);
|
||||||
|
|
||||||
/* Give time to concurrent readers. */
|
/* Give time to concurrent readers. */
|
||||||
synchronize_net();
|
synchronize_net();
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(nf_log_unregister_pf);
|
EXPORT_SYMBOL(nf_log_unregister_pf);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче