From a6a92d42f99de4fc19f74606a920bd33b7235fc0 Mon Sep 17 00:00:00 2001 From: sg Date: Thu, 26 Feb 2015 21:23:40 +0100 Subject: [PATCH] Fixed bug #41700 (Call to tcp_listen_dual() should not accept IPv4 listen PCB args) --- src/core/tcp.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/core/tcp.c b/src/core/tcp.c index 2bcf2dc4..3cbde688 100644 --- a/src/core/tcp.c +++ b/src/core/tcp.c @@ -591,6 +591,21 @@ struct tcp_pcb * tcp_listen_dual_with_backlog(struct tcp_pcb *pcb, u8_t backlog) { struct tcp_pcb *lpcb; + struct tcp_pcb_listen *l; + + /* Dual listen only works on bound pcbs (or else we cannot check for + duplicate port use. */ + if (pcb->local_port == 0) { + return NULL; + } + /* Check that there's noone listening on this port already + (don't check the IP address since we'll set it to ANY */ + for(l = tcp_listen_pcbs.listen_pcbs; l != NULL; l = l->next) { + if (l->local_port == pcb->local_port) { + /* this port is already used */ + return NULL; + } + } lpcb = tcp_listen_with_backlog(pcb, backlog); if ((lpcb != NULL) &&