[riot-notifications] [RIOT-OS/RIOT] lwip_sock: Fix computation of last_offset on partial reads. (#16278)

Martine Lenders notifications at github.com
Wed Apr 7 11:13:14 CEST 2021


Ok, I don't have the board you used, so I adapted the test for `native` and to use IPv6 (because I was too lazy to set-up a DHCP server on my laptop):

```console
$ sudo ./dist/tools/tapsetup/tapsetup
creating bridge tapbr0
creating tap0
creating tap1
$ PORT=tap0 RIOT_CI_BUILD=1 make -C tests/lwip flash -j term
make: Entering directory '/home/mlenders/Repositories/RIOT-OS/RIOT/tests/lwip'
Building application "tests_lwip" for "native" with MCU "native".

/usr/bin/ld: /home/mlenders/Repositories/RIOT-OS/RIOT/tests/lwip/bin/native/cpu/tramp.o: warning: relocation against `_native_saved_eip' in read-only section `.text'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
   text	   data	    bss	    dec	    hex	filename
 234327	   1228	 101420	 336975	  5244f	/home/mlenders/Repositories/RIOT-OS/RIOT/tests/lwip/bin/native/tests_lwip.elf
/home/mlenders/Repositories/RIOT-OS/RIOT/tests/lwip/bin/native/tests_lwip.elf tap0 
RIOT native interrupts/signals initialized.
LED_RED_OFF
LED_GREEN_ON
RIOT native board initialized.
RIOT native hardware initialization complete.

main(): This is RIOT! (Version: buildtest)
RIOT lwip test application
> tcp server start 1234
tcp server start 1234
Success: started TCP server on port 1234
> ifconfig
ifconfig
Iface ET0 HWaddr: e2:bc:7d:cb:f5:50 Link: up State: up
        Link type: wired
        inet6 addr: fe80:0:0:0:e0bc:7dff:fecb:f550 scope: link
```

Then in another terminal I did

```console
$ (sleep 1; cat tests/lwip/common.c) | nc -n -v -6 fe80:0:0:0:e0bc:7dff:fecb:f550%tapbr0 1234
Connection to fe80:0:0:0:e0bc:7dff:fecb:f550%tapbr0 1234 port [tcp/*] succeeded!
```

On current `master` this leads to an endless barrage of data the same streaming in on the `native` node:

<details>

```
> TCP client [fe80::dc1a:a8ff:fe09:45b3]:41858 connected
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41858
00000000  2F  2A  0A  20  2A  20  43  6F  70  79  72  69  67  68  74  20
00000010  28  43  29  20  46  72  65  69  65  20  55  6E  69  76  65  72
00000020  73  69  74  C3  A4  74  20  42  65  72  6C  69  6E  0A  20  2A
00000030  0A  20  2A  20  54  68  69  73  20  66  69  6C  65  20  69  73
00000040  20  73  75  62  6A  65  63  74  20  74  6F  20  74  68  65  20
00000050  74  65  72  6D  73  20  61  6E  64  20  63  6F  6E  64  69  74
00000060  69  6F  6E  73  20  6F  66  20  74  68  65  20  47  4E  55  20
00000070  4C  65  73  73  65  72  0A  20  2A  20  47  65  6E  65  72  61
00000080  6C  20  50  75  62  6C  69  63  20  4C  69  63  65  6E  73  65
00000090  20  76  32  2E  31  2E  20  53  65  65  20  74  68  65  20  66
000000A0  69  6C  65  20  4C  49  43  45  4E  53  45  20  69  6E  20  74
000000B0  68  65  20  74  6F  70  20  6C  65  76  65  6C  0A  20  2A  20
000000C0  64  69  72  65  63  74  6F  72  79  20  66  6F  72  20  6D  6F
000000D0  72  65  20  64  65  74  61  69  6C  73  2E  0A  20  2A  2F  0A
000000E0  0A  2F  2A  2A  0A  20  2A  20  40  7B  0A  20  2A  0A  20  2A
000000F0  20  40  66  69  6C  65  0A  20  2A  20  40  61  75  74  68  6F
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41858
00000000  72  20  4D  61  72  74  69  6E  65  20  4C  65  6E  64  65  72
00000010  73  20  3C  6D  6C  65  6E  64  65  72  73  40  69  6E  66  2E
00000020  66  75  2D  62  65  72  6C  69  6E  2E  64  65  3E  0A  20  2A
00000030  2F  0A  0A  23  69  6E  63  6C  75  64  65  20  3C  73  74  64
00000040  62  6F  6F  6C  2E  68  3E  0A  0A  23  69  6E  63  6C  75  64
00000050  65  20  22  63  6F  6D  6D  6F  6E  2E  68  22  0A  0A  73  69
00000060  7A  65  5F  74  20  68  65  78  32  69  6E  74  73  28  75  69
00000070  6E  74  38  5F  74  20  2A  6F  75  74  2C  20  63  6F  6E  73
00000080  74  20  63  68  61  72  20  2A  69  6E  29  0A  7B  0A  20  20
00000090  20  20  62  6F  6F  6C  20  75  70  70  65  72  20  3D  20  74
000000A0  72  75  65  3B  0A  20  20  20  20  73  69  7A  65  5F  74  20
000000B0  6F  75  74  5F  73  69  7A  65  20  3D  20  30  3B  0A  0A  20
000000C0  20  20  20  77  68  69  6C  65  20  28  2A  69  6E  20  21  3D
000000D0  20  27  5C  30  27  29  20  7B  0A  20  20  20  20  20  20  20
000000E0  20  63  68  61  72  20  63  3B  0A  20  20  20  20  20  20  20
000000F0  20  69  66  20  28  28  2A  69  6E  20  3E  3D  20  27  30  27
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41858
00000000  72  20  4D  61  72  74  69  6E  65  20  4C  65  6E  64  65  72
00000010  73  20  3C  6D  6C  65  6E  64  65  72  73  40  69  6E  66  2E
00000020  66  75  2D  62  65  72  6C  69  6E  2E  64  65  3E  0A  20  2A
00000030  2F  0A  0A  23  69  6E  63  6C  75  64  65  20  3C  73  74  64
00000040  62  6F  6F  6C  2E  68  3E  0A  0A  23  69  6E  63  6C  75  64
00000050  65  20  22  63  6F  6D  6D  6F  6E  2E  68  22  0A  0A  73  69
00000060  7A  65  5F  74  20  68  65  78  32  69  6E  74  73  28  75  69
00000070  6E  74  38  5F  74  20  2A  6F  75  74  2C  20  63  6F  6E  73
00000080  74  20  63  68  61  72  20  2A  69  6E  29  0A  7B  0A  20  20
00000090  20  20  62  6F  6F  6C  20  75  70  70  65  72  20  3D  20  74
000000A0  72  75  65  3B  0A  20  20  20  20  73  69  7A  65  5F  74  20
000000B0  6F  75  74  5F  73  69  7A  65  20  3D  20  30  3B  0A  0A  20
000000C0  20  20  20  77  68  69  6C  65  20  28  2A  69  6E  20  21  3D
000000D0  20  27  5C  30  27  29  20  7B  0A  20  20  20  20  20  20  20
000000E0  20  63  68  61  72  20  63  3B  0A  20  20  20  20  20  20  20
000000F0  20  69  66  20  28  28  2A  69  6E  20  3E  3D  20  27  30  27
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41858
00000000  72  20  4D  61  72  74  69  6E  65  20  4C  65  6E  64  65  72
00000010  73  20  3C  6D  6C  65  6E  64  65  72  73  40  69  6E  66  2E
00000020  66  75  2D  62  65  72  6C  69  6E  2E  64  65  3E  0A  20  2A
00000030  2F  0A  0A  23  69  6E  63  6C  75  64  65  20  3C  73  74  64
00000040  62  6F  6F  6C  2E  68  3E  0A  0A  23  69  6E  63  6C  75  64
00000050  65  20  22  63  6F  6D  6D  6F  6E  2E  68  22  0A  0A  73  69
00000060  7A  65  5F  74  20  68  65  78  32  69  6E  74  73  28  75  69
00000070  6E  74  38  5F  74  20  2A  6F  75  74  2C  20  63  6F  6E  73
00000080  74  20  63  68  61  72  20  2A  69  6E  29  0A  7B  0A  20  20
00000090  20  20  62  6F  6F  6C  20  75  70  70  65  72  20  3D  20  74
000000A0  72  75  65  3B  0A  20  20  20  20  73  69  7A  65  5F  74  20
000000B0  6F  75  74  5F  73  69  7A  65  20  3D  20  30  3B  0A  0A  20
000000C0  20  20  20  77  68  69  6C  65  20  28  2A  69  6E  20  21  3D
000000D0  20  27  5C  30  27  29  20  7B  0A  20  20  20  20  20  20  20
000000E0  20  63  68  61  72  20  63  3B  0A  20  20  20  20  20  20  20
000000F0  20  69  66  20  28  28  2A  69  6E  20  3E  3D  20  27  30  27
...
```

</details>

With this PR, there is an end to the stream and the incoming data changes

<details>

```
> TCP client [fe80::dc1a:a8ff:fe09:45b3]:41996 connected
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41996
00000000  2F  2A  0A  20  2A  20  43  6F  70  79  72  69  67  68  74  20
00000010  28  43  29  20  46  72  65  69  65  20  55  6E  69  76  65  72
00000020  73  69  74  C3  A4  74  20  42  65  72  6C  69  6E  0A  20  2A
00000030  0A  20  2A  20  54  68  69  73  20  66  69  6C  65  20  69  73
00000040  20  73  75  62  6A  65  63  74  20  74  6F  20  74  68  65  20
00000050  74  65  72  6D  73  20  61  6E  64  20  63  6F  6E  64  69  74
00000060  69  6F  6E  73  20  6F  66  20  74  68  65  20  47  4E  55  20
00000070  4C  65  73  73  65  72  0A  20  2A  20  47  65  6E  65  72  61
00000080  6C  20  50  75  62  6C  69  63  20  4C  69  63  65  6E  73  65
00000090  20  76  32  2E  31  2E  20  53  65  65  20  74  68  65  20  66
000000A0  69  6C  65  20  4C  49  43  45  4E  53  45  20  69  6E  20  74
000000B0  68  65  20  74  6F  70  20  6C  65  76  65  6C  0A  20  2A  20
000000C0  64  69  72  65  63  74  6F  72  79  20  66  6F  72  20  6D  6F
000000D0  72  65  20  64  65  74  61  69  6C  73  2E  0A  20  2A  2F  0A
000000E0  0A  2F  2A  2A  0A  20  2A  20  40  7B  0A  20  2A  0A  20  2A
000000F0  20  40  66  69  6C  65  0A  20  2A  20  40  61  75  74  68  6F
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41996
00000000  72  20  4D  61  72  74  69  6E  65  20  4C  65  6E  64  65  72
00000010  73  20  3C  6D  6C  65  6E  64  65  72  73  40  69  6E  66  2E
00000020  66  75  2D  62  65  72  6C  69  6E  2E  64  65  3E  0A  20  2A
00000030  2F  0A  0A  23  69  6E  63  6C  75  64  65  20  3C  73  74  64
00000040  62  6F  6F  6C  2E  68  3E  0A  0A  23  69  6E  63  6C  75  64
00000050  65  20  22  63  6F  6D  6D  6F  6E  2E  68  22  0A  0A  73  69
00000060  7A  65  5F  74  20  68  65  78  32  69  6E  74  73  28  75  69
00000070  6E  74  38  5F  74  20  2A  6F  75  74  2C  20  63  6F  6E  73
00000080  74  20  63  68  61  72  20  2A  69  6E  29  0A  7B  0A  20  20
00000090  20  20  62  6F  6F  6C  20  75  70  70  65  72  20  3D  20  74
000000A0  72  75  65  3B  0A  20  20  20  20  73  69  7A  65  5F  74  20
000000B0  6F  75  74  5F  73  69  7A  65  20  3D  20  30  3B  0A  0A  20
000000C0  20  20  20  77  68  69  6C  65  20  28  2A  69  6E  20  21  3D
000000D0  20  27  5C  30  27  29  20  7B  0A  20  20  20  20  20  20  20
000000E0  20  63  68  61  72  20  63  3B  0A  20  20  20  20  20  20  20
000000F0  20  69  66  20  28  28  2A  69  6E  20  3E  3D  20  27  30  27
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41996
00000000  29  20  26  26  20  28  2A  69  6E  20  3C  3D  20  27  39  27
00000010  29  29  20  7B  0A  20  20  20
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41996
00000000  20  20  20  20  20  20  20  20  20  63  20  3D  20  27  30  27
00000010  3B  0A  20  20  20  20  20  20  20  20  7D  0A  20  20  20  20
00000020  20  20  20  20  65  6C  73  65  20  69  66  20  28  28  2A  69
00000030  6E  20  3E  3D  20  27  61  27  29  20  26  26  20  28  2A  69
00000040  6E  20  3C  3D  20  27  66  27  29  29  20  7B  0A  20  20  20
00000050  20  20  20  20  20  20  20  20  20  63  20  3D  20  27  61  27
00000060  20  2D  20  31  30  3B  0A  20  20  20  20  20  20  20  20  7D
00000070  0A  20  20  20  20  20  20  20  20  65  6C  73  65  20  69  66
00000080  20  28  28  2A  69  6E  20  3E  3D  20  27  41  27  29  20  26
00000090  26  20  28  2A  69  6E  20  3C  3D  20  27  46  27  29  29  20
000000A0  7B  0A  20  20  20  20  20  20  20  20  20  20  20  20  63  20
000000B0  3D  20  27  41  27  20  2D  20  31  30  3B  0A  20  20  20  20
000000C0  20  20  20  20  7D  0A  20  20  20  20  20  20  20  20  65  6C
000000D0  73  65  20  7B  0A  20  20  20  20  20  20  20  20  20  20  20
000000E0  20  69  6E  2B  2B  3B  0A  20  20  20  20  20  20  20  20  20
000000F0  20  20  20  63  6F  6E  74  69  6E  75  65  3B  0A  20  20  20
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41996
00000000  20  20  20  20  20  7D  0A  20  20  20  20  20  20  20  20  69
00000010  66  20  28  75  70  70  65  72  29  20  7B  0A  20  20  20  20
00000020  20  20  20  20  20  20  20  20  2A  6F  75  74  20  3D  20  28
00000030  63  68  61  72  29  28  2A  69  6E  20  2D  20  63  29  20  3C
00000040  3C  20  34  3B  0A  20  20  20  20  20  20  20  20  7D  0A  20
00000050  20  20  20  20  20  20  20  65  6C  73  65  20  7B  0A  20  20
00000060  20  20  20  20  20  20  20  20  20  20  2A  6F  75  74  20  7C
00000070  3D  20  28  63  68  61  72  29  28  2A  69  6E  20  2D  20  63
00000080  29  3B  0A  20  20  20  20  20  20  20  20  20  20  20  20  6F
00000090  75  74  2B  2B  3B  0A  20  20  20  20  20  20  20  20  20  20
000000A0  20  20  6F  75  74  5F  73  69  7A  65  2B  2B  3B  0A  20  20
000000B0  20  20  20  20  20  20  7D  0A  20  20  20  20  20  20  20  20
000000C0  75  70  70  65  72  20  3D  20  21  75  70  70  65  72  3B  0A
000000D0  20  20  20  20  20  20  20  20  69  6E  2B  2B  3B  0A  20  20
000000E0  20  20  7D  0A  20  20  20  20  69  66  20  28  21  75  70  70
000000F0  65  72  29  20  7B  0A  20  20  20  20  20  20  20  20  6F  75
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41996
00000000  74  5F  73  69  7A  65  2B  2B  3B  0A  20  20  20  20  7D  0A
00000010  20  20  20  20  72  65  74  75
Received TCP data from client [fe80::dc1a:a8ff:fe09:45b3]:41996
00000000  72  6E  20  6F  75  74  5F  73  69  7A  65  3B  0A  7D  0A  0A
00000010  2F  2A  2A  20  40  7D  20  2A  2F  0A
help
help
Command              Description
---------------------------------------
ip                   Send IP packets and listen for packets of certain type
tcp                  Send TCP messages and listen for messages on TCP port
udp                  Send UDP messages and listen for messages on UDP port
reboot               Reboot the node
version              Prints current RIOT_VERSION
pm                   interact with layered PM subsystem
ps                   Prints information about running threads.
random_init          initializes the PRNG
random_get           returns 32 bit of pseudo randomness
ifconfig             List network interfaces
>
```

</details>

Did not check in detail, but the hex data seems to check out:

<details>

```
$ od -tx1 tests/lwip/common.c
0000000 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20
0000020 28 43 29 20 46 72 65 69 65 20 55 6e 69 76 65 72
0000040 73 69 74 c3 a4 74 20 42 65 72 6c 69 6e 0a 20 2a
0000060 0a 20 2a 20 54 68 69 73 20 66 69 6c 65 20 69 73
0000100 20 73 75 62 6a 65 63 74 20 74 6f 20 74 68 65 20
0000120 74 65 72 6d 73 20 61 6e 64 20 63 6f 6e 64 69 74
0000140 69 6f 6e 73 20 6f 66 20 74 68 65 20 47 4e 55 20
0000160 4c 65 73 73 65 72 0a 20 2a 20 47 65 6e 65 72 61
0000200 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65
0000220 20 76 32 2e 31 2e 20 53 65 65 20 74 68 65 20 66
0000240 69 6c 65 20 4c 49 43 45 4e 53 45 20 69 6e 20 74
0000260 68 65 20 74 6f 70 20 6c 65 76 65 6c 0a 20 2a 20
0000300 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 6d 6f
0000320 72 65 20 64 65 74 61 69 6c 73 2e 0a 20 2a 2f 0a
0000340 0a 2f 2a 2a 0a 20 2a 20 40 7b 0a 20 2a 0a 20 2a
0000360 20 40 66 69 6c 65 0a 20 2a 20 40 61 75 74 68 6f
0000400 72 20 4d 61 72 74 69 6e 65 20 4c 65 6e 64 65 72
0000420 73 20 3c 6d 6c 65 6e 64 65 72 73 40 69 6e 66 2e
0000440 66 75 2d 62 65 72 6c 69 6e 2e 64 65 3e 0a 20 2a
0000460 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64
0000500 62 6f 6f 6c 2e 68 3e 0a 0a 23 69 6e 63 6c 75 64
0000520 65 20 22 63 6f 6d 6d 6f 6e 2e 68 22 0a 0a 73 69
0000540 7a 65 5f 74 20 68 65 78 32 69 6e 74 73 28 75 69
0000560 6e 74 38 5f 74 20 2a 6f 75 74 2c 20 63 6f 6e 73
0000600 74 20 63 68 61 72 20 2a 69 6e 29 0a 7b 0a 20 20
0000620 20 20 62 6f 6f 6c 20 75 70 70 65 72 20 3d 20 74
0000640 72 75 65 3b 0a 20 20 20 20 73 69 7a 65 5f 74 20
0000660 6f 75 74 5f 73 69 7a 65 20 3d 20 30 3b 0a 0a 20
0000700 20 20 20 77 68 69 6c 65 20 28 2a 69 6e 20 21 3d
0000720 20 27 5c 30 27 29 20 7b 0a 20 20 20 20 20 20 20
0000740 20 63 68 61 72 20 63 3b 0a 20 20 20 20 20 20 20
0000760 20 69 66 20 28 28 2a 69 6e 20 3e 3d 20 27 30 27
0001000 29 20 26 26 20 28 2a 69 6e 20 3c 3d 20 27 39 27
0001020 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20
0001040 20 63 20 3d 20 27 30 27 3b 0a 20 20 20 20 20 20
0001060 20 20 7d 0a 20 20 20 20 20 20 20 20 65 6c 73 65
0001100 20 69 66 20 28 28 2a 69 6e 20 3e 3d 20 27 61 27
0001120 29 20 26 26 20 28 2a 69 6e 20 3c 3d 20 27 66 27
0001140 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20
0001160 20 63 20 3d 20 27 61 27 20 2d 20 31 30 3b 0a 20
0001200 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20
0001220 20 65 6c 73 65 20 69 66 20 28 28 2a 69 6e 20 3e
0001240 3d 20 27 41 27 29 20 26 26 20 28 2a 69 6e 20 3c
0001260 3d 20 27 46 27 29 29 20 7b 0a 20 20 20 20 20 20
0001300 20 20 20 20 20 20 63 20 3d 20 27 41 27 20 2d 20
0001320 31 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20
0001340 20 20 20 20 20 20 65 6c 73 65 20 7b 0a 20 20 20
0001360 20 20 20 20 20 20 20 20 20 69 6e 2b 2b 3b 0a 20
0001400 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69
0001420 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20
0001440 20 20 20 20 20 20 20 69 66 20 28 75 70 70 65 72
0001460 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20
0001500 2a 6f 75 74 20 3d 20 28 63 68 61 72 29 28 2a 69
0001520 6e 20 2d 20 63 29 20 3c 3c 20 34 3b 0a 20 20 20
0001540 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65
0001560 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20
0001600 20 20 2a 6f 75 74 20 7c 3d 20 28 63 68 61 72 29
0001620 28 2a 69 6e 20 2d 20 63 29 3b 0a 20 20 20 20 20
0001640 20 20 20 20 20 20 20 6f 75 74 2b 2b 3b 0a 20 20
0001660 20 20 20 20 20 20 20 20 20 20 6f 75 74 5f 73 69
0001700 7a 65 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a
0001720 20 20 20 20 20 20 20 20 75 70 70 65 72 20 3d 20
0001740 21 75 70 70 65 72 3b 0a 20 20 20 20 20 20 20 20
0001760 69 6e 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20
0002000 69 66 20 28 21 75 70 70 65 72 29 20 7b 0a 20 20
0002020 20 20 20 20 20 20 6f 75 74 5f 73 69 7a 65 2b 2b
0002040 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75
0002060 72 6e 20 6f 75 74 5f 73 69 7a 65 3b 0a 7d 0a 0a
0002100 2f 2a 2a 20 40 7d 20 2a 2f 0a
0002112
```

</details>

Since this is about a miscalculated offset, I guess the endless read is what you want to fix with this PR (both the original issue and this PR only talk of "a problem" not the specific behavior).

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/RIOT-OS/RIOT/pull/16278#issuecomment-814749277
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.riot-os.org/pipermail/notifications/attachments/20210407/1ca7854f/attachment-0001.htm>


More information about the notifications mailing list