Skip to content

Commit 588becd

Browse files
committed
Ensure CB_EVENT_READABLE is cleared upon oversized ICMP
1 parent dde616d commit 588becd

2 files changed

Lines changed: 4 additions & 0 deletions

File tree

src/test/unit/unit_tests_proto.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3770,10 +3770,12 @@ START_TEST(test_regression_icmp_payload_exceeds_buffer_discards_and_unblocks)
37703770
ret = fifo_push(&ts->sock.udp.rxbuf, icmp,
37713771
sizeof(struct wolfIP_icmp_packet) + 32);
37723772
ck_assert_int_eq(ret, 0);
3773+
ts->events |= CB_EVENT_READABLE;
37733774

37743775
ret = wolfIP_sock_recvfrom(&s, sd, rxbuf, sizeof(rxbuf), 0, NULL, NULL);
37753776
ck_assert_int_eq(ret, -1);
37763777
ck_assert_ptr_eq(fifo_peek(&ts->sock.udp.rxbuf), NULL);
3778+
ck_assert_uint_eq(ts->events & CB_EVENT_READABLE, 0U);
37773779

37783780
ret = wolfIP_sock_recvfrom(&s, sd, rxbuf, sizeof(rxbuf), 0, NULL, NULL);
37793781
ck_assert_int_eq(ret, -WOLFIP_EAGAIN);

src/wolfip.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4645,6 +4645,8 @@ int wolfIP_sock_recvfrom(struct wolfIP *s, int sockfd, void *buf, size_t len, in
46454645
seg_len = ee16(icmp->ip.len) - IP_HEADER_LEN;
46464646
if (seg_len > len) {
46474647
fifo_pop(&ts->sock.udp.rxbuf);
4648+
if (fifo_peek(&ts->sock.udp.rxbuf) == NULL)
4649+
ts->events &= ~CB_EVENT_READABLE;
46484650
return -1;
46494651
}
46504652
if (sin) {

0 commit comments

Comments
 (0)