From: Antonio Quartulli Date: Tue, 28 Jan 2014 01:06:47 +0000 (+0100) Subject: batman-adv: release vlan object after checking the CRC X-Git-Tag: v3.14-rc4~30^2~7^2~7 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=91c2b1a9f680ff105369d49abc7e19ca7efb33e1;p=~emulex%2Finfiniband.git batman-adv: release vlan object after checking the CRC There is a refcounter unbalance in the CRC checking routine invoked on OGM reception. A vlan object is retrieved (thus its refcounter is increased by one) but it is never properly released. This leads to a memleak because the vlan object will never be free'd. Fix this by releasing the vlan object after having read the CRC. Reported-by: Russell Senior Reported-by: Daniel Reported-by: cmsv Signed-off-by: Antonio Quartulli Signed-off-by: Marek Lindner --- diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c index beba13fbd10..c21c5572c86 100644 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c @@ -2262,6 +2262,7 @@ static bool batadv_tt_global_check_crc(struct batadv_orig_node *orig_node, { struct batadv_tvlv_tt_vlan_data *tt_vlan_tmp; struct batadv_orig_node_vlan *vlan; + uint32_t crc; int i; /* check if each received CRC matches the locally stored one */ @@ -2281,7 +2282,10 @@ static bool batadv_tt_global_check_crc(struct batadv_orig_node *orig_node, if (!vlan) return false; - if (vlan->tt.crc != ntohl(tt_vlan_tmp->crc)) + crc = vlan->tt.crc; + batadv_orig_node_vlan_free_ref(vlan); + + if (crc != ntohl(tt_vlan_tmp->crc)) return false; }