Pablo Greco e6a3ae
From 64f43842f5685d5b1290d4a1bf4eba8e1e738a8d Mon Sep 17 00:00:00 2001
Pablo Greco e6a3ae
From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= <philmd@redhat.com>
Pablo Greco e6a3ae
Date: Fri, 17 Jan 2020 11:49:41 +0100
Pablo Greco e6a3ae
Subject: [PATCH 6/7] slirp: use correct size while emulating IRC commands
Pablo Greco e6a3ae
MIME-Version: 1.0
Pablo Greco e6a3ae
Content-Type: text/plain; charset=UTF-8
Pablo Greco e6a3ae
Content-Transfer-Encoding: 8bit
Pablo Greco e6a3ae
Pablo Greco e6a3ae
RH-Author: Philippe Mathieu-Daudé <philmd@redhat.com>
Pablo Greco e6a3ae
Message-id: <20200117114942.12236-3-philmd@redhat.com>
Pablo Greco e6a3ae
Patchwork-id: 93392
Pablo Greco e6a3ae
O-Subject: [RHEL-7.7.z qemu-kvm-rhev + RHEL-7.8 qemu-kvm-rhev + RHEL-7.9 qemu-kvm-rhev + RHEL-8.1.0 qemu-kvm + RHEL-8.2.0 qemu-kvm + RHEL-7.7.z qemu-kvm-ma + RHEL-7.8 qemu-kvm-ma + RHEL-7.9 qemu-kvm-ma PATCH 2/3] slirp: use correct size while emulating IRC commands
Pablo Greco e6a3ae
Bugzilla: 1791566
Pablo Greco e6a3ae
RH-Acked-by: Stefano Garzarella <sgarzare@redhat.com>
Pablo Greco e6a3ae
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
Pablo Greco e6a3ae
RH-Acked-by: Thomas Huth <thuth@redhat.com>
Pablo Greco e6a3ae
Pablo Greco e6a3ae
From: Prasad J Pandit <pjp@fedoraproject.org>
Pablo Greco e6a3ae
Pablo Greco e6a3ae
While emulating IRC DCC commands, tcp_emu() uses 'mbuf' size
Pablo Greco e6a3ae
'm->m_size' to write DCC commands via snprintf(3). This may
Pablo Greco e6a3ae
lead to OOB write access, because 'bptr' points somewhere in
Pablo Greco e6a3ae
the middle of 'mbuf' buffer, not at the start. Use M_FREEROOM(m)
Pablo Greco e6a3ae
size to avoid OOB access.
Pablo Greco e6a3ae
Pablo Greco e6a3ae
Reported-by: Vishnu Dev TJ <vishnudevtj@gmail.com>
Pablo Greco e6a3ae
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
Pablo Greco e6a3ae
Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Pablo Greco e6a3ae
Message-Id: <20200109094228.79764-2-ppandit@redhat.com>
Pablo Greco e6a3ae
(cherry picked from libslirp commit ce131029d6d4a405cb7d3ac6716d03e58fb4a5d9)
Pablo Greco e6a3ae
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Pablo Greco e6a3ae
Pablo Greco e6a3ae
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
Pablo Greco e6a3ae
---
Pablo Greco e6a3ae
 slirp/tcp_subr.c | 6 +++---
Pablo Greco e6a3ae
 1 file changed, 3 insertions(+), 3 deletions(-)
Pablo Greco e6a3ae
Pablo Greco e6a3ae
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
Pablo Greco e6a3ae
index decfd9b..b60310d 100644
Pablo Greco e6a3ae
--- a/slirp/tcp_subr.c
Pablo Greco e6a3ae
+++ b/slirp/tcp_subr.c
Pablo Greco e6a3ae
@@ -783,7 +783,7 @@ tcp_emu(struct socket *so, struct mbuf *m)
Pablo Greco e6a3ae
 				return 1;
Pablo Greco e6a3ae
 			}
Pablo Greco e6a3ae
 			m->m_len = bptr - m->m_data; /* Adjust length */
Pablo Greco e6a3ae
-                        m->m_len += snprintf(bptr, m->m_size,
Pablo Greco e6a3ae
+                        m->m_len += snprintf(bptr, M_FREEROOM(m),
Pablo Greco e6a3ae
                                              "DCC CHAT chat %lu %u%c\n",
Pablo Greco e6a3ae
                                              (unsigned long)ntohl(so->so_faddr.s_addr),
Pablo Greco e6a3ae
                                              ntohs(so->so_fport), 1);
Pablo Greco e6a3ae
@@ -794,7 +794,7 @@ tcp_emu(struct socket *so, struct mbuf *m)
Pablo Greco e6a3ae
 				return 1;
Pablo Greco e6a3ae
 			}
Pablo Greco e6a3ae
 			m->m_len = bptr - m->m_data; /* Adjust length */
Pablo Greco e6a3ae
-                        m->m_len += snprintf(bptr, m->m_size,
Pablo Greco e6a3ae
+                        m->m_len += snprintf(bptr, M_FREEROOM(m),
Pablo Greco e6a3ae
                                              "DCC SEND %s %lu %u %u%c\n", buff,
Pablo Greco e6a3ae
                                              (unsigned long)ntohl(so->so_faddr.s_addr),
Pablo Greco e6a3ae
                                              ntohs(so->so_fport), n1, 1);
Pablo Greco e6a3ae
@@ -805,7 +805,7 @@ tcp_emu(struct socket *so, struct mbuf *m)
Pablo Greco e6a3ae
 				return 1;
Pablo Greco e6a3ae
 			}
Pablo Greco e6a3ae
 			m->m_len = bptr - m->m_data; /* Adjust length */
Pablo Greco e6a3ae
-                        m->m_len += snprintf(bptr, m->m_size,
Pablo Greco e6a3ae
+                        m->m_len += snprintf(bptr, M_FREEROOM(m),
Pablo Greco e6a3ae
                                              "DCC MOVE %s %lu %u %u%c\n", buff,
Pablo Greco e6a3ae
                                              (unsigned long)ntohl(so->so_faddr.s_addr),
Pablo Greco e6a3ae
                                              ntohs(so->so_fport), n1, 1);
Pablo Greco e6a3ae
-- 
Pablo Greco e6a3ae
1.8.3.1
Pablo Greco e6a3ae