lkml.org 
[lkml]   [2014]   [Jan]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 106/129] libceph: fix error handling in handle_reply()
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Dan Carpenter <dan.carpenter@oracle.com>

    commit 1874119664dafda3ef2ed9b51b4759a9540d4a1a upstream.

    We've tried to fix the error paths in this function before, but there
    is still a hidden goto in the ceph_decode_need() macro which goes to the
    wrong place. We need to release the "req" and unlock a mutex before
    returning.

    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Reviewed-by: Sage Weil <sage@inktank.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    net/ceph/osd_client.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/net/ceph/osd_client.c
    +++ b/net/ceph/osd_client.c
    @@ -1488,14 +1488,14 @@ static void handle_reply(struct ceph_osd
    dout("handle_reply %p tid %llu req %p result %d\n", msg, tid,
    req, result);

    - ceph_decode_need(&p, end, 4, bad);
    + ceph_decode_need(&p, end, 4, bad_put);
    numops = ceph_decode_32(&p);
    if (numops > CEPH_OSD_MAX_OP)
    goto bad_put;
    if (numops != req->r_num_ops)
    goto bad_put;
    payload_len = 0;
    - ceph_decode_need(&p, end, numops * sizeof(struct ceph_osd_op), bad);
    + ceph_decode_need(&p, end, numops * sizeof(struct ceph_osd_op), bad_put);
    for (i = 0; i < numops; i++) {
    struct ceph_osd_op *op = p;
    int len;
    @@ -1513,7 +1513,7 @@ static void handle_reply(struct ceph_osd
    goto bad_put;
    }

    - ceph_decode_need(&p, end, 4 + numops * 4, bad);
    + ceph_decode_need(&p, end, 4 + numops * 4, bad_put);
    retry_attempt = ceph_decode_32(&p);
    for (i = 0; i < numops; i++)
    req->r_reply_op_result[i] = ceph_decode_32(&p);



    \
     
     \ /
      Last update: 2014-01-07 03:41    [W:4.562 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site