From e982b1357054e0551dfaab52a0ba40358728a719 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Wed, 13 Jan 2016 18:38:54 +0000 Subject: [PATCH] net_at: Loopback doesn't work on this interface --- Kernel/dev/net/net_at.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Kernel/dev/net/net_at.c b/Kernel/dev/net/net_at.c index 88440581..aa218d11 100644 --- a/Kernel/dev/net/net_at.c +++ b/Kernel/dev/net/net_at.c @@ -94,6 +94,10 @@ void netat_event(void) int net_init(struct socket *s) { + if (s != &sockets[0]) { + udata.u_error = ENOMEM; + return -1; + } if (s->s_type != SOCKTYPE_TCP) { udata.u_error = EPFNOSUPPORT; return -1; @@ -120,7 +124,16 @@ int net_connect(struct socket *s) uint32_t n = s->s_addr[SADDR_DST].addr; uint16_t p = s->s_addr[SADDR_DST].port; + if (IN_LOOPBACK(n) || IN_LOOPBACK(s->s_addr[SADDR_SRC].addr)) { + udata.u_error = ECONNRESET; + s->s_state = SS_CLOSED; + return -1; + } + netat_wake(); + + n = ntohl(n); + /* Pity drivewire won't talk addresses and ports as a hex block ! */ netat_write("ATD ", 4); netat_write_u8ch(n >> 24, '.'); -- 2.34.1