diff --git a/Bluetooth-fix-possible-info-leak-in-bt_sock_recvmsg.patch b/Bluetooth-fix-possible-info-leak-in-bt_sock_recvmsg.patch new file mode 100644 index 000000000..e68092ddd --- /dev/null +++ b/Bluetooth-fix-possible-info-leak-in-bt_sock_recvmsg.patch @@ -0,0 +1,47 @@ +From 4683f42fde3977bdb4e8a09622788cc8b5313778 Mon Sep 17 00:00:00 2001 +From: Mathias Krause +Date: Sun, 7 Apr 2013 01:51:49 +0000 +Subject: [PATCH] Bluetooth: fix possible info leak in bt_sock_recvmsg() + +In case the socket is already shutting down, bt_sock_recvmsg() returns +with 0 without updating msg_namelen leading to net/socket.c leaking the +local, uninitialized sockaddr_storage variable to userland -- 128 bytes +of kernel stack memory. + +Fix this by moving the msg_namelen assignment in front of the shutdown +test. + +Cc: Marcel Holtmann +Cc: Gustavo Padovan +Cc: Johan Hedberg +Signed-off-by: Mathias Krause +Signed-off-by: David S. Miller +--- + net/bluetooth/af_bluetooth.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c +index d3ee69b..0d1b08c 100644 +--- a/net/bluetooth/af_bluetooth.c ++++ b/net/bluetooth/af_bluetooth.c +@@ -230,6 +230,8 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock, + if (flags & (MSG_OOB)) + return -EOPNOTSUPP; + ++ msg->msg_namelen = 0; ++ + skb = skb_recv_datagram(sk, flags, noblock, &err); + if (!skb) { + if (sk->sk_shutdown & RCV_SHUTDOWN) +@@ -237,8 +239,6 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock, + return err; + } + +- msg->msg_namelen = 0; +- + copied = skb->len; + if (len < copied) { + msg->msg_flags |= MSG_TRUNC; +-- +1.8.1.4 +