Date: Thu, 1 Nov 2018 13:12:05 +0000 (UTC) From: Toomas Soome <tsoome@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r339992 - head/stand/libsa Message-ID: <201811011312.wA1DC5t7046426@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: tsoome Date: Thu Nov 1 13:12:05 2018 New Revision: 339992 URL: https://svnweb.freebsd.org/changeset/base/339992 Log: libsa: tftp should not read past file end When we have the file size via tsize option, use it to make sure we will not attempt to read past file end. Modified: head/stand/libsa/tftp.c Modified: head/stand/libsa/tftp.c ============================================================================== --- head/stand/libsa/tftp.c Thu Nov 1 11:41:40 2018 (r339991) +++ head/stand/libsa/tftp.c Thu Nov 1 13:12:05 2018 (r339992) @@ -498,11 +498,19 @@ tftp_read(struct open_file *f, void *addr, size_t size size_t *resid /* out */) { struct tftp_handle *tftpfile; + size_t res; int rc; rc = 0; + res = size; tftpfile = (struct tftp_handle *) f->f_fsdata; + /* Make sure we will not read past file end */ + if (tftpfile->tftp_tsize > 0 && + tftpfile->off + size > tftpfile->tftp_tsize) { + size = tftpfile->tftp_tsize - tftpfile->off; + } + while (size > 0) { int needblock, count; @@ -550,6 +558,7 @@ tftp_read(struct open_file *f, void *addr, size_t size addr = (char *)addr + count; tftpfile->off += count; size -= count; + res -= count; if ((tftpfile->islastblock) && (count == inbuffer)) break; /* EOF */ @@ -562,8 +571,8 @@ tftp_read(struct open_file *f, void *addr, size_t size } - if (resid) - *resid = size; + if (resid != NULL) + *resid = res; return (rc); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201811011312.wA1DC5t7046426>