netfilter: fix return values of ipt_recent checkentry
Subsystems (2)
PATCH 1/8 netfilter: fix return values of ipt_recent checkentry
[ With DaveM away for a week and Linus ignoring patches, I though I'd send these eight minor bugfixes through you for inclusions asap. Thanks. ]
Name: Fix return values of ipt_recent checkentry
Status: Tested under nfsim
Signed-off-by Rusty Russell <[email protected]>
Peejix's nfsim test for ipt_recent, written two days ago, revealed this bugs with ipt_recent: checkentry() returns true or false, not an error. (Maybe it should, but that's a much larger change). Also, make hash_func() static.
net/ipv4/netfilter/ipt_recent.c +9 -9
@@ -107,7 +107,7 @@ int *hotdrop);/* Function to hash a given address into the hash table of table_size size */ -int hash_func (unsigned int addr,int table_size) +static int hash_func (unsigned int addr,int table_size) {int result =0 ;unsigned int value = addr;
@@ -713,7 +713,7 @@#endif curr_table =vmalloc (sizeof (struct recent_ip_tables )); -if (curr_table ==NULL )return -ENOMEM ; +if (curr_table ==NULL )return 0 ;spin_lock_init (&curr_table->list_lock); curr_table->next =NULL ;
@@ -730,7 +730,7 @@#endif curr_table->table =vmalloc (sizeof (struct recent_ip_list )*ip_list_tot); -if (curr_table->table ==NULL ) {vfree (curr_table);return -ENOMEM ; } +if (curr_table->table ==NULL ) {vfree (curr_table);return 0 ; }memset (curr_table->table,0 ,sizeof (struct recent_ip_list )*ip_list_tot);#ifdef DEBUG if(debug) printk(KERN_INFO RECENT_NAME ": checkentry: Allocating %d for pkt_list.\n",
@@ -745,7 +745,7 @@ printk(KERN_INFO RECENT_NAME ": checkentry: unable to allocate for pkt_list.\n");vfree (curr_table->table);vfree (curr_table); -return -ENOMEM ; +return 0 ; }for (c =0 ; c < ip_list_tot; c++) { curr_table->table[c].last_pkts = hold + c*ip_pkt_list_tot;
@@ -763,7 +763,7 @@vfree (hold);vfree (curr_table->table);vfree (curr_table); -return -ENOMEM ; +return 0 ; }for (c =0 ; c < ip_list_hash_size; c++) {
@@ -783,7 +783,7 @@vfree (hold);vfree (curr_table->table);vfree (curr_table); -return -ENOMEM ; +return 0 ; }for (c =0 ; c < ip_list_tot; c++) { curr_table->time_info[c].position = c;
@@ -827,7 +827,7 @@ if(debug) printk(KERN_INFO RECENT_NAME ": checkentry() create_proc failed, no tables.\n");#endif spin_unlock_bh (&recent_lock); -return -ENOMEM ; +return 0 ; }while (strncmp (info->name,curr_table->name,IPT_RECENT_NAME_LEN ) && (last_table = curr_table) && (curr_table = curr_table->next) );if (!curr_table) {
@@ -835,7 +835,7 @@ if(debug) printk(KERN_INFO RECENT_NAME ": checkentry() create_proc failed, table already destroyed.\n");#endif spin_unlock_bh (&recent_lock); -return -ENOMEM ; +return 0 ; }if (last_table) last_table->next = curr_table->next;else r_tables = curr_table->next;spin_unlock_bh (&recent_lock);
@@ -844,7 +844,7 @@vfree (hold);vfree (curr_table->table);vfree (curr_table); -return -ENOMEM ; +return 0 ; } curr_table->status_proc->owner =THIS_MODULE ;
Signature · 1 line
A bad analogy is like a leaky screwdriver -- Richard Braakman