[NETFILTER]: check nf_log function call arguments
authorHarald Welte <laforge@netfilter.org>
Wed, 10 Aug 2005 03:23:53 +0000 (20:23 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Mon, 29 Aug 2005 22:51:25 +0000 (15:51 -0700)
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>
include/linux/netfilter.h
net/netfilter/nf_log.c

index bf430fcbe3641476f895d1c9224e01b448cdb569..ac3c61411d4befe398468beaea50bdb7156163a5 100644 (file)
@@ -157,7 +157,7 @@ struct nf_logger {
 
 /* Function to register/unregister log function. */
 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);
 
 /* Calls the registered backend logging function */
index e104760f7a67702be2636d07c90a0b5170166d32..573e76a770d95e2858e0da28ebc555aca9b2f979 100644 (file)
@@ -24,6 +24,9 @@ int nf_log_register(int pf, struct nf_logger *logger)
 {
        int ret = -EBUSY;
 
+       if (pf >= NPROTO)
+               return -EINVAL;
+
        /* Any setup of logging members must be done before
         * substituting pointer. */
        spin_lock(&nf_log_lock);
@@ -38,14 +41,19 @@ int nf_log_register(int pf, struct nf_logger *logger)
 }              
 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);
        nf_logging[pf] = NULL;
        spin_unlock(&nf_log_lock);
 
        /* Give time to concurrent readers. */
        synchronize_net();
+
+       return 0;
 }
 EXPORT_SYMBOL(nf_log_unregister_pf);