Re: 2.6.21-rc6-mm1 ima "BUG: held lock freed!"

Andrew Morton
2007-04-11T19:52:49Z

On Wed, 11 Apr 2007 09:55:18 -0400
Joseph Fannin <jhf@columbus.rr.com> wrote:

> On Tue, 2007-04-10 at 15:00 -0400, Reiner Sailer wrote:
> > Joseph,
> >
> > we cannot reproduce the BUG you report. We have identified a potential
> > source (spinlock around mutex_init). I have attached a small patch that
> > removes this lock from the initialization of the hash table. I have
> > tested the patch but I cannot verify if this resolves the problem you
> > are seeing.
> >
> > If you can reproduce the problem, would you mind to apply this patch and
> > let us know if this solves the problem?
>
> The BUG message no longer appears with this patch applied. It was 100%
> reproducible before, so I think this fixed it.

ok, the spinlock in there was unneeded anwyay.

But I think this is a lockdep shortcoming - there's nothing wrong with
doing mutex_init() inside spin_lock().

debug_mutex_init() is trying to work out whether we're initialising
an already held mutex. This has nothing to do with the spinlock
which we're holding. Perhaps debug_check_no_locks_freed() simply
went wrong.

For Ingo - this:

=========================
[ BUG: held lock freed! ]
-------------------------
swapper/1 is freeing memory c04c7660-c04c76a3, with a lock still held there!
(ima_queue_lock){--..}, at: [<c0202710>] ima_create_htable+0x10/0x90
1 lock held by swapper/1:
#0: (ima_queue_lock){--..}, at: [<c0202710>] ima_create_htable+0x10/0x90

stack backtrace:
[<c0105959>] dump_trace+0x1d9/0x210
[<c01059aa>] show_trace_log_lvl+0x1a/0x30
[<c0106612>] show_trace+0x12/0x20
[<c01066d6>] dump_stack+0x16/0x20
[<c014fd3a>] debug_check_no_locks_freed+0x17a/0x180
[<c014cdbf>] debug_mutex_init+0x1f/0x50
[<c0145451>] __mutex_init+0x41/0x50
[<c020277d>] ima_create_htable+0x7d/0x90
[<c020286f>] ima_init+0x3f/0x270
[<c051b765>] init_evm+0x1f5/0x250
[<c05015d2>] kernel_init+0x132/0x320
[<c010532f>] kernel_thread_helper+0x7/0x18
=======================

is coming out of -mm's security/evm/ima/ima_queue.c:ima_create_htable().