1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-28 16:01:18 +01:00

gnrc_sock_[udp|ip]: store return value before release

sock_[udp|ip]_recv returns `pkt->size` after pkt was released via `gnrc_pktbuf_release(pkt)`.
This can result in wrong values returned by this functions and thus is not according to its sepecification.

Storing this values before releasing pkt returning the stored values should fix this.
This commit is contained in:
Robin 2018-11-12 12:50:05 +01:00
parent 98f42eeea8
commit e9047063ca
2 changed files with 4 additions and 2 deletions

View File

@ -120,8 +120,9 @@ ssize_t sock_ip_recv(sock_ip_t *sock, void *data, size_t max_len,
return -EPROTO;
}
memcpy(data, pkt->data, pkt->size);
res = (int)pkt->size;
gnrc_pktbuf_release(pkt);
return (int)pkt->size;
return res;
}
ssize_t sock_ip_send(sock_ip_t *sock, const void *data, size_t len,

View File

@ -215,8 +215,9 @@ ssize_t sock_udp_recv(sock_udp_t *sock, void *data, size_t max_len,
return -EPROTO;
}
memcpy(data, pkt->data, pkt->size);
res = (int)pkt->size;
gnrc_pktbuf_release(pkt);
return (int)pkt->size;
return res;
}
ssize_t sock_udp_send(sock_udp_t *sock, const void *data, size_t len,