Abort transfer if fseeko() fails.

CID:		1420215
Reviewed by:	asomers
MFC after:	1 week
Sponsored by:	DARPA
Differential Revision:	https://reviews.freebsd.org/D24454
This commit is contained in:
John Baldwin 2020-04-21 17:32:57 +00:00
parent d000623a21
commit 0c0119856b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=360167

View File

@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include "tftp-file.h"
@ -124,7 +125,13 @@ tftp_send(int peer, uint16_t *block, struct tftp_stats *ts)
acktry++;
ts->retries++;
seek_file(window[0].offset);
if (seek_file(window[0].offset) != 0) {
tftp_log(LOG_ERR,
"seek_file failed: %s",
strerror(errno));
send_error(peer, errno + 100);
goto abort;
}
*block = window[0].block;
windowblock = 0;
goto read_block;
@ -158,7 +165,13 @@ tftp_send(int peer, uint16_t *block, struct tftp_stats *ts)
/* Resend the current window. */
ts->retries++;
seek_file(window[0].offset);
if (seek_file(window[0].offset) != 0) {
tftp_log(LOG_ERR,
"seek_file failed: %s",
strerror(errno));
send_error(peer, errno + 100);
goto abort;
}
*block = window[0].block;
windowblock = 0;
goto read_block;
@ -183,7 +196,14 @@ tftp_send(int peer, uint16_t *block, struct tftp_stats *ts)
if (debug&DEBUG_SIMPLE)
tftp_log(LOG_DEBUG,
"Partial ACK");
seek_file(window[i + 1].offset);
if (seek_file(window[i + 1].offset) !=
0) {
tftp_log(LOG_ERR,
"seek_file failed: %s",
strerror(errno));
send_error(peer, errno + 100);
goto abort;
}
*block = window[i + 1].block;
windowblock = 0;
ts->retries++;