Author: tsoome
Date: Sun Sep  9 06:30:15 2018
New Revision: 338540
URL: https://svnweb.freebsd.org/changeset/base/338540

Log:
  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

Modified:
  head/stand/libsa/tftp.c

Modified: head/stand/libsa/tftp.c
==============================================================================
--- head/stand/libsa/tftp.c     Sat Sep  8 23:39:26 2018        (r338539)
+++ head/stand/libsa/tftp.c     Sun Sep  9 06:30:15 2018        (r338540)
@@ -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 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to