netfilter: enable per netns support for nf_loggers
After this patch, all nf_loggers support net namespace. Still xt_LOG and ebt_log require syslog netns support. Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
9368a53c47
commit
5b023fc8d8
@ -35,9 +35,6 @@ void nf_log_set(struct net *net, u_int8_t pf, const struct nf_logger *logger)
|
|||||||
{
|
{
|
||||||
const struct nf_logger *log;
|
const struct nf_logger *log;
|
||||||
|
|
||||||
if (!net_eq(net, &init_net))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (pf == NFPROTO_UNSPEC)
|
if (pf == NFPROTO_UNSPEC)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -56,9 +53,6 @@ void nf_log_unset(struct net *net, const struct nf_logger *logger)
|
|||||||
int i;
|
int i;
|
||||||
const struct nf_logger *log;
|
const struct nf_logger *log;
|
||||||
|
|
||||||
if (!net_eq(net, &init_net))
|
|
||||||
return;
|
|
||||||
|
|
||||||
mutex_lock(&nf_log_mutex);
|
mutex_lock(&nf_log_mutex);
|
||||||
for (i = 0; i < NFPROTO_NUMPROTO; i++) {
|
for (i = 0; i < NFPROTO_NUMPROTO; i++) {
|
||||||
log = rcu_dereference_protected(net->nf.nf_loggers[i],
|
log = rcu_dereference_protected(net->nf.nf_loggers[i],
|
||||||
@ -94,7 +88,6 @@ int nf_log_register(u_int8_t pf, struct nf_logger *logger)
|
|||||||
|
|
||||||
mutex_unlock(&nf_log_mutex);
|
mutex_unlock(&nf_log_mutex);
|
||||||
|
|
||||||
nf_log_set(&init_net, pf, logger);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(nf_log_register);
|
EXPORT_SYMBOL(nf_log_register);
|
||||||
@ -107,17 +100,12 @@ void nf_log_unregister(struct nf_logger *logger)
|
|||||||
for (i = 0; i < NFPROTO_NUMPROTO; i++)
|
for (i = 0; i < NFPROTO_NUMPROTO; i++)
|
||||||
list_del(&logger->list[i]);
|
list_del(&logger->list[i]);
|
||||||
mutex_unlock(&nf_log_mutex);
|
mutex_unlock(&nf_log_mutex);
|
||||||
|
|
||||||
nf_log_unset(&init_net, logger);
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(nf_log_unregister);
|
EXPORT_SYMBOL(nf_log_unregister);
|
||||||
|
|
||||||
int nf_log_bind_pf(struct net *net, u_int8_t pf,
|
int nf_log_bind_pf(struct net *net, u_int8_t pf,
|
||||||
const struct nf_logger *logger)
|
const struct nf_logger *logger)
|
||||||
{
|
{
|
||||||
if (!net_eq(net, &init_net))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (pf >= ARRAY_SIZE(net->nf.nf_loggers))
|
if (pf >= ARRAY_SIZE(net->nf.nf_loggers))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
mutex_lock(&nf_log_mutex);
|
mutex_lock(&nf_log_mutex);
|
||||||
@ -133,9 +121,6 @@ EXPORT_SYMBOL(nf_log_bind_pf);
|
|||||||
|
|
||||||
void nf_log_unbind_pf(struct net *net, u_int8_t pf)
|
void nf_log_unbind_pf(struct net *net, u_int8_t pf)
|
||||||
{
|
{
|
||||||
if (!net_eq(net, &init_net))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (pf >= ARRAY_SIZE(net->nf.nf_loggers))
|
if (pf >= ARRAY_SIZE(net->nf.nf_loggers))
|
||||||
return;
|
return;
|
||||||
mutex_lock(&nf_log_mutex);
|
mutex_lock(&nf_log_mutex);
|
||||||
@ -157,9 +142,6 @@ void nf_log_packet(struct net *net,
|
|||||||
char prefix[NF_LOG_PREFIXLEN];
|
char prefix[NF_LOG_PREFIXLEN];
|
||||||
const struct nf_logger *logger;
|
const struct nf_logger *logger;
|
||||||
|
|
||||||
if (!net_eq(net, &init_net))
|
|
||||||
return;
|
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
logger = rcu_dereference(net->nf.nf_loggers[pf]);
|
logger = rcu_dereference(net->nf.nf_loggers[pf]);
|
||||||
if (logger) {
|
if (logger) {
|
||||||
@ -274,9 +256,6 @@ static int nf_log_proc_dostring(ctl_table *table, int write,
|
|||||||
struct net *net = current->nsproxy->net_ns;
|
struct net *net = current->nsproxy->net_ns;
|
||||||
|
|
||||||
if (write) {
|
if (write) {
|
||||||
if (!net_eq(net, &init_net))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (size > sizeof(buf))
|
if (size > sizeof(buf))
|
||||||
size = sizeof(buf);
|
size = sizeof(buf);
|
||||||
if (copy_from_user(buf, buffer, size))
|
if (copy_from_user(buf, buffer, size))
|
||||||
|
Loading…
Reference in New Issue
Block a user