X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fptlrpc%2Fgss%2Fgss_crypto.c;h=a2ffd6028b42037098673fc3941b0ed96ce83079;hb=94c44c62dea2cf1f2174569524721ded1bbd1ce7;hp=2032f94dc62d347c9131fe3c2a6b80237855c625;hpb=9a163f389e96f8c3682391f8aa967a48e3daaaf4;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/gss/gss_crypto.c b/lustre/ptlrpc/gss/gss_crypto.c index 2032f94..a2ffd60 100644 --- a/lustre/ptlrpc/gss/gss_crypto.c +++ b/lustre/ptlrpc/gss/gss_crypto.c @@ -228,8 +228,8 @@ void gss_teardown_sgtable(struct sg_table *sgt) sg_free_table(sgt); } -int gss_crypt_generic(struct crypto_blkcipher *tfm, int decrypt, void *iv, - void *in, void *out, int length) +int gss_crypt_generic(struct crypto_blkcipher *tfm, int decrypt, const void *iv, + const void *in, void *out, size_t length) { struct blkcipher_desc desc; struct scatterlist sg; @@ -243,7 +243,7 @@ int gss_crypt_generic(struct crypto_blkcipher *tfm, int decrypt, void *iv, desc.flags = 0; if (length % crypto_blkcipher_blocksize(tfm) != 0) { - CERROR("output length %d mismatch blocksize %d\n", + CERROR("output length %zu mismatch blocksize %d\n", length, crypto_blkcipher_blocksize(tfm)); goto out; } @@ -323,7 +323,7 @@ int gss_digest_hmac(struct crypto_hash *tfm, } if (hdr) { - rc = gss_setup_sgtable(&sgt, sg, (char *)hdr, sizeof(*hdr)); + rc = gss_setup_sgtable(&sgt, sg, hdr, sizeof(*hdr)); if (rc != 0) return rc; rc = crypto_hash_update(&desc, sg, sizeof(hdr->len)); @@ -385,7 +385,7 @@ int gss_digest_norm(struct crypto_hash *tfm, } if (hdr) { - rc = gss_setup_sgtable(&sgt, sg, (char *)hdr, sizeof(*hdr)); + rc = gss_setup_sgtable(&sgt, sg, hdr, sizeof(*hdr)); if (rc != 0) return rc; @@ -424,11 +424,8 @@ int gss_add_padding(rawobj_t *msg, int msg_buflen, int blocksize) return 0; } -int gss_crypt_rawobjs(struct crypto_blkcipher *tfm, - int use_internal_iv, - int inobj_cnt, - rawobj_t *inobjs, - rawobj_t *outobj, +int gss_crypt_rawobjs(struct crypto_blkcipher *tfm, __u8 *iv, + int inobj_cnt, rawobj_t *inobjs, rawobj_t *outobj, int enc) { struct blkcipher_desc desc; @@ -436,14 +433,14 @@ int gss_crypt_rawobjs(struct crypto_blkcipher *tfm, struct scatterlist dst; struct sg_table sg_dst; struct sg_table sg_src; - __u8 local_iv[16] = {0}, *buf; + __u8 *buf; __u32 datalen = 0; int i, rc; ENTRY; buf = outobj->data; desc.tfm = tfm; - desc.info = local_iv; + desc.info = iv; desc.flags = 0; for (i = 0; i < inobj_cnt; i++) { @@ -461,14 +458,7 @@ int gss_crypt_rawobjs(struct crypto_blkcipher *tfm, RETURN(rc); } - if (use_internal_iv) { - if (enc) - rc = crypto_blkcipher_encrypt(&desc, &dst, &src, - src.length); - else - rc = crypto_blkcipher_decrypt(&desc, &dst, &src, - src.length); - } else { + if (iv) { if (enc) rc = crypto_blkcipher_encrypt_iv(&desc, &dst, &src, @@ -477,6 +467,13 @@ int gss_crypt_rawobjs(struct crypto_blkcipher *tfm, rc = crypto_blkcipher_decrypt_iv(&desc, &dst, &src, src.length); + } else { + if (enc) + rc = crypto_blkcipher_encrypt(&desc, &dst, &src, + src.length); + else + rc = crypto_blkcipher_decrypt(&desc, &dst, &src, + src.length); } gss_teardown_sgtable(&sg_src);