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:
parent
9c78fa0a61
commit
7e63e808d7
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user