Hi,
I am trying add and test kernel authenc to cryptodev. When executing the
test with cao.src = cao.dst, the cipher is generated successfully but
kernel crash when generating the icv.
The problem is that in authen.c
if (caop->op == COP_ENCRYPT) dst_len = caop->len +
cryptodev_cipher_get_tag_size(&ses_ptr->cdata);
else dst_len = caop->len;
ret = get_userbuf(ses_ptr, caop->src, caop->len,
caop->dst, dst_len,
kcaop->task, kcaop->mm, &src_sg,
&dst_sg);
But in get_userbuf()
if (src == dst) { /* inplace operation */
rc = __get_userbuf(src, src_len, 1, ses->used_pages,
ses->pages, ses->sg, task, mm);
if (unlikely(rc)) {
dprintk(1, KERN_ERR,
"failed to get user pages for data IO\n");
return rc;
}
(*src_sg) = (*dst_sg) = ses->sg;
return 0;
}
The ICV failed because the scatterlist dst_sg is created with shorter
length than required (should be caop->len +
cryptodev_cipher_get_tag_size(&ses_ptr->cdata)).
A possible fix is to change
rc = __get_userbuf(src, src_len, 1, ses->used_pages,
ses->pages, ses->sg, task, mm);
to
rc = __get_userbuf(dst, dst_len, 1, ses->used_pages,
ses->pages, ses->sg, task, mm);
Please correct me if I am wrong.
Thanks and Best Regards,
Dien
--
Nguyen Tien Hoang Dien
Embedded Software Engineer 2
Applied Micro Circuits Corporation (AMCC) Vietnam
(+84) 091-624-9609
[email protected]
skype: dthnguyen
_______________________________________________
Cryptodev-linux-devel mailing list
[email protected]
https://mail.gna.org/listinfo/cryptodev-linux-devel