libsa: validate tftp_makereq() after we did reset the read

The name check referred in the comment is not the only possible error source,
we need to validate the result.

Reviewed by:	allanjude
Approved by:	re (kib)
Differential Revision:	https://reviews.freebsd.org/D17081
This commit is contained in:
Toomas Soome 2018-09-09 06:30:15 +00:00
parent 9c78fa0a61
commit 7e63e808d7

View File

@ -490,6 +490,9 @@ tftp_read(struct open_file *f, void *addr, size_t size,
size_t *resid /* out */)
{
struct tftp_handle *tftpfile;
int rc;
rc = 0;
tftpfile = (struct tftp_handle *) f->f_fsdata;
while (size > 0) {
@ -501,19 +504,19 @@ tftp_read(struct open_file *f, void *addr, size_t size,
if (tftpfile->currblock > needblock) { /* seek backwards */
tftp_senderr(tftpfile, 0, "No error: read aborted");
tftp_makereq(tftpfile); /* no error check, it worked
* for open */
rc = tftp_makereq(tftpfile);
if (rc != 0)
break;
}
while (tftpfile->currblock < needblock) {
int res;
res = tftp_getnextblock(tftpfile);
if (res) { /* no answer */
rc = tftp_getnextblock(tftpfile);
if (rc) { /* no answer */
#ifdef TFTP_DEBUG
printf("tftp: read error\n");
#endif
return (res);
return (rc);
}
if (tftpfile->islastblock)
break;
@ -553,7 +556,7 @@ tftp_read(struct open_file *f, void *addr, size_t size,
if (resid)
*resid = size;
return (0);
return (rc);
}
static int