From b7f0a3abfaeb83ade54c509e8be7a5629853f217 Mon Sep 17 00:00:00 2001 From: ke hu <ke.hu@iopsys.eu> Date: Tue, 24 Mar 2020 13:50:39 +0100 Subject: [PATCH] mcast-pa : replace list to safe list --- mcast-pa/src/mcast-pa.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mcast-pa/src/mcast-pa.c b/mcast-pa/src/mcast-pa.c index 2c1a391..2453bde 100644 --- a/mcast-pa/src/mcast-pa.c +++ b/mcast-pa/src/mcast-pa.c @@ -702,6 +702,11 @@ static int is_zero_mac(uint8_t *mac) int mcg_br_entry_equal(struct br_mdb_entry *ex, struct br_mdb_entry *ey) { + if(ex == NULL || ey == NULL) + { + syslog(LOG_NOTICE,"mcast-pa: equal is empty"); + return 0; + } if (ex->ifindex == ey->ifindex) { if (ex->addr.u.ip4 == ey->addr.u.ip4) { if (memcmp(&ex->src_addr.eth_addr, &ey->src_addr.eth_addr, ETH_ALEN) == 0) { @@ -1035,6 +1040,7 @@ mcg_br_entry_leave(struct mcg_br_mdb_entry_t *head, struct br_mdb_entry *e) { SPRINT_BUF(group); struct list_head *pos; + struct list_head *tmp; struct mcg_br_mdb_entry_t *mcge; int len = 0; char src[INET_ADDR_SIZE]; /**< ip address of video source - head use only */ @@ -1044,6 +1050,7 @@ mcg_br_entry_leave(struct mcg_br_mdb_entry_t *head, struct br_mdb_entry *e) if (!mcastpa.params.bridged) { if (mcastpa.params.use_src == 0) { if (head->src[0] == 0) { + syslog(LOG_NOTICE,"mcast-pa:leave no video src"); return (-ENOENT); /* not ready to join - no video src */ } strcpy(src, head->src); @@ -1061,14 +1068,14 @@ mcg_br_entry_leave(struct mcg_br_mdb_entry_t *head, struct br_mdb_entry *e) mjl.flags |= MJL_FLAG_SRCIP; sprintf((char *) &mjl.srcip, "%s", src); sprintf((char *) &mjl.wan, "%s", mcast_wan_entry_default()); - list_for_each(pos, &head->mcg_entry) { + list_for_each_safe(pos,tmp, &head->mcg_entry) { mjl.flags |= MJL_FLAG_LAN; mcge = (struct mcg_br_mdb_entry_t *) list_entry(pos, struct mcg_br_mdb_entry_t, mcg_entry); if (!mcg_br_entry_equal(e, &mcge->e)) { len += sprintf((char *) (mjl.lan + len), " %s ", (char *) ll_index_to_name(mcge->e.ifindex)); } } - list_for_each(pos, &head->mcg_entry) { + list_for_each_safe(pos,tmp, &head->mcg_entry) { mcge = (struct mcg_br_mdb_entry_t *) list_entry(pos, struct mcg_br_mdb_entry_t, mcg_entry); mcg_br_entry_srcmac_set(mcge, &mjl); if (e != NULL) { -- GitLab