Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
34cb5821
Commit
34cb5821
authored
Feb 03, 2017
by
Herbert Xu
Browse files
Options
Browse Files
Download
Plain Diff
Merge
git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Merge the crypto tree to pick up arm64 output IV patch.
parents
7dede913
7c2cf1c4
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
96 additions
and
89 deletions
+96
-89
arch/arm64/crypto/aes-modes.S
arch/arm64/crypto/aes-modes.S
+42
-46
arch/x86/crypto/aesni-intel_glue.c
arch/x86/crypto/aesni-intel_glue.c
+6
-5
crypto/algapi.c
crypto/algapi.c
+1
-0
crypto/algif_aead.c
crypto/algif_aead.c
+1
-1
drivers/crypto/ccp/ccp-dev-v5.c
drivers/crypto/ccp/ccp-dev-v5.c
+1
-1
drivers/crypto/ccp/ccp-dev.h
drivers/crypto/ccp/ccp-dev.h
+1
-0
drivers/crypto/ccp/ccp-dmaengine.c
drivers/crypto/ccp/ccp-dmaengine.c
+5
-1
drivers/crypto/chelsio/chcr_algo.c
drivers/crypto/chelsio/chcr_algo.c
+28
-25
drivers/crypto/chelsio/chcr_core.c
drivers/crypto/chelsio/chcr_core.c
+8
-10
drivers/crypto/chelsio/chcr_crypto.h
drivers/crypto/chelsio/chcr_crypto.h
+3
-0
No files found.
arch/arm64/crypto/aes-modes.S
View file @
34cb5821
...
...
@@ -193,15 +193,16 @@ AES_ENTRY(aes_cbc_encrypt)
cbz
w6
,
.
Lcbcencloop
ld1
{
v0
.16
b
},
[
x5
]
/*
get
iv
*/
enc_prepare
w3
,
x2
,
x
5
enc_prepare
w3
,
x2
,
x
6
.
Lcbcencloop
:
ld1
{
v1
.16
b
},
[
x1
],
#
16
/*
get
next
pt
block
*/
eor
v0
.16
b
,
v0
.16
b
,
v1
.16
b
/*
..
and
xor
with
iv
*/
encrypt_block
v0
,
w3
,
x2
,
x
5
,
w6
encrypt_block
v0
,
w3
,
x2
,
x
6
,
w7
st1
{
v0
.16
b
},
[
x0
],
#
16
subs
w4
,
w4
,
#
1
bne
.
Lcbcencloop
st1
{
v0
.16
b
},
[
x5
]
/*
return
iv
*/
ret
AES_ENDPROC
(
aes_cbc_encrypt
)
...
...
@@ -211,7 +212,7 @@ AES_ENTRY(aes_cbc_decrypt)
cbz
w6
,
.
LcbcdecloopNx
ld1
{
v7
.16
b
},
[
x5
]
/*
get
iv
*/
dec_prepare
w3
,
x2
,
x
5
dec_prepare
w3
,
x2
,
x
6
.
LcbcdecloopNx
:
#if INTERLEAVE >= 2
...
...
@@ -248,7 +249,7 @@ AES_ENTRY(aes_cbc_decrypt)
.
Lcbcdecloop
:
ld1
{
v1
.16
b
},
[
x1
],
#
16
/*
get
next
ct
block
*/
mov
v0
.16
b
,
v1
.16
b
/*
...
and
copy
to
v0
*/
decrypt_block
v0
,
w3
,
x2
,
x
5
,
w6
decrypt_block
v0
,
w3
,
x2
,
x
6
,
w7
eor
v0
.16
b
,
v0
.16
b
,
v7
.16
b
/*
xor
with
iv
=>
pt
*/
mov
v7
.16
b
,
v1
.16
b
/*
ct
is
next
iv
*/
st1
{
v0
.16
b
},
[
x0
],
#
16
...
...
@@ -256,6 +257,7 @@ AES_ENTRY(aes_cbc_decrypt)
bne
.
Lcbcdecloop
.
Lcbcdecout
:
FRAME_POP
st1
{
v7
.16
b
},
[
x5
]
/*
return
iv
*/
ret
AES_ENDPROC
(
aes_cbc_decrypt
)
...
...
@@ -267,24 +269,15 @@ AES_ENDPROC(aes_cbc_decrypt)
AES_ENTRY
(
aes_ctr_encrypt
)
FRAME_PUSH
cbnz
w6
,
.
Lctrfirst
/*
1
st
time
around
?
*/
umov
x5
,
v4
.
d
[
1
]
/*
keep
swabbed
ctr
in
reg
*/
rev
x5
,
x5
#if INTERLEAVE >= 2
cmn
w5
,
w4
/*
32
bit
overflow
?
*/
bcs
.
Lctrinc
add
x5
,
x5
,
#
1
/*
increment
BE
ctr
*/
b
.
LctrincNx
#else
b
.
Lctrinc
#endif
.
Lctrfirst
:
cbz
w6
,
.
Lctrnotfirst
/*
1
st
time
around
?
*/
enc_prepare
w3
,
x2
,
x6
ld1
{
v4
.16
b
},
[
x5
]
umov
x5
,
v4
.
d
[
1
]
/*
keep
swabbed
ctr
in
reg
*/
rev
x5
,
x5
.
Lctrnotfirst
:
umov
x8
,
v4
.
d
[
1
]
/*
keep
swabbed
ctr
in
reg
*/
rev
x8
,
x8
#if INTERLEAVE >= 2
cmn
w
5
,
w4
/*
32
bit
overflow
?
*/
cmn
w
8
,
w4
/*
32
bit
overflow
?
*/
bcs
.
Lctrloop
.
LctrloopNx
:
subs
w4
,
w4
,
#
INTERLEAVE
...
...
@@ -292,11 +285,11 @@ AES_ENTRY(aes_ctr_encrypt)
#if INTERLEAVE == 2
mov
v0
.8
b
,
v4
.8
b
mov
v1
.8
b
,
v4
.8
b
rev
x7
,
x
5
add
x
5
,
x5
,
#
1
rev
x7
,
x
8
add
x
8
,
x8
,
#
1
ins
v0
.
d
[
1
],
x7
rev
x7
,
x
5
add
x
5
,
x5
,
#
1
rev
x7
,
x
8
add
x
8
,
x8
,
#
1
ins
v1
.
d
[
1
],
x7
ld1
{
v2
.16
b
-
v3
.16
b
},
[
x1
],
#
32
/*
get
2
input
blocks
*/
do_encrypt_block2x
...
...
@@ -305,7 +298,7 @@ AES_ENTRY(aes_ctr_encrypt)
st1
{
v0
.16
b
-
v1
.16
b
},
[
x0
],
#
32
#else
ldr
q8
,
=
0x30000000200000001
/*
addends
1
,
2
,
3
[,
0
]
*/
dup
v7
.4
s
,
w
5
dup
v7
.4
s
,
w
8
mov
v0
.16
b
,
v4
.16
b
add
v7
.4
s
,
v7
.4
s
,
v8
.4
s
mov
v1
.16
b
,
v4
.16
b
...
...
@@ -323,18 +316,12 @@ AES_ENTRY(aes_ctr_encrypt)
eor
v2
.16
b
,
v7
.16
b
,
v2
.16
b
eor
v3
.16
b
,
v5
.16
b
,
v3
.16
b
st1
{
v0
.16
b
-
v3
.16
b
},
[
x0
],
#
64
add
x
5
,
x5
,
#
INTERLEAVE
add
x
8
,
x8
,
#
INTERLEAVE
#endif
cbz
w4
,
.
LctroutNx
.
LctrincNx
:
rev
x7
,
x5
rev
x7
,
x8
ins
v4
.
d
[
1
],
x7
cbz
w4
,
.
Lctrout
b
.
LctrloopNx
.
LctroutNx
:
sub
x5
,
x5
,
#
1
rev
x7
,
x5
ins
v4
.
d
[
1
],
x7
b
.
Lctrout
.
Lctr1x
:
adds
w4
,
w4
,
#
INTERLEAVE
beq
.
Lctrout
...
...
@@ -342,30 +329,39 @@ AES_ENTRY(aes_ctr_encrypt)
.
Lctrloop
:
mov
v0
.16
b
,
v4
.16
b
encrypt_block
v0
,
w3
,
x2
,
x6
,
w7
adds
x8
,
x8
,
#
1
/*
increment
BE
ctr
*/
rev
x7
,
x8
ins
v4
.
d
[
1
],
x7
bcs
.
Lctrcarry
/*
overflow
?
*/
.
Lctrcarrydone
:
subs
w4
,
w4
,
#
1
bmi
.
Lctrhalfblock
/*
blocks
<
0
means
1
/
2
block
*/
ld1
{
v3
.16
b
},
[
x1
],
#
16
eor
v3
.16
b
,
v0
.16
b
,
v3
.16
b
st1
{
v3
.16
b
},
[
x0
],
#
16
beq
.
Lctrout
.
Lctrinc
:
adds
x5
,
x5
,
#
1
/*
increment
BE
ctr
*/
rev
x7
,
x5
ins
v4
.
d
[
1
],
x7
bcc
.
Lctrloop
/*
no
overflow
?
*/
umov
x7
,
v4
.
d
[
0
]
/*
load
upper
word
of
ctr
*/
rev
x7
,
x7
/*
...
to
handle
the
carry
*/
add
x7
,
x7
,
#
1
rev
x7
,
x7
ins
v4
.
d
[
0
],
x7
b
.
Lctrloop
bne
.
Lctrloop
.
Lctrout
:
st1
{
v4
.16
b
},
[
x5
]
/*
return
next
CTR
value
*/
FRAME_POP
ret
.
Lctrhalfblock
:
ld1
{
v3
.8
b
},
[
x1
]
eor
v3
.8
b
,
v0
.8
b
,
v3
.8
b
st1
{
v3
.8
b
},
[
x0
]
.
Lctrout
:
FRAME_POP
ret
.
Lctrcarry
:
umov
x7
,
v4
.
d
[
0
]
/*
load
upper
word
of
ctr
*/
rev
x7
,
x7
/*
...
to
handle
the
carry
*/
add
x7
,
x7
,
#
1
rev
x7
,
x7
ins
v4
.
d
[
0
],
x7
b
.
Lctrcarrydone
AES_ENDPROC
(
aes_ctr_encrypt
)
.
ltorg
...
...
arch/x86/crypto/aesni-intel_glue.c
View file @
34cb5821
...
...
@@ -1024,7 +1024,8 @@ struct {
const
char
*
basename
;
struct
simd_skcipher_alg
*
simd
;
}
aesni_simd_skciphers2
[]
=
{
#if IS_ENABLED(CONFIG_CRYPTO_PCBC)
#if (defined(MODULE) && IS_ENABLED(CONFIG_CRYPTO_PCBC)) || \
IS_BUILTIN(CONFIG_CRYPTO_PCBC)
{
.
algname
=
"pcbc(aes)"
,
.
drvname
=
"pcbc-aes-aesni"
,
...
...
@@ -1088,9 +1089,9 @@ static void aesni_free_simds(void)
aesni_simd_skciphers
[
i
];
i
++
)
simd_skcipher_free
(
aesni_simd_skciphers
[
i
]);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
aesni_simd_skciphers2
)
&&
aesni_simd_skciphers2
[
i
].
simd
;
i
++
)
simd_skcipher_free
(
aesni_simd_skciphers2
[
i
].
simd
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
aesni_simd_skciphers2
)
;
i
++
)
if
(
aesni_simd_skciphers2
[
i
].
simd
)
simd_skcipher_free
(
aesni_simd_skciphers2
[
i
].
simd
);
}
static
int
__init
aesni_init
(
void
)
...
...
@@ -1171,7 +1172,7 @@ static int __init aesni_init(void)
simd
=
simd_skcipher_create_compat
(
algname
,
drvname
,
basename
);
err
=
PTR_ERR
(
simd
);
if
(
IS_ERR
(
simd
))
goto
unregister_simds
;
continue
;
aesni_simd_skciphers2
[
i
].
simd
=
simd
;
}
...
...
crypto/algapi.c
View file @
34cb5821
...
...
@@ -356,6 +356,7 @@ int crypto_register_alg(struct crypto_alg *alg)
struct
crypto_larval
*
larval
;
int
err
;
alg
->
cra_flags
&=
~
CRYPTO_ALG_DEAD
;
err
=
crypto_check_alg
(
alg
);
if
(
err
)
return
err
;
...
...
crypto/algif_aead.c
View file @
34cb5821
...
...
@@ -661,9 +661,9 @@ static int aead_recvmsg_sync(struct socket *sock, struct msghdr *msg, int flags)
unlock:
list_for_each_entry_safe
(
rsgl
,
tmp
,
&
ctx
->
list
,
list
)
{
af_alg_free_sg
(
&
rsgl
->
sgl
);
list_del
(
&
rsgl
->
list
);
if
(
rsgl
!=
&
ctx
->
first_rsgl
)
sock_kfree_s
(
sk
,
rsgl
,
sizeof
(
*
rsgl
));
list_del
(
&
rsgl
->
list
);
}
INIT_LIST_HEAD
(
&
ctx
->
list
);
aead_wmem_wakeup
(
sk
);
...
...
drivers/crypto/ccp/ccp-dev-v5.c
View file @
34cb5821
...
...
@@ -959,7 +959,7 @@ static irqreturn_t ccp5_irq_handler(int irq, void *data)
static
void
ccp5_config
(
struct
ccp_device
*
ccp
)
{
/* Public side */
iowrite32
(
0x0
0001249
,
ccp
->
io_regs
+
CMD5_REQID_CONFIG_OFFSET
);
iowrite32
(
0x0
,
ccp
->
io_regs
+
CMD5_REQID_CONFIG_OFFSET
);
}
static
void
ccp5other_config
(
struct
ccp_device
*
ccp
)
...
...
drivers/crypto/ccp/ccp-dev.h
View file @
34cb5821
...
...
@@ -238,6 +238,7 @@ struct ccp_dma_chan {
struct
ccp_device
*
ccp
;
spinlock_t
lock
;
struct
list_head
created
;
struct
list_head
pending
;
struct
list_head
active
;
struct
list_head
complete
;
...
...
drivers/crypto/ccp/ccp-dmaengine.c
View file @
34cb5821
...
...
@@ -63,6 +63,7 @@ static void ccp_free_chan_resources(struct dma_chan *dma_chan)
ccp_free_desc_resources
(
chan
->
ccp
,
&
chan
->
complete
);
ccp_free_desc_resources
(
chan
->
ccp
,
&
chan
->
active
);
ccp_free_desc_resources
(
chan
->
ccp
,
&
chan
->
pending
);
ccp_free_desc_resources
(
chan
->
ccp
,
&
chan
->
created
);
spin_unlock_irqrestore
(
&
chan
->
lock
,
flags
);
}
...
...
@@ -273,6 +274,7 @@ static dma_cookie_t ccp_tx_submit(struct dma_async_tx_descriptor *tx_desc)
spin_lock_irqsave
(
&
chan
->
lock
,
flags
);
cookie
=
dma_cookie_assign
(
tx_desc
);
list_del
(
&
desc
->
entry
);
list_add_tail
(
&
desc
->
entry
,
&
chan
->
pending
);
spin_unlock_irqrestore
(
&
chan
->
lock
,
flags
);
...
...
@@ -426,7 +428,7 @@ static struct ccp_dma_desc *ccp_create_desc(struct dma_chan *dma_chan,
spin_lock_irqsave
(
&
chan
->
lock
,
sflags
);
list_add_tail
(
&
desc
->
entry
,
&
chan
->
pending
);
list_add_tail
(
&
desc
->
entry
,
&
chan
->
created
);
spin_unlock_irqrestore
(
&
chan
->
lock
,
sflags
);
...
...
@@ -610,6 +612,7 @@ static int ccp_terminate_all(struct dma_chan *dma_chan)
/*TODO: Purge the complete list? */
ccp_free_desc_resources
(
chan
->
ccp
,
&
chan
->
active
);
ccp_free_desc_resources
(
chan
->
ccp
,
&
chan
->
pending
);
ccp_free_desc_resources
(
chan
->
ccp
,
&
chan
->
created
);
spin_unlock_irqrestore
(
&
chan
->
lock
,
flags
);
...
...
@@ -679,6 +682,7 @@ int ccp_dmaengine_register(struct ccp_device *ccp)
chan
->
ccp
=
ccp
;
spin_lock_init
(
&
chan
->
lock
);
INIT_LIST_HEAD
(
&
chan
->
created
);
INIT_LIST_HEAD
(
&
chan
->
pending
);
INIT_LIST_HEAD
(
&
chan
->
active
);
INIT_LIST_HEAD
(
&
chan
->
complete
);
...
...
drivers/crypto/chelsio/chcr_algo.c
View file @
34cb5821
...
...
@@ -158,7 +158,7 @@ int chcr_handle_resp(struct crypto_async_request *req, unsigned char *input,
case
CRYPTO_ALG_TYPE_AEAD
:
ctx_req
.
req
.
aead_req
=
(
struct
aead_request
*
)
req
;
ctx_req
.
ctx
.
reqctx
=
aead_request_ctx
(
ctx_req
.
req
.
aead_req
);
dma_unmap_sg
(
&
u_ctx
->
lldi
.
pdev
->
dev
,
ctx_req
.
req
.
aead_req
->
dst
,
dma_unmap_sg
(
&
u_ctx
->
lldi
.
pdev
->
dev
,
ctx_req
.
ctx
.
reqctx
->
dst
,
ctx_req
.
ctx
.
reqctx
->
dst_nents
,
DMA_FROM_DEVICE
);
if
(
ctx_req
.
ctx
.
reqctx
->
skb
)
{
kfree_skb
(
ctx_req
.
ctx
.
reqctx
->
skb
);
...
...
@@ -1362,8 +1362,7 @@ static struct sk_buff *create_authenc_wr(struct aead_request *req,
struct
chcr_wr
*
chcr_req
;
struct
cpl_rx_phys_dsgl
*
phys_cpl
;
struct
phys_sge_parm
sg_param
;
struct
scatterlist
*
src
,
*
dst
;
struct
scatterlist
src_sg
[
2
],
dst_sg
[
2
];
struct
scatterlist
*
src
;
unsigned
int
frags
=
0
,
transhdr_len
;
unsigned
int
ivsize
=
crypto_aead_ivsize
(
tfm
),
dst_size
=
0
;
unsigned
int
kctx_len
=
0
;
...
...
@@ -1383,19 +1382,21 @@ static struct sk_buff *create_authenc_wr(struct aead_request *req,
if
(
sg_nents_for_len
(
req
->
src
,
req
->
assoclen
+
req
->
cryptlen
)
<
0
)
goto
err
;
src
=
scatterwalk_ffwd
(
src_sg
,
req
->
src
,
req
->
assoclen
);
dst
=
src
;
src
=
scatterwalk_ffwd
(
reqctx
->
srcffwd
,
req
->
src
,
req
->
assoclen
);
reqctx
->
dst
=
src
;
if
(
req
->
src
!=
req
->
dst
)
{
err
=
chcr_copy_assoc
(
req
,
aeadctx
);
if
(
err
)
return
ERR_PTR
(
err
);
dst
=
scatterwalk_ffwd
(
dst_sg
,
req
->
dst
,
req
->
assoclen
);
reqctx
->
dst
=
scatterwalk_ffwd
(
reqctx
->
dstffwd
,
req
->
dst
,
req
->
assoclen
);
}
if
(
get_aead_subtype
(
tfm
)
==
CRYPTO_ALG_SUB_TYPE_AEAD_NULL
)
{
null
=
1
;
assoclen
=
0
;
}
reqctx
->
dst_nents
=
sg_nents_for_len
(
dst
,
req
->
cryptlen
+
reqctx
->
dst_nents
=
sg_nents_for_len
(
reqctx
->
dst
,
req
->
cryptlen
+
(
op_type
?
-
authsize
:
authsize
));
if
(
reqctx
->
dst_nents
<=
0
)
{
pr_err
(
"AUTHENC:Invalid Destination sg entries
\n
"
);
...
...
@@ -1460,7 +1461,7 @@ static struct sk_buff *create_authenc_wr(struct aead_request *req,
sg_param
.
obsize
=
req
->
cryptlen
+
(
op_type
?
-
authsize
:
authsize
);
sg_param
.
qid
=
qid
;
sg_param
.
align
=
0
;
if
(
map_writesg_phys_cpl
(
&
u_ctx
->
lldi
.
pdev
->
dev
,
phys_cpl
,
dst
,
if
(
map_writesg_phys_cpl
(
&
u_ctx
->
lldi
.
pdev
->
dev
,
phys_cpl
,
reqctx
->
dst
,
&
sg_param
))
goto
dstmap_fail
;
...
...
@@ -1711,8 +1712,7 @@ static struct sk_buff *create_aead_ccm_wr(struct aead_request *req,
struct
chcr_wr
*
chcr_req
;
struct
cpl_rx_phys_dsgl
*
phys_cpl
;
struct
phys_sge_parm
sg_param
;
struct
scatterlist
*
src
,
*
dst
;
struct
scatterlist
src_sg
[
2
],
dst_sg
[
2
];
struct
scatterlist
*
src
;
unsigned
int
frags
=
0
,
transhdr_len
,
ivsize
=
AES_BLOCK_SIZE
;
unsigned
int
dst_size
=
0
,
kctx_len
;
unsigned
int
sub_type
;
...
...
@@ -1728,17 +1728,19 @@ static struct sk_buff *create_aead_ccm_wr(struct aead_request *req,
if
(
sg_nents_for_len
(
req
->
src
,
req
->
assoclen
+
req
->
cryptlen
)
<
0
)
goto
err
;
sub_type
=
get_aead_subtype
(
tfm
);
src
=
scatterwalk_ffwd
(
src_sg
,
req
->
src
,
req
->
assoclen
);
dst
=
src
;
src
=
scatterwalk_ffwd
(
reqctx
->
srcffwd
,
req
->
src
,
req
->
assoclen
);
reqctx
->
dst
=
src
;
if
(
req
->
src
!=
req
->
dst
)
{
err
=
chcr_copy_assoc
(
req
,
aeadctx
);
if
(
err
)
{
pr_err
(
"AAD copy to destination buffer fails
\n
"
);
return
ERR_PTR
(
err
);
}
dst
=
scatterwalk_ffwd
(
dst_sg
,
req
->
dst
,
req
->
assoclen
);
reqctx
->
dst
=
scatterwalk_ffwd
(
reqctx
->
dstffwd
,
req
->
dst
,
req
->
assoclen
);
}
reqctx
->
dst_nents
=
sg_nents_for_len
(
dst
,
req
->
cryptlen
+
reqctx
->
dst_nents
=
sg_nents_for_len
(
reqctx
->
dst
,
req
->
cryptlen
+
(
op_type
?
-
authsize
:
authsize
));
if
(
reqctx
->
dst_nents
<=
0
)
{
pr_err
(
"CCM:Invalid Destination sg entries
\n
"
);
...
...
@@ -1777,7 +1779,7 @@ static struct sk_buff *create_aead_ccm_wr(struct aead_request *req,
sg_param
.
obsize
=
req
->
cryptlen
+
(
op_type
?
-
authsize
:
authsize
);
sg_param
.
qid
=
qid
;
sg_param
.
align
=
0
;
if
(
map_writesg_phys_cpl
(
&
u_ctx
->
lldi
.
pdev
->
dev
,
phys_cpl
,
dst
,
if
(
map_writesg_phys_cpl
(
&
u_ctx
->
lldi
.
pdev
->
dev
,
phys_cpl
,
reqctx
->
dst
,
&
sg_param
))
goto
dstmap_fail
;
...
...
@@ -1809,8 +1811,7 @@ static struct sk_buff *create_gcm_wr(struct aead_request *req,
struct
chcr_wr
*
chcr_req
;
struct
cpl_rx_phys_dsgl
*
phys_cpl
;
struct
phys_sge_parm
sg_param
;
struct
scatterlist
*
src
,
*
dst
;
struct
scatterlist
src_sg
[
2
],
dst_sg
[
2
];
struct
scatterlist
*
src
;
unsigned
int
frags
=
0
,
transhdr_len
;
unsigned
int
ivsize
=
AES_BLOCK_SIZE
;
unsigned
int
dst_size
=
0
,
kctx_len
;
...
...
@@ -1832,13 +1833,14 @@ static struct sk_buff *create_gcm_wr(struct aead_request *req,
if
(
sg_nents_for_len
(
req
->
src
,
req
->
assoclen
+
req
->
cryptlen
)
<
0
)
goto
err
;
src
=
scatterwalk_ffwd
(
src_sg
,
req
->
src
,
req
->
assoclen
);
dst
=
src
;
src
=
scatterwalk_ffwd
(
reqctx
->
srcffwd
,
req
->
src
,
req
->
assoclen
);
reqctx
->
dst
=
src
;
if
(
req
->
src
!=
req
->
dst
)
{
err
=
chcr_copy_assoc
(
req
,
aeadctx
);
if
(
err
)
return
ERR_PTR
(
err
);
dst
=
scatterwalk_ffwd
(
dst_sg
,
req
->
dst
,
req
->
assoclen
);
reqctx
->
dst
=
scatterwalk_ffwd
(
reqctx
->
dstffwd
,
req
->
dst
,
req
->
assoclen
);
}
if
(
!
req
->
cryptlen
)
...
...
@@ -1848,7 +1850,7 @@ static struct sk_buff *create_gcm_wr(struct aead_request *req,
crypt_len
=
AES_BLOCK_SIZE
;
else
crypt_len
=
req
->
cryptlen
;
reqctx
->
dst_nents
=
sg_nents_for_len
(
dst
,
req
->
cryptlen
+
reqctx
->
dst_nents
=
sg_nents_for_len
(
reqctx
->
dst
,
req
->
cryptlen
+
(
op_type
?
-
authsize
:
authsize
));
if
(
reqctx
->
dst_nents
<=
0
)
{
pr_err
(
"GCM:Invalid Destination sg entries
\n
"
);
...
...
@@ -1923,7 +1925,7 @@ static struct sk_buff *create_gcm_wr(struct aead_request *req,
sg_param
.
obsize
=
req
->
cryptlen
+
(
op_type
?
-
authsize
:
authsize
);
sg_param
.
qid
=
qid
;
sg_param
.
align
=
0
;
if
(
map_writesg_phys_cpl
(
&
u_ctx
->
lldi
.
pdev
->
dev
,
phys_cpl
,
dst
,
if
(
map_writesg_phys_cpl
(
&
u_ctx
->
lldi
.
pdev
->
dev
,
phys_cpl
,
reqctx
->
dst
,
&
sg_param
))
goto
dstmap_fail
;
...
...
@@ -1937,7 +1939,8 @@ static struct sk_buff *create_gcm_wr(struct aead_request *req,
write_sg_to_skb
(
skb
,
&
frags
,
src
,
req
->
cryptlen
);
}
else
{
aes_gcm_empty_pld_pad
(
req
->
dst
,
authsize
-
1
);
write_sg_to_skb
(
skb
,
&
frags
,
dst
,
crypt_len
);
write_sg_to_skb
(
skb
,
&
frags
,
reqctx
->
dst
,
crypt_len
);
}
create_wreq
(
ctx
,
chcr_req
,
req
,
skb
,
kctx_len
,
size
,
1
,
...
...
@@ -2189,8 +2192,8 @@ static int chcr_gcm_setkey(struct crypto_aead *aead, const u8 *key,
unsigned
int
ck_size
;
int
ret
=
0
,
key_ctx_size
=
0
;
if
(
get_aead_subtype
(
aead
)
==
CRYPTO_ALG_SUB_TYPE_AEAD_RFC4106
)
{
if
(
get_aead_subtype
(
aead
)
==
CRYPTO_ALG_SUB_TYPE_AEAD_RFC4106
&&
keylen
>
3
)
{
keylen
-=
4
;
/* nonce/salt is present in the last 4 bytes */
memcpy
(
aeadctx
->
salt
,
key
+
keylen
,
4
);
}
...
...
drivers/crypto/chelsio/chcr_core.c
View file @
34cb5821
...
...
@@ -52,6 +52,7 @@ static struct cxgb4_uld_info chcr_uld_info = {
int
assign_chcr_device
(
struct
chcr_dev
**
dev
)
{
struct
uld_ctx
*
u_ctx
;
int
ret
=
-
ENXIO
;
/*
* Which device to use if multiple devices are available TODO
...
...
@@ -59,15 +60,14 @@ int assign_chcr_device(struct chcr_dev **dev)
* must go to the same device to maintain the ordering.
*/
mutex_lock
(
&
dev_mutex
);
/* TODO ? */
u_ctx
=
list_first_entry
(
&
uld_ctx_list
,
struct
uld_ctx
,
entry
);
if
(
!
u_ctx
)
{
mutex_unlock
(
&
dev_mutex
);
return
-
ENXIO
;
list_for_each_entry
(
u_ctx
,
&
uld_ctx_list
,
entry
)
if
(
u_ctx
&&
u_ctx
->
dev
)
{
*
dev
=
u_ctx
->
dev
;
ret
=
0
;
break
;
}
*
dev
=
u_ctx
->
dev
;
mutex_unlock
(
&
dev_mutex
);
return
0
;
return
ret
;
}
static
int
chcr_dev_add
(
struct
uld_ctx
*
u_ctx
)
...
...
@@ -202,10 +202,8 @@ static int chcr_uld_state_change(void *handle, enum cxgb4_state state)
static
int
__init
chcr_crypto_init
(
void
)
{
if
(
cxgb4_register_uld
(
CXGB4_ULD_CRYPTO
,
&
chcr_uld_info
))
{
if
(
cxgb4_register_uld
(
CXGB4_ULD_CRYPTO
,
&
chcr_uld_info
))
pr_err
(
"ULD register fail: No chcr crypto support in cxgb4"
);
return
-
1
;
}
return
0
;
}
...
...
drivers/crypto/chelsio/chcr_crypto.h
View file @
34cb5821
...
...
@@ -158,6 +158,9 @@ struct ablk_ctx {
};
struct
chcr_aead_reqctx
{
struct
sk_buff
*
skb
;
struct
scatterlist
*
dst
;
struct
scatterlist
srcffwd
[
2
];
struct
scatterlist
dstffwd
[
2
];
short
int
dst_nents
;
u16
verify
;
u8
iv
[
CHCR_MAX_CRYPTO_IV_LEN
];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment