From 0e6cbc62b23f5035dcd3a958bc00509441936adb Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Fri, 25 Feb 2011 19:42:51 +0100 Subject: [PATCH] sctp: Fail if we fail to enable SCTP events on this socket Without events we don't have access to the SCTP sndrcvinfo and the ppid in it and we will do bad things like sending M2UA on PPID 0. --- src/sctp_m2ua.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/sctp_m2ua.c b/src/sctp_m2ua.c index d0609dd..9ffcebc 100644 --- a/src/sctp_m2ua.c +++ b/src/sctp_m2ua.c @@ -632,7 +632,7 @@ static int sctp_trans_accept(struct bsc_fd *fd, unsigned int what) struct sctp_m2ua_conn *conn; struct sockaddr_in addr; socklen_t len; - int s; + int s, ret; len = sizeof(addr); s = accept(fd->fd, (struct sockaddr *) &addr, &len); @@ -648,6 +648,15 @@ static int sctp_trans_accept(struct bsc_fd *fd, unsigned int what) return -1; } + memset(&events, 0, sizeof(events)); + events.sctp_data_io_event = 1; + ret = setsockopt(s, SOL_SCTP, SCTP_EVENTS, &events, sizeof(events)); + if (ret != 0) { + LOGP(DINP, LOGL_ERROR, "Failed to enable SCTP Events. Closing socket.\n"); + close(s); + return -1; + } + LOGP(DINP, LOGL_NOTICE, "Got a new SCTP connection.\n"); conn = talloc_zero(fd->data, struct sctp_m2ua_conn); if (!conn) { @@ -672,10 +681,6 @@ static int sctp_trans_accept(struct bsc_fd *fd, unsigned int what) return -1; } - memset(&events, 0, sizeof(events)); - events.sctp_data_io_event = 1; - setsockopt(s, SOL_SCTP, SCTP_EVENTS, &events, sizeof(events)); - llist_add_tail(&conn->entry, &trans->conns); return 0; }