|
@@ -168,6 +168,7 @@ gss_wrap_kerberos_v1(struct krb5_ctx *kctx, int offset,
|
|
struct page **tmp_pages;
|
|
struct page **tmp_pages;
|
|
u32 seq_send;
|
|
u32 seq_send;
|
|
u8 *cksumkey;
|
|
u8 *cksumkey;
|
|
|
|
+ u32 conflen = kctx->gk5e->conflen;
|
|
|
|
|
|
dprintk("RPC: %s\n", __func__);
|
|
dprintk("RPC: %s\n", __func__);
|
|
|
|
|
|
@@ -176,7 +177,7 @@ gss_wrap_kerberos_v1(struct krb5_ctx *kctx, int offset,
|
|
blocksize = crypto_blkcipher_blocksize(kctx->enc);
|
|
blocksize = crypto_blkcipher_blocksize(kctx->enc);
|
|
gss_krb5_add_padding(buf, offset, blocksize);
|
|
gss_krb5_add_padding(buf, offset, blocksize);
|
|
BUG_ON((buf->len - offset) % blocksize);
|
|
BUG_ON((buf->len - offset) % blocksize);
|
|
- plainlen = blocksize + buf->len - offset;
|
|
|
|
|
|
+ plainlen = conflen + buf->len - offset;
|
|
|
|
|
|
headlen = g_token_size(&kctx->mech_used,
|
|
headlen = g_token_size(&kctx->mech_used,
|
|
GSS_KRB5_TOK_HDR_LEN + kctx->gk5e->cksumlength + plainlen) -
|
|
GSS_KRB5_TOK_HDR_LEN + kctx->gk5e->cksumlength + plainlen) -
|
|
@@ -204,7 +205,7 @@ gss_wrap_kerberos_v1(struct krb5_ctx *kctx, int offset,
|
|
memset(ptr + 4, 0xff, 4);
|
|
memset(ptr + 4, 0xff, 4);
|
|
*(__be16 *)(ptr + 4) = cpu_to_le16(kctx->gk5e->sealalg);
|
|
*(__be16 *)(ptr + 4) = cpu_to_le16(kctx->gk5e->sealalg);
|
|
|
|
|
|
- gss_krb5_make_confounder(msg_start, blocksize);
|
|
|
|
|
|
+ gss_krb5_make_confounder(msg_start, conflen);
|
|
|
|
|
|
if (kctx->gk5e->keyed_cksum)
|
|
if (kctx->gk5e->keyed_cksum)
|
|
cksumkey = kctx->cksum;
|
|
cksumkey = kctx->cksum;
|
|
@@ -214,7 +215,7 @@ gss_wrap_kerberos_v1(struct krb5_ctx *kctx, int offset,
|
|
/* XXXJBF: UGH!: */
|
|
/* XXXJBF: UGH!: */
|
|
tmp_pages = buf->pages;
|
|
tmp_pages = buf->pages;
|
|
buf->pages = pages;
|
|
buf->pages = pages;
|
|
- if (make_checksum(kctx, ptr, 8, buf, offset + headlen - blocksize,
|
|
|
|
|
|
+ if (make_checksum(kctx, ptr, 8, buf, offset + headlen - conflen,
|
|
cksumkey, KG_USAGE_SEAL, &md5cksum))
|
|
cksumkey, KG_USAGE_SEAL, &md5cksum))
|
|
return GSS_S_FAILURE;
|
|
return GSS_S_FAILURE;
|
|
buf->pages = tmp_pages;
|
|
buf->pages = tmp_pages;
|
|
@@ -231,7 +232,7 @@ gss_wrap_kerberos_v1(struct krb5_ctx *kctx, int offset,
|
|
seq_send, ptr + GSS_KRB5_TOK_HDR_LEN, ptr + 8)))
|
|
seq_send, ptr + GSS_KRB5_TOK_HDR_LEN, ptr + 8)))
|
|
return GSS_S_FAILURE;
|
|
return GSS_S_FAILURE;
|
|
|
|
|
|
- if (gss_encrypt_xdr_buf(kctx->enc, buf, offset + headlen - blocksize,
|
|
|
|
|
|
+ if (gss_encrypt_xdr_buf(kctx->enc, buf, offset + headlen - conflen,
|
|
pages))
|
|
pages))
|
|
return GSS_S_FAILURE;
|
|
return GSS_S_FAILURE;
|
|
|
|
|
|
@@ -254,6 +255,7 @@ gss_unwrap_kerberos_v1(struct krb5_ctx *kctx, int offset, struct xdr_buf *buf)
|
|
void *data_start, *orig_start;
|
|
void *data_start, *orig_start;
|
|
int data_len;
|
|
int data_len;
|
|
int blocksize;
|
|
int blocksize;
|
|
|
|
+ u32 conflen = kctx->gk5e->conflen;
|
|
int crypt_offset;
|
|
int crypt_offset;
|
|
u8 *cksumkey;
|
|
u8 *cksumkey;
|
|
|
|
|
|
@@ -327,7 +329,7 @@ gss_unwrap_kerberos_v1(struct krb5_ctx *kctx, int offset, struct xdr_buf *buf)
|
|
|
|
|
|
blocksize = crypto_blkcipher_blocksize(kctx->enc);
|
|
blocksize = crypto_blkcipher_blocksize(kctx->enc);
|
|
data_start = ptr + (GSS_KRB5_TOK_HDR_LEN + kctx->gk5e->cksumlength) +
|
|
data_start = ptr + (GSS_KRB5_TOK_HDR_LEN + kctx->gk5e->cksumlength) +
|
|
- blocksize;
|
|
|
|
|
|
+ conflen;
|
|
orig_start = buf->head[0].iov_base + offset;
|
|
orig_start = buf->head[0].iov_base + offset;
|
|
data_len = (buf->head[0].iov_base + buf->head[0].iov_len) - data_start;
|
|
data_len = (buf->head[0].iov_base + buf->head[0].iov_len) - data_start;
|
|
memmove(orig_start, data_start, data_len);
|
|
memmove(orig_start, data_start, data_len);
|