* [net 1/1] tipc: fix memory leak of group member when peer node is lost
@ 2017-12-21 13:36 Jon Maloy
2017-12-26 18:06 ` David Miller
0 siblings, 1 reply; 2+ messages in thread
From: Jon Maloy @ 2017-12-21 13:36 UTC (permalink / raw)
To: davem, netdev
Cc: mohan.krishna.ghanta.krishnamurthy, tung.q.nguyen, hoang.h.le,
jon.maloy, canh.d.luu, ying.xue, tipc-discussion
When a group member receives a member WITHDRAW event, this might have
two reasons: either the peer member is leaving the group, or the link
to the member's node has been lost.
In the latter case we need to issue a DOWN event to the user right away,
and let function tipc_group_filter_msg() perform delete of the member
item. However, in this case we miss to change the state of the member
item to MBR_LEAVING, so the member item is not deleted, and we have a
memory leak.
We now separate better between the four sub-cases of a WITHRAW event
and make sure that each case is handled correctly.
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
---
net/tipc/group.c | 27 ++++++++++++++++++---------
1 file changed, 18 insertions(+), 9 deletions(-)
diff --git a/net/tipc/group.c b/net/tipc/group.c
index e5b03f0..8e12ab5 100644
--- a/net/tipc/group.c
+++ b/net/tipc/group.c
@@ -850,17 +850,26 @@ void tipc_group_member_evt(struct tipc_group *grp,
*usr_wakeup = true;
m->usr_pending = false;
node_up = tipc_node_is_up(net, node);
-
- /* Hold back event if more messages might be expected */
- if (m->state != MBR_LEAVING && node_up) {
- m->event_msg = skb;
- tipc_group_decr_active(grp, m);
- m->state = MBR_LEAVING;
- } else {
- if (node_up)
+ m->event_msg = NULL;
+
+ if (node_up) {
+ /* Hold back event if a LEAVE msg should be expected */
+ if (m->state != MBR_LEAVING) {
+ m->event_msg = skb;
+ tipc_group_decr_active(grp, m);
+ m->state = MBR_LEAVING;
+ } else {
msg_set_grp_bc_seqno(hdr, m->bc_syncpt);
- else
+ __skb_queue_tail(inputq, skb);
+ }
+ } else {
+ if (m->state != MBR_LEAVING) {
+ tipc_group_decr_active(grp, m);
+ m->state = MBR_LEAVING;
msg_set_grp_bc_seqno(hdr, m->bc_rcv_nxt);
+ } else {
+ msg_set_grp_bc_seqno(hdr, m->bc_syncpt);
+ }
__skb_queue_tail(inputq, skb);
}
list_del_init(&m->list);
--
2.1.4
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [net 1/1] tipc: fix memory leak of group member when peer node is lost
2017-12-21 13:36 [net 1/1] tipc: fix memory leak of group member when peer node is lost Jon Maloy
@ 2017-12-26 18:06 ` David Miller
0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2017-12-26 18:06 UTC (permalink / raw)
To: jon.maloy
Cc: netdev, tipc-discussion, hoang.h.le,
mohan.krishna.ghanta.krishnamurthy
From: Jon Maloy <jon.maloy@ericsson.com>
Date: Thu, 21 Dec 2017 14:36:34 +0100
> When a group member receives a member WITHDRAW event, this might have
> two reasons: either the peer member is leaving the group, or the link
> to the member's node has been lost.
>
> In the latter case we need to issue a DOWN event to the user right away,
> and let function tipc_group_filter_msg() perform delete of the member
> item. However, in this case we miss to change the state of the member
> item to MBR_LEAVING, so the member item is not deleted, and we have a
> memory leak.
>
> We now separate better between the four sub-cases of a WITHRAW event
> and make sure that each case is handled correctly.
>
> Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Applied.
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-12-26 18:06 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-21 13:36 [net 1/1] tipc: fix memory leak of group member when peer node is lost Jon Maloy
2017-12-26 18:06 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox