51 lines
1.6 KiB
Diff
51 lines
1.6 KiB
Diff
From dc08c045b46bdd9a5c81068a89f9f2a78d3d4bbd Mon Sep 17 00:00:00 2001
|
|
From: Antonio Quartulli <antonio@meshcoding.com>
|
|
Date: Tue, 28 Jan 2014 02:06:47 +0100
|
|
Subject: [PATCH 5/5] 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 <russell@personaltelco.net>
|
|
Reported-by: Daniel <daniel@makrotopia.org>
|
|
Reported-by: cmsv <cmsv@wirelesspt.net>
|
|
Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|
|
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
|
|
---
|
|
translation-table.c | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/translation-table.c b/translation-table.c
|
|
index 45b6155..05c2a9b 100644
|
|
--- a/translation-table.c
|
|
+++ b/translation-table.c
|
|
@@ -2248,6 +2248,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 */
|
|
@@ -2267,7 +2268,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;
|
|
}
|
|
|
|
--
|
|
1.8.5.3
|
|
|