UPSTREAM: tls: always refresh the queue when reading sock
After recent changes in net-next TCP compacts skbs much more
aggressively. This unearthed a bug in TLS where we may try
to operate on an old skb when checking if all skbs in the
queue have matching decrypt state and geometry.
BUG: KASAN: slab-use-after-free in tls_strp_check_rcv+0x898/0x9a0 [tls]
(net/tls/tls_strp.c:436 net/tls/tls_strp.c:530 net/tls/tls_strp.c:544)
Read of size 4 at addr ffff888013085750 by task tls/13529
CPU: 2 UID: 0 PID: 13529 Comm: tls Not tainted 6.16.0-rc5-virtme
Call Trace:
kasan_report+0xca/0x100
tls_strp_check_rcv+0x898/0x9a0 [tls]
tls_rx_rec_wait+0x2c9/0x8d0 [tls]
tls_sw_recvmsg+0x40f/0x1aa0 [tls]
inet_recvmsg+0x1c3/0x1f0
Always reload the queue, fast path is to have the record in the queue
when we wake, anyway (IOW the path going down "if !strp->stm.full_len").
Fixes: 0d87bbd39d ("tls: strp: make sure the TCP skbs do not have overlapping data")
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit 4ab26bce3969f8fd925fe6f6f551e4d1a508c68b)
Change-Id: I71869eb0d32503c145c163d95b84a235393ce4d1
Signed-off-by: Pengtao He <hepengtao@xiaomi.com>
This commit is contained in:
committed by
Treehugger Robot
parent
2b955c7a0f
commit
de2973e844
+1
-2
@@ -512,9 +512,8 @@ static int tls_strp_read_sock(struct tls_strparser *strp)
|
||||
if (inq < strp->stm.full_len)
|
||||
return tls_strp_read_copy(strp, true);
|
||||
|
||||
tls_strp_load_anchor_with_queue(strp, inq);
|
||||
if (!strp->stm.full_len) {
|
||||
tls_strp_load_anchor_with_queue(strp, inq);
|
||||
|
||||
sz = tls_rx_msg_size(strp, strp->anchor);
|
||||
if (sz < 0) {
|
||||
tls_strp_abort_strp(strp, sz);
|
||||
|
||||
Reference in New Issue
Block a user