nat/bsc: Check proto before calling ipaccess_rcvmsg_base
The code in the BSC/NAT called ipaccess_rcvmsg_base without checking if the protocol is IPA. This lead the BSC to respond to SCCP messages with an "ID ACK". From a quick look neither the code of ipaccess_rcvmsg_base in OpenBSC nor the copy of libosmo-abis ever checked the protocol header. So this code has been wrong since initially being created in 2010.
This commit is contained in:
parent
3c9068f185
commit
abddd6aa44
|
@ -30,7 +30,6 @@ struct ipac_ext_lac_cmd {
|
|||
/*
|
||||
* methods for parsing and sending a message
|
||||
*/
|
||||
int ipaccess_rcvmsg_base(struct msgb *msg, struct osmo_fd *bfd);
|
||||
void ipaccess_prepend_header(struct msgb *msg, int proto);
|
||||
void ipaccess_prepend_header_ext(struct msgb *msg, int proto);
|
||||
int ipaccess_send_pong(int fd);
|
||||
|
|
|
@ -270,11 +270,11 @@ static int ipaccess_a_fd_cb(struct osmo_fd *bfd)
|
|||
|
||||
/* handle base message handling */
|
||||
hh = (struct ipaccess_head *) msg->data;
|
||||
ipaccess_rcvmsg_base(msg, bfd);
|
||||
|
||||
/* initialize the networking. This includes sending a GSM08.08 message */
|
||||
msg->cb[0] = (unsigned long) data;
|
||||
if (hh->proto == IPAC_PROTO_IPACCESS) {
|
||||
ipaccess_rcvmsg_base(msg, bfd);
|
||||
if (msg->l2h[0] == IPAC_MSGT_ID_ACK)
|
||||
initialize_if_needed(data->msc_con);
|
||||
else if (msg->l2h[0] == IPAC_MSGT_ID_GET) {
|
||||
|
|
|
@ -825,10 +825,10 @@ static int ipaccess_msc_read_cb(struct osmo_fd *bfd)
|
|||
|
||||
/* handle base message handling */
|
||||
hh = (struct ipaccess_head *) msg->data;
|
||||
ipaccess_rcvmsg_base(msg, bfd);
|
||||
|
||||
/* initialize the networking. This includes sending a GSM08.08 message */
|
||||
if (hh->proto == IPAC_PROTO_IPACCESS) {
|
||||
ipaccess_rcvmsg_base(msg, bfd);
|
||||
if (msg->l2h[0] == IPAC_MSGT_ID_ACK)
|
||||
initialize_msc_if_needed(msc_con);
|
||||
else if (msg->l2h[0] == IPAC_MSGT_ID_GET)
|
||||
|
|
Loading…
Reference in New Issue