bugzilla-daemon@bugzilla.netfilter.org
2006-Feb-09 10:25 UTC
[Bug 445] New: ipt_account reports: sleeping function called from invalid context at mm/slab.c:2063
https://bugzilla.netfilter.org/bugzilla/show_bug.cgi?id=445 Summary: ipt_account reports: sleeping function called from invalid context at mm/slab.c:2063 Product: netfilter/iptables Version: patch-o-matic-ng Platform: All OS/Version: other Status: NEW Severity: normal Priority: P2 Component: ip_tables (kernel) AssignedTo: laforge@netfilter.org ReportedBy: jafo@tummy.com The current ipt_account SVN code (and probably earlier, extending back as far as July of 2005) seem to report the following when you read from the /proc/net/ipt_account file: Debug: sleeping function called from invalid context at mm/slab.c:2063 in_atomic():1[expected: 0], irqs_disabled():0 Call Trace:<ffffffff80131dd7>{__might_sleep+173} <ffffffff8015fcab>{kmem_cache_alloc+34} <ffffffffa01b7130>{:ipt_account:account_seq_start+51} <ffffffff80193624>{seq_read+235} <ffffffff801770bf>{vfs_read+207} <ffffffff80177316>{sys_read+69} <ffffffff80110092>{system_call+126} If I move the kmalloc and kfree in account_seq_start and account_seq_stop to outside the spin-lock, these messages go away. I don't see that the lock does anything to protect the malloc/free. My changed version of these functions are: static void *account_seq_start(struct seq_file *s, loff_t *pos) { struct proc_dir_entry *pde = s->private; struct t_ipt_account_table *table = pde->data; unsigned int *bucket; bucket = kmalloc(sizeof(unsigned int), GFP_KERNEL); if (!bucket) return ERR_PTR(-ENOMEM); spin_lock_bh(&table->ip_list_lock); if (*pos >= table->count) return NULL; *bucket = *pos; return bucket; } static void account_seq_stop(struct seq_file *s, void *v) { struct proc_dir_entry *pde = s->private; struct t_ipt_account_table *table = pde->data; unsigned int *bucket = (unsigned int *)v; spin_unlock_bh(&table->ip_list_lock); kfree(bucket); } -- Configure bugmail: https://bugzilla.netfilter.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
bugzilla-daemon@bugzilla.netfilter.org
2006-Feb-09 10:25 UTC
[Bug 445] New: ipt_account reports: sleeping function called from invalid context at mm/slab.c:2063
https://bugzilla.netfilter.org/bugzilla/show_bug.cgi?id=445 Summary: ipt_account reports: sleeping function called from invalid context at mm/slab.c:2063 Product: netfilter/iptables Version: patch-o-matic-ng Platform: All OS/Version: other Status: NEW Severity: normal Priority: P2 Component: ip_tables (kernel) AssignedTo: laforge@netfilter.org ReportedBy: jafo@tummy.com The current ipt_account SVN code (and probably earlier, extending back as far as July of 2005) seem to report the following when you read from the /proc/net/ipt_account file: Debug: sleeping function called from invalid context at mm/slab.c:2063 in_atomic():1[expected: 0], irqs_disabled():0 Call Trace:<ffffffff80131dd7>{__might_sleep+173} <ffffffff8015fcab>{kmem_cache_alloc+34} <ffffffffa01b7130>{:ipt_account:account_seq_start+51} <ffffffff80193624>{seq_read+235} <ffffffff801770bf>{vfs_read+207} <ffffffff80177316>{sys_read+69} <ffffffff80110092>{system_call+126} If I move the kmalloc and kfree in account_seq_start and account_seq_stop to outside the spin-lock, these messages go away. I don't see that the lock does anything to protect the malloc/free. My changed version of these functions are: static void *account_seq_start(struct seq_file *s, loff_t *pos) { struct proc_dir_entry *pde = s->private; struct t_ipt_account_table *table = pde->data; unsigned int *bucket; bucket = kmalloc(sizeof(unsigned int), GFP_KERNEL); if (!bucket) return ERR_PTR(-ENOMEM); spin_lock_bh(&table->ip_list_lock); if (*pos >= table->count) return NULL; *bucket = *pos; return bucket; } static void account_seq_stop(struct seq_file *s, void *v) { struct proc_dir_entry *pde = s->private; struct t_ipt_account_table *table = pde->data; unsigned int *bucket = (unsigned int *)v; spin_unlock_bh(&table->ip_list_lock); kfree(bucket); } -- Configure bugmail: https://bugzilla.netfilter.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You reported the bug, or are watching the reporter.