bounds check for tun and tcp writing

pull/35/head
Jeff Becker 6 years ago
parent de17324012
commit c483ec5231
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -117,10 +117,20 @@ llarp_ev_add_tun(struct llarp_ev_loop *loop, struct llarp_tun_io *tun)
}
bool
llarp_ev_tun_async_write(struct llarp_tun_io *tun, const void *pkt, size_t sz)
llarp_tcp_conn_async_write(struct llarp_tcp_conn *conn, const void *pkt,
size_t sz)
{
return static_cast< llarp::ev_io * >(tun->impl)->queue_write(
(const byte_t *)pkt, sz);
constexpr size_t buffsz = llarp::ev_io::WriteBuffer::BufferSize;
const byte_t *ptr = (const byte_t *)pkt;
llarp::ev_io *impl = static_cast< llarp::ev_io * >(conn->impl);
while(sz > buffsz)
{
if(!impl->queue_write((const byte_t *)ptr, buffsz))
return false;
ptr += buffsz;
sz -= buffsz;
}
return impl->queue_write(ptr, sz);
}
bool
@ -149,11 +159,12 @@ llarp_tcp_acceptor_close(struct llarp_tcp_acceptor *tcp)
}
bool
llarp_tcp_conn_async_write(struct llarp_tcp_conn *conn, const void *buf,
size_t sz)
llarp_ev_tun_async_write(struct llarp_tun_io *tun, const void *buf, size_t sz)
{
return static_cast< llarp::ev_io * >(conn->impl)
->queue_write((const byte_t *)buf, sz);
if(sz > llarp::ev_io::WriteBuffer::BufferSize)
return false;
return static_cast< llarp::ev_io * >(tun->impl)->queue_write(
(const byte_t *)buf, sz);
}
void

@ -29,13 +29,14 @@ namespace llarp
{
struct WriteBuffer
{
llarp_time_t timestamp = 0;
static constexpr size_t BufferSize = 2048;
llarp_time_t timestamp = 0;
size_t bufsz;
byte_t buf[1500];
byte_t buf[BufferSize];
WriteBuffer() = default;
WriteBuffer(const void* ptr, size_t sz)
WriteBuffer(const byte_t* ptr, size_t sz)
{
if(sz <= sizeof(buf))
{

Loading…
Cancel
Save