net: ipc_router: Fix remote port conn_info memory leak
conn_info is used to connect the local port with destination port address and is freed only for remote server cleanup in SSR case which leads memory leak for other remote ports which valid conn_info. Free the conn_info structure for all remote ports during the SSR and while handling remove client message. CRs-Fixed: 1057219 Change-Id: I164a9eb308f5779d545766b18bb41184c49bbb3d Signed-off-by: Arun Kumar Neelakantam <aneela@codeaurora.org>
This commit is contained in:
parent
e97b6a0e02
commit
eb1c2c4105
1 changed files with 9 additions and 8 deletions
|
@ -2176,7 +2176,6 @@ static void cleanup_rmt_server(struct msm_ipc_router_xprt_info *xprt_info,
|
|||
{
|
||||
union rr_control_msg ctl;
|
||||
|
||||
ipc_router_reset_conn(rport_ptr);
|
||||
memset(&ctl, 0, sizeof(ctl));
|
||||
ctl.cmd = IPC_ROUTER_CTRL_CMD_REMOVE_SERVER;
|
||||
ctl.srv.service = server->name.service;
|
||||
|
@ -2207,6 +2206,7 @@ static void cleanup_rmt_ports(struct msm_ipc_router_xprt_info *xprt_info,
|
|||
server = rport_ptr->server;
|
||||
rport_ptr->server = NULL;
|
||||
mutex_unlock(&rport_ptr->rport_lock_lhb2);
|
||||
ipc_router_reset_conn(rport_ptr);
|
||||
if (server) {
|
||||
cleanup_rmt_server(xprt_info, rport_ptr,
|
||||
server);
|
||||
|
@ -2361,13 +2361,13 @@ static void ipc_router_reset_conn(struct msm_ipc_router_remote_port *rport_ptr)
|
|||
list_for_each_entry_safe(conn_info, tmp_conn_info,
|
||||
&rport_ptr->conn_info_list, list) {
|
||||
port_ptr = ipc_router_get_port_ref(conn_info->port_id);
|
||||
if (!port_ptr)
|
||||
continue;
|
||||
mutex_lock(&port_ptr->port_lock_lhc3);
|
||||
port_ptr->conn_status = CONNECTION_RESET;
|
||||
mutex_unlock(&port_ptr->port_lock_lhc3);
|
||||
wake_up(&port_ptr->port_rx_wait_q);
|
||||
kref_put(&port_ptr->ref, ipc_router_release_port);
|
||||
if (port_ptr) {
|
||||
mutex_lock(&port_ptr->port_lock_lhc3);
|
||||
port_ptr->conn_status = CONNECTION_RESET;
|
||||
mutex_unlock(&port_ptr->port_lock_lhc3);
|
||||
wake_up(&port_ptr->port_rx_wait_q);
|
||||
kref_put(&port_ptr->ref, ipc_router_release_port);
|
||||
}
|
||||
|
||||
list_del(&conn_info->list);
|
||||
kfree(conn_info);
|
||||
|
@ -2651,6 +2651,7 @@ static int process_rmv_client_msg(struct msm_ipc_router_xprt_info *xprt_info,
|
|||
server = rport_ptr->server;
|
||||
rport_ptr->server = NULL;
|
||||
mutex_unlock(&rport_ptr->rport_lock_lhb2);
|
||||
ipc_router_reset_conn(rport_ptr);
|
||||
down_write(&server_list_lock_lha2);
|
||||
if (server)
|
||||
cleanup_rmt_server(NULL, rport_ptr, server);
|
||||
|
|
Loading…
Add table
Reference in a new issue