diff --git a/CHANGELOG b/CHANGELOG index 68ef8e6a..5696dda1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -41,6 +41,9 @@ HISTORY ++ Bugfixes: + 2010-01-10: Simon Goldschmidt + * raw.c: Fixed bug #28506 (raw_bind should filter received packets) + 2010-01-10: Simon Goldschmidt * tcp.h/.c: bug #28127 (remove call to tcp_output() from tcp_ack(_now)()) diff --git a/src/core/raw.c b/src/core/raw.c index 2f105fe6..0a4d11cf 100644 --- a/src/core/raw.c +++ b/src/core/raw.c @@ -92,7 +92,9 @@ raw_input(struct pbuf *p, struct netif *inp) /* loop through all raw pcbs until the packet is eaten by one */ /* this allows multiple pcbs to match against the packet by design */ while ((eaten == 0) && (pcb != NULL)) { - if (pcb->protocol == proto) { + if ((pcb->protocol == proto) && + (ip_addr_isany(&pcb->local_ip)) || + ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest))) { #if IP_SOF_BROADCAST_RECV /* broadcast filter? */ if ((pcb->so_options & SOF_BROADCAST) || !ip_addr_isbroadcast(&(iphdr->dest), inp))