It seems like a double free is happening inside bluetoothd by looking at
the line that is referenced in the error above:

in the function kfree(*x):

        page = virt_to_head_page(x);
        if (unlikely(!PageSlab(page))) {

so a pointer was passed to the kfree function, and it expected a page
datatype and got something else?

I suppose it's only really helpful to know where this function was
called from, I've never really tried to read a stacktrace before but
here goes nothing! I'm assuming that this kfree was initiated from
l2cap_chan_destroy() in bluetooth.

I found the function in net/bluetooth/l2cap_core.c and sure enough,
there is a kfree(chan) at the end of the function.

Now I don't know much about kernel programming, but since we are
apparently dealing with a double free, would it be wise to add an
'assert' here to make sure that chan is valid before we free it? Similar
to how slub.c:2943 uses "BUG_ON()" so we can track down what's actually
happening?

Now I'd really like someone with some kernel expertise to guide me here
and tell me if I'm poking in the right direction. Thanks!




** Changed in: linux (Ubuntu)
       Status: Confirmed => New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/901770

Title:
  Kernel Bug in bluetoothd?

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/901770/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to