From: Ilya Dryomov Date: Fri, 16 Sep 2016 13:20:42 +0000 (+0200) Subject: rbd: don't crash or leak on errors in rbd_img_obj_parent_read_full_callback() X-Git-Tag: v4.9-rc1~55^2~17 X-Git-Url: http://git.cascardo.info/?p=cascardo%2Flinux.git;a=commitdiff_plain;h=fa355112c2763d513f1356119684dc8a6150d08a rbd: don't crash or leak on errors in rbd_img_obj_parent_read_full_callback() - fix parent_length == img_request->xferred assert to not fire on copyup read failures - don't leak pages if copyup read fails or we can't allocate a new osd request Signed-off-by: Ilya Dryomov Reviewed-by: Alex Elder Reviewed-by: David Disseldorp --- diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 6db12d9a4291..77675ac8fc4c 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -2674,7 +2674,7 @@ rbd_img_obj_parent_read_full_callback(struct rbd_img_request *img_request) rbd_assert(obj_request_type_valid(orig_request->type)); img_result = img_request->result; parent_length = img_request->length; - rbd_assert(parent_length == img_request->xferred); + rbd_assert(img_result || parent_length == img_request->xferred); rbd_img_request_put(img_request); rbd_assert(orig_request->img_request); @@ -2727,6 +2727,7 @@ rbd_img_obj_parent_read_full_callback(struct rbd_img_request *img_request) return; out_err: + ceph_release_page_vector(pages, page_count); orig_request->result = img_result; orig_request->xferred = 0; rbd_img_request_get(orig_request->img_request);