Account for TFTP packet headers in IPv6 correctly.

This commit is contained in:
Simon Kelley
2016-03-04 21:32:21 +00:00
parent fa79466c2a
commit d1377fa3c4

View File

@@ -346,14 +346,15 @@ void tftp_request(struct listener *listen, time_t now)
{ {
if ((opt = next(&p, end)) && !option_bool(OPT_TFTP_NOBLOCK)) if ((opt = next(&p, end)) && !option_bool(OPT_TFTP_NOBLOCK))
{ {
/* 32 bytes for IP, UDP and TFTP headers, 52 bytes for IPv6 */
int overhead = (listen->family == AF_INET) ? 32 : 52;
transfer->blocksize = atoi(opt); transfer->blocksize = atoi(opt);
if (transfer->blocksize < 1) if (transfer->blocksize < 1)
transfer->blocksize = 1; transfer->blocksize = 1;
if (transfer->blocksize > (unsigned)daemon->packet_buff_sz - 4) if (transfer->blocksize > (unsigned)daemon->packet_buff_sz - 4)
transfer->blocksize = (unsigned)daemon->packet_buff_sz - 4; transfer->blocksize = (unsigned)daemon->packet_buff_sz - 4;
/* 32 bytes for IP, UDP and TFTP headers */ if (mtu != 0 && transfer->blocksize > (unsigned)mtu - overhead)
if (mtu != 0 && transfer->blocksize > (unsigned)mtu - 32) transfer->blocksize = (unsigned)mtu - overhead;
transfer->blocksize = (unsigned)mtu - 32;
transfer->opt_blocksize = 1; transfer->opt_blocksize = 1;
transfer->block = 0; transfer->block = 0;
} }