[riot-commits] [RIOT-OS/RIOT] afddb4: lwip_sock: Fix computation of last_offset on parti...

Martine Lenders noreply at github.com
Wed Apr 7 13:07:02 CEST 2021


  Branch: refs/heads/master
  Home:   https://github.com/RIOT-OS/RIOT
  Commit: afddb46c510ce000ddaa758f2979b62dfb5d22e6
      https://github.com/RIOT-OS/RIOT/commit/afddb46c510ce000ddaa758f2979b62dfb5d22e6
  Author: iosabi <iosabi at protonmail.com>
  Date:   2021-04-04 (Sun, 04 Apr 2021)

  Changed paths:
    M pkg/lwip/contrib/sock/tcp/lwip_sock_tcp.c

  Log Message:
  -----------
  lwip_sock: Fix computation of last_offset on partial reads.

lwip receives network buffers that are made available to lwip_sock_tcp
calling `netconn_recv_tcp_pbuf`. The size of these buffers depends on
the size of the network packets. An application calling `sock_tcp_read`
can pass any arbitrary buffer size to read (copy) from these internal
network buffers, which may be smaller. lwip_sock_tcp keeps around the
last network buffer (`struct pbuf last_buf`) and the offset into this
buffer already consumed by the application (`last_offset`).

However, when multiple application reads from the same `pbuf` buffer
occur, the `last_offset` must be updated incrementing it. The code had
a bug that would work only when `last_offset` was either 0 (no previous
partial read) or when the current read was consuming all the remaining
data (when `buf_len == copylen`).

This patch fixes the issue an allows multiple reads from the same
buffer.


  Commit: a433cb9fbe5a0f6fa8a765eb9bd0d490c012bf14
      https://github.com/RIOT-OS/RIOT/commit/a433cb9fbe5a0f6fa8a765eb9bd0d490c012bf14
  Author: Martine Lenders <m.lenders at fu-berlin.de>
  Date:   2021-04-07 (Wed, 07 Apr 2021)

  Changed paths:
    M pkg/lwip/contrib/sock/tcp/lwip_sock_tcp.c

  Log Message:
  -----------
  Merge pull request #16278 from iosabi/lwip_sock_tcp

lwip_sock: Fix computation of last_offset on partial reads.


Compare: https://github.com/RIOT-OS/RIOT/compare/ac774f34042f...a433cb9fbe5a


More information about the commits mailing list