lkml.org 
[lkml]   [2023]   [Nov]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
SubjectRe: [syzbot] [net?] [nfc?] KASAN: slab-use-after-free Read in nfc_alloc_send_skb
From
#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master

---
net/nfc/llcp_sock.c | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c
index 645677f84dba..699f7f6cc0b8 100644
--- a/net/nfc/llcp_sock.c
+++ b/net/nfc/llcp_sock.c
@@ -791,33 +791,39 @@ static int llcp_sock_sendmsg(struct socket *sock, struct msghdr *msg,
lock_sock(sk);

if (!llcp_sock->local) {
- release_sock(sk);
- return -ENODEV;
+ ret = -ENODEV;
+ goto out;
}

if (sk->sk_type == SOCK_DGRAM) {
+ if (sk->sk_state != LLCP_BOUND) {
+ ret = -ENOLINK;
+ goto out;
+ }
+
DECLARE_SOCKADDR(struct sockaddr_nfc_llcp *, addr,
msg->msg_name);

if (msg->msg_namelen < sizeof(*addr)) {
- release_sock(sk);
- return -EINVAL;
+ ret = -EINVAL;
+ goto out;
}

- release_sock(sk);
-
- return nfc_llcp_send_ui_frame(llcp_sock, addr->dsap, addr->ssap,
- msg, len);
+ ret = nfc_llcp_send_ui_frame(llcp_sock, addr->dsap, addr->ssap,
+ msg, len);
+ goto out;
}

if (sk->sk_state != LLCP_CONNECTED) {
- release_sock(sk);
- return -ENOTCONN;
+ ret = -ENOTCONN;
+ goto out;
}

- release_sock(sk);
+ ret = nfc_llcp_send_i_frame(llcp_sock, msg, len);

- return nfc_llcp_send_i_frame(llcp_sock, msg, len);
+out:
+ release_sock(sk);
+ return ret;
}

static int llcp_sock_recvmsg(struct socket *sock, struct msghdr *msg,
--
2.42.0
\
 
 \ /
  Last update: 2023-11-20 13:59    [W:0.203 / U:0.104 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site