SUNRPC: Avoid deep recursion in rpc_release_client
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 12 Nov 2013 22:24:36 +0000 (17:24 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 12 Nov 2013 23:56:57 +0000 (18:56 -0500)
commitd07ba8422f1e58be94cc98a1f475946dc1b89f1b
treee83c021ca30a8625b7a4af139c2d7bf16bbfa348
parenta6b31d18b02ff9d7915c5898c9b5ca41a798cd73
SUNRPC: Avoid deep recursion in rpc_release_client

In cases where an rpc client has a parent hierarchy, then
rpc_free_client may end up calling rpc_release_client() on the
parent, thus recursing back into rpc_free_client. If the hierarchy
is deep enough, then we can get into situations where the stack
simply overflows.

The fix is to have rpc_release_client() loop so that it can take
care of the parent rpc client hierarchy without needing to
recurse.

Reported-by: Jeff Layton <jlayton@redhat.com>
Reported-by: Weston Andros Adamson <dros@netapp.com>
Reported-by: Bruce Fields <bfields@fieldses.org>
Link: http://lkml.kernel.org/r/2C73011F-0939-434C-9E4D-13A1EB1403D7@netapp.com
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
net/sunrpc/clnt.c