diff options
author | Peter Stuge <peter@stuge.se> | 2011-08-11 04:37:17 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2011-08-11 17:21:24 +0200 |
commit | 46f799b224744979294e5f94f225bb1a720e5063 (patch) | |
tree | 71009a723e180669b00096b4154d42b6c9a57429 | |
parent | e8bd9e885dc50f671d2c4af4267b56c84bf7bb6d (diff) |
MNCC: Never send zero-length msgb packets to the socket
This will cause the remote end to read 0 bytes, which is interpreted as
if we cleanly closed the socket, making the remote end close their side
of the socket, which would lead to us closing our side of the socket,
so we should never send such a packet.
-rw-r--r-- | openbsc/src/libmsc/mncc_sock.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/openbsc/src/libmsc/mncc_sock.c b/openbsc/src/libmsc/mncc_sock.c index 5ef9922d2..d8caf0754 100644 --- a/openbsc/src/libmsc/mncc_sock.c +++ b/openbsc/src/libmsc/mncc_sock.c @@ -165,6 +165,13 @@ static int mncc_sock_write(struct osmo_fd *bfd) bfd->when &= ~BSC_FD_WRITE; + /* bug hunter 8-): maybe someone forgot msgb_put(...) ? */ + if (!msgb_length(msg)) { + LOGP(DMNCC, LOGL_ERROR, "message type (%d) with ZERO " + "bytes!\n", mncc_prim->msg_type); + goto dontsend; + } + /* try to send it over the socket */ rc = write(bfd->fd, msgb_data(msg), msgb_length(msg)); if (rc == 0) @@ -176,6 +183,8 @@ static int mncc_sock_write(struct osmo_fd *bfd) } goto close; } + +dontsend: /* _after_ we send it, we can deueue */ msg2 = msgb_dequeue(&net->upqueue); assert(msg == msg2); |