From 0693997b778d1f3c328f0ad0d6ab8b1ad3be6b72 Mon Sep 17 00:00:00 2001 From: Amar Tumballi Date: Fri, 17 Sep 2010 22:52:11 +0000 Subject: server-resolve: check for variables before dereferencing Signed-off-by: Amar Tumballi Signed-off-by: Vijay Bellur BUG: 1628 (glusterfs crash) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1628 --- xlators/protocol/server/src/server-resolve.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'xlators') diff --git a/xlators/protocol/server/src/server-resolve.c b/xlators/protocol/server/src/server-resolve.c index 8489bc4142d..8a390689f10 100644 --- a/xlators/protocol/server/src/server-resolve.c +++ b/xlators/protocol/server/src/server-resolve.c @@ -215,10 +215,12 @@ resolve_deep_cbk (call_frame_t *frame, void *cookie, xlator_t *this, resolve->deep_loc.inode = inode_new (state->itable); resolve->deep_loc.name = components[i].basename; - STACK_WIND_COOKIE (frame, resolve_deep_cbk, (void *) (long) i, - BOUND_XL (frame), BOUND_XL (frame)->fops->lookup, - &resolve->deep_loc, NULL); - return 0; + if (frame && frame->root->state && BOUND_XL (frame)) { + STACK_WIND_COOKIE (frame, resolve_deep_cbk, (void *) (long) i, + BOUND_XL (frame), BOUND_XL (frame)->fops->lookup, + &resolve->deep_loc, NULL); + return 0; + } get_out_of_here: resolve_deep_continue (frame); @@ -247,9 +249,14 @@ resolve_path_deep (call_frame_t *frame) resolve->deep_loc.path = gf_strdup ("/"); resolve->deep_loc.name = ""; - STACK_WIND_COOKIE (frame, resolve_deep_cbk, (void *) (long) i, - BOUND_XL (frame), BOUND_XL (frame)->fops->lookup, - &resolve->deep_loc, NULL); + if (frame && frame->root->state && BOUND_XL (frame)) { + STACK_WIND_COOKIE (frame, resolve_deep_cbk, (void *) (long) i, + BOUND_XL (frame), BOUND_XL (frame)->fops->lookup, + &resolve->deep_loc, NULL); + return 0; + } + + resolve_deep_continue (frame); return 0; } -- cgit