lkml.org 
[lkml]   [2006]   [Sep]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    SubjectRe: [PATCH]: Fix ALIGN() macro
    From
    On Sat, Sep 23, 2006 at 04:36:33PM -0400, Kyle Moffett wrote:
    >
    > Quick question: does "crypto_hash_init()" ever return anything other
    > than 0 or 1? If so this is a subtle bug, as "unlikely()" is
    > implemented like this:

    Good point. It's meant to be an errno value so this is a bug.

    [CRYPTO] hmac: Fix error truncation by unlikely()

    The error return values are truncated by unlikely so we need to
    save it first. Thanks to Kyle Moffett for spotting this.

    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    --
    Visit Openswan at http://www.openswan.org/
    Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
    Home Page: http://gondor.apana.org.au/~herbert/
    PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
    --
    diff --git a/crypto/hmac.c b/crypto/hmac.c
    index d52b234..b521bcd 100644
    --- a/crypto/hmac.c
    +++ b/crypto/hmac.c
    @@ -92,13 +92,17 @@ static int hmac_init(struct hash_desc *p
    struct hmac_ctx *ctx = align_ptr(ipad + bs * 2 + ds, sizeof(void *));
    struct hash_desc desc;
    struct scatterlist tmp;
    + int err;

    desc.tfm = ctx->child;
    desc.flags = pdesc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
    sg_set_buf(&tmp, ipad, bs);

    - return unlikely(crypto_hash_init(&desc)) ?:
    - crypto_hash_update(&desc, &tmp, bs);
    + err = crypto_hash_init(&desc);
    + if (unlikely(err))
    + return err;
    +
    + return crypto_hash_update(&desc, &tmp, bs);
    }

    static int hmac_update(struct hash_desc *pdesc,
    @@ -123,13 +127,17 @@ static int hmac_final(struct hash_desc *
    struct hmac_ctx *ctx = align_ptr(digest + ds, sizeof(void *));
    struct hash_desc desc;
    struct scatterlist tmp;
    + int err;

    desc.tfm = ctx->child;
    desc.flags = pdesc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
    sg_set_buf(&tmp, opad, bs + ds);

    - return unlikely(crypto_hash_final(&desc, digest)) ?:
    - crypto_hash_digest(&desc, &tmp, bs + ds, out);
    + err = crypto_hash_final(&desc, digest);
    + if (unlikely(err))
    + return err;
    +
    + return crypto_hash_digest(&desc, &tmp, bs + ds, out);
    }

    static int hmac_digest(struct hash_desc *pdesc, struct scatterlist *sg,
    @@ -145,6 +153,7 @@ static int hmac_digest(struct hash_desc
    struct hash_desc desc;
    struct scatterlist sg1[2];
    struct scatterlist sg2[1];
    + int err;

    desc.tfm = ctx->child;
    desc.flags = pdesc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
    @@ -154,8 +163,11 @@ static int hmac_digest(struct hash_desc
    sg1[1].length = 0;
    sg_set_buf(sg2, opad, bs + ds);

    - return unlikely(crypto_hash_digest(&desc, sg1, nbytes + bs, digest)) ?:
    - crypto_hash_digest(&desc, sg2, bs + ds, out);
    + err = crypto_hash_digest(&desc, sg1, nbytes + bs, digest);
    + if (unlikely(err))
    + return err;
    +
    + return crypto_hash_digest(&desc, sg2, bs + ds, out);
    }

    static int hmac_init_tfm(struct crypto_tfm *tfm)
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-09-24 01:33    [W:0.025 / U:60.816 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site