Commit cfe560c
Bluetooth: L2CAP: Fix slab-use-after-free in l2cap_connect()
commit 4d7b41c upstream.
Extend a critical section to prevent chan from early freeing.
Also make the l2cap_connect() return type void. Nothing is using the
returned value but it is ugly to return a potentially freed pointer.
Making it void will help with backports because earlier kernels did use
the return value. Now the compile will break for kernels where this
patch is not a complete fix.
Call stack summary:
[use]
l2cap_bredr_sig_cmd
l2cap_connect
┌ mutex_lock(&conn->chan_lock);
│ chan = pchan->ops->new_connection(pchan); <- alloc chan
│ __l2cap_chan_add(conn, chan);
│ l2cap_chan_hold(chan);
│ list_add(&chan->list, &conn->chan_l); ... (1)
└ mutex_unlock(&conn->chan_lock);
chan->conf_state ... (4) <- use after free
[free]
l2cap_conn_del
┌ mutex_lock(&conn->chan_lock);
│ foreach chan in conn->chan_l: ... (2)
│ l2cap_chan_put(chan);
│ l2cap_chan_destroy
│ kfree(chan) ... (3) <- chan freed
└ mutex_unlock(&conn->chan_lock);
==================================================================
BUG: KASAN: slab-use-after-free in instrument_atomic_read
include/linux/instrumented.h:68 [inline]
BUG: KASAN: slab-use-after-free in _test_bit
include/asm-generic/bitops/instrumented-non-atomic.h:141 [inline]
BUG: KASAN: slab-use-after-free in l2cap_connect+0xa67/0x11a0
net/bluetooth/l2cap_core.c:4260
Read of size 8 at addr ffff88810bf040a0 by task kworker/u3:1/311
Fixes: 73ffa90 ("Bluetooth: Move conf_{req,rsp} stuff to struct l2cap_chan")
Signed-off-by: Sungwoo Kim <iam@sung-woo.kim>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>1 parent 4d29fd5 commit cfe560c
1 file changed
+10
-11
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3905 | 3905 | | |
3906 | 3906 | | |
3907 | 3907 | | |
3908 | | - | |
3909 | | - | |
3910 | | - | |
| 3908 | + | |
| 3909 | + | |
3911 | 3910 | | |
3912 | 3911 | | |
3913 | 3912 | | |
3914 | | - | |
| 3913 | + | |
3915 | 3914 | | |
3916 | 3915 | | |
3917 | 3916 | | |
| |||
3924 | 3923 | | |
3925 | 3924 | | |
3926 | 3925 | | |
3927 | | - | |
| 3926 | + | |
3928 | 3927 | | |
3929 | 3928 | | |
3930 | 3929 | | |
| |||
4011 | 4010 | | |
4012 | 4011 | | |
4013 | 4012 | | |
4014 | | - | |
4015 | | - | |
4016 | | - | |
4017 | | - | |
4018 | | - | |
4019 | 4013 | | |
4020 | 4014 | | |
4021 | 4015 | | |
4022 | 4016 | | |
4023 | 4017 | | |
4024 | 4018 | | |
| 4019 | + | |
| 4020 | + | |
| 4021 | + | |
4025 | 4022 | | |
4026 | 4023 | | |
4027 | 4024 | | |
| |||
4044 | 4041 | | |
4045 | 4042 | | |
4046 | 4043 | | |
4047 | | - | |
| 4044 | + | |
| 4045 | + | |
| 4046 | + | |
4048 | 4047 | | |
4049 | 4048 | | |
4050 | 4049 | | |
| |||
0 commit comments