Compare commits

...

5 Commits

Author SHA1 Message Date
Holger Hans Peter Freyther
9d53a8ad2a Release 0.3.3 with the proposed BFD fix. 2010-03-24 04:14:26 +01:00
Holger Hans Peter Freyther
058956e8ee ipaccess: Handle the case of replacing RSL connections
Fix a infinite loop when establishing a new RSL connection and the
BSC is identifying itself with a unit id of an already established
RSL connection. The infinite loops happens because we are corrupting
the the linuxlist inside the bsc_fd when registering the bfd twice.

Due the lack of proper authentication favor the new RSL connection
as the real one and close the previous one.
2010-03-24 04:02:55 +01:00
Holger Hans Peter Freyther
a34bb9167f Bump version to 0.3.2 with the two memleak fixes. 2010-02-21 13:08:19 +01:00
Holger Hans Peter Freyther
b8ac7ffd7c [msc/nat] It is better to use msgb_free to free the msgb
msgb_free is currently calling talloc_free but this might
change in the future and then this code would break..
2010-02-21 13:08:12 +01:00
Holger Hans Peter Freyther
b13cf829da [nat/bsc] Fix memory leak of IPA messages...
* The read_msg method is allocating the msgb and we will
  need to free it once we are done with it.
2010-02-21 12:56:02 +01:00
4 changed files with 11 additions and 1 deletions

View File

@@ -1,7 +1,7 @@
dnl Process this file with autoconf to produce a configure script
AC_INIT
AM_INIT_AUTOMAKE(openbsc, 0.3.1onwaves)
AM_INIT_AUTOMAKE(openbsc, 0.3.3onwaves)
dnl kernel style compile messages
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])

View File

@@ -641,6 +641,7 @@ static int ipaccess_a_fd_cb(struct bsc_fd *bfd, unsigned int what)
else if (hh->proto == IPAC_PROTO_SCCP)
sccp_system_incoming(msg);
msgb_free(msg);
return 0;
}

View File

@@ -242,6 +242,13 @@ static int ipaccess_rcvmsg(struct e1inp_line *line, struct msgb *msg,
trx->rsl_link = e1inp_sign_link_create(e1i_ts,
E1INP_SIGN_RSL, trx,
trx->rsl_tei, 0);
if (newbfd->fd >= 0) {
LOGP(DINP, LOGL_ERROR, "BTS is still registered. Closing old connection.\n");
bsc_unregister_fd(newbfd);
close(newbfd->fd);
}
/* get rid of our old temporary bfd */
memcpy(newbfd, bfd, sizeof(*newbfd));
newbfd->priv_nr = 2+trx_id;

View File

@@ -148,6 +148,7 @@ static int ipaccess_msc_cb(struct bsc_fd *bfd, unsigned int what)
else if (hh->proto == IPAC_PROTO_SCCP)
forward_sccp_to_bts(msg);
msgb_free(msg);
return 0;
}
@@ -203,6 +204,7 @@ static int ipaccess_bsc_cb(struct bsc_fd *bfd, unsigned int what)
/* FIXME: Currently no PONG is sent to the BSC */
/* FIXME: Currently no ID ACK is sent to the BSC */
forward_sccp_to_msc(msg);
msgb_free(msg);
return 0;
}