net: tftp: Make sure timeout will not effect wrap offset
authorrockly <rockly703@gmail.com>
Sat, 3 Aug 2013 10:09:05 +0000 (18:09 +0800)
committerJoe Hershberger <joe.hershberger@ni.com>
Fri, 22 Nov 2013 20:39:31 +0000 (14:39 -0600)
When the block 0 store to the memory of client and timeout at this
moment. Because of no ACK packet, the server will send block 0 again,
if this client reconnect to the server at this time,
TftpBlockWrapOffset will become larger than it should be.

Signed-off-by: Rockly <rocklygnome@gmail.com>
Patch: 264417

net/tftp.c

index 6d333d559c19db8a9eac6a26ec01eaf73096babb..2e06808d16db42cf8c1fd42bce5109d10e39ec8d 100644 (file)
@@ -281,7 +281,7 @@ static void update_block_number(void)
         * number of 0 this means that there was a wrap
         * around of the (16 bit) counter.
         */
-       if (TftpBlock == 0) {
+       if (TftpBlock == 0 && TftpLastBlock != 0) {
                TftpBlockWrap++;
                TftpBlockWrapOffset += TftpBlkSize * TFTP_SEQUENCE_SIZE;
                TftpTimeoutCount = 0; /* we've done well, reset thhe timeout */