lkml.org 
[lkml]   [2011]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 3/3] trusted-keys: avoid scattring va_end()
    From
    Date
    From 65b41710a476deae2e0899a4df40c02d199a4ee3 Mon Sep 17 00:00:00 2001
    From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Date: Mon, 17 Jan 2011 09:27:27 +0900
    Subject: [PATCH 3/3] trusted-keys: avoid scattring va_end()

    We can avoid scattering va_end() within the

    va_start();
    for (;;) {

    }
    va_end();

    loop, assuming that crypto_shash_init()/crypto_shash_update() return 0 on
    success and negative value otherwise.

    Make TSS_authhmac()/TSS_checkhmac1()/TSS_checkhmac2() similar to TSS_rawhmac()
    by removing "va_end()/goto" from the loop.

    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    ---
    security/keys/trusted_defined.c | 30 +++++++++++++-----------------
    1 files changed, 13 insertions(+), 17 deletions(-)

    diff --git a/security/keys/trusted_defined.c b/security/keys/trusted_defined.c
    index f7d0677..2836c6d 100644
    --- a/security/keys/trusted_defined.c
    +++ b/security/keys/trusted_defined.c
    @@ -150,17 +150,15 @@ static int TSS_authhmac(unsigned char *digest, const unsigned char *key,
    data = va_arg(argp, unsigned char *);
    if (!data) {
    ret = -EINVAL;
    - va_end(argp);
    - goto out;
    + break;
    }
    ret = crypto_shash_update(&sdesc->shash, data, dlen);
    - if (ret < 0) {
    - va_end(argp);
    - goto out;
    - }
    + if (ret < 0)
    + break;
    }
    va_end(argp);
    - ret = crypto_shash_final(&sdesc->shash, paramdigest);
    + if (!ret)
    + ret = crypto_shash_final(&sdesc->shash, paramdigest);
    if (!ret)
    ret = TSS_rawhmac(digest, key, keylen, SHA1_DIGEST_SIZE,
    paramdigest, TPM_NONCE_SIZE, h1,
    @@ -229,13 +227,12 @@ static int TSS_checkhmac1(unsigned char *buffer,
    break;
    dpos = va_arg(argp, unsigned int);
    ret = crypto_shash_update(&sdesc->shash, buffer + dpos, dlen);
    - if (ret < 0) {
    - va_end(argp);
    - goto out;
    - }
    + if (ret < 0)
    + break;
    }
    va_end(argp);
    - ret = crypto_shash_final(&sdesc->shash, paramdigest);
    + if (!ret)
    + ret = crypto_shash_final(&sdesc->shash, paramdigest);
    if (ret < 0)
    goto out;

    @@ -323,13 +320,12 @@ static int TSS_checkhmac2(unsigned char *buffer,
    break;
    dpos = va_arg(argp, unsigned int);
    ret = crypto_shash_update(&sdesc->shash, buffer + dpos, dlen);
    - if (ret < 0) {
    - va_end(argp);
    - goto out;
    - }
    + if (ret < 0)
    + break;
    }
    va_end(argp);
    - ret = crypto_shash_final(&sdesc->shash, paramdigest);
    + if (!ret)
    + ret = crypto_shash_final(&sdesc->shash, paramdigest);
    if (ret < 0)
    goto out;

    --
    1.7.1


    \
     
     \ /
      Last update: 2011-01-17 01:47    [W:0.024 / U:0.416 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site