diff --git a/net/ipc_router/ipc_router_socket.c b/net/ipc_router/ipc_router_socket.c
index 9dbbe618dc200fb5042b8e9ddffe011f5fd31311..ea46fd58c65b51fe98524616497a4a362147dbc2 100644
--- a/net/ipc_router/ipc_router_socket.c
+++ b/net/ipc_router/ipc_router_socket.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014, 2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -519,13 +519,18 @@ static int msm_ipc_router_ioctl(struct socket *sock,
ret = copy_to_user((void *)arg, &server_arg,
sizeof(server_arg));
- if (srv_info_sz) {
+
+ n = min(server_arg.num_entries_found,
+ server_arg.num_entries_in_array);
+
+ if (ret == 0 && n) {
ret = copy_to_user((void *)(arg + sizeof(server_arg)),
- srv_info, srv_info_sz);
- if (ret)
- ret = -EFAULT;
- kfree(srv_info);
+ srv_info, n * sizeof(*srv_info));
}
+
+ if (ret)
+ ret = -EFAULT;
+ kfree(srv_info);
break;
case IPC_ROUTER_IOCTL_BIND_CONTROL_PORT: