From: Gé van Geldorp Date: Fri, 23 Dec 2005 20:47:54 +0000 (+0000) Subject: Checking memory allocation return values helps prevent crashes X-Git-Tag: backups/expat-rbuild@40467~818 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=7ca33cb6d6b9e7790f845826e3de4cfa73fc0b4f Checking memory allocation return values helps prevent crashes svn path=/trunk/; revision=20316 --- diff --git a/reactos/drivers/lib/oskittcp/include/freebsd/src/sys/sys/mbuf.h b/reactos/drivers/lib/oskittcp/include/freebsd/src/sys/sys/mbuf.h index 37653b27b1f..c42198758de 100644 --- a/reactos/drivers/lib/oskittcp/include/freebsd/src/sys/sys/mbuf.h +++ b/reactos/drivers/lib/oskittcp/include/freebsd/src/sys/sys/mbuf.h @@ -304,9 +304,12 @@ union mcluster { #ifdef __REACTOS__ #define MCLGET(m, how) { \ OS_DbgPrint(OSK_MID_TRACE,("(MCLGET) m = %x\n", m)); \ - (m)->m_data = (m)->m_ext.ext_buf = malloc(MCLBYTES); \ - (m)->m_flags |= M_EXT; \ - (m)->m_ext.ext_size = MCLBYTES; \ + (m)->m_ext.ext_buf = malloc(MCLBYTES); \ + if ((m)->m_ext.ext_buf != NULL) { \ + (m)->m_data = (m)->m_ext.ext_buf; \ + (m)->m_flags |= M_EXT; \ + (m)->m_ext.ext_size = MCLBYTES; \ + } \ } #define MCLFREE(p) { \ diff --git a/reactos/drivers/lib/oskittcp/oskittcp/ip_output.c b/reactos/drivers/lib/oskittcp/oskittcp/ip_output.c index 8a519ff0832..a43def560f5 100644 --- a/reactos/drivers/lib/oskittcp/oskittcp/ip_output.c +++ b/reactos/drivers/lib/oskittcp/oskittcp/ip_output.c @@ -366,8 +366,17 @@ sendit: #ifdef __REACTOS__ if( OtcpEvent.PacketSend ) { struct mbuf *new_m; - MGET( new_m, M_DONTWAIT, 0 ); + new_m = m_get( M_DONTWAIT, 0 ); + if ( NULL == new_m ) { + error = ENOBUFS; + goto done; + } MCLGET( new_m, M_DONTWAIT ); + if (0 == (new_m->m_flags & M_EXT)) { + m_free( new_m ); + error = ENOBUFS; + goto done; + } m_copydata( m, 0, htons(ip->ip_len), new_m->m_data ); new_m->m_len = htons(ip->ip_len); error = OtcpEvent.PacketSend( OtcpEvent.ClientData, @@ -498,7 +507,16 @@ sendorfree: if( error == 0 && OtcpEvent.PacketSend ) { struct mbuf *new_m; MGET( new_m, M_DONTWAIT, 0 ); + if ( NULL == new_m ) { + error = ENOBUFS; + goto done; + } MCLGET( new_m, M_DONTWAIT ); + if (0 == (new_m->m_flags & M_EXT)) { + m_free( new_m ); + error = ENOBUFS; + goto done; + } m_copydata( m, 0, htons(ip->ip_len), new_m->m_data ); new_m->m_len = htons(ip->ip_len); error = OtcpEvent.PacketSend( OtcpEvent.ClientData,