Skip to content

Commit dcf7d9e

Browse files
committed
Merge tag 'v6.17-p3' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fixes from Herbert Xu: "This fixes a NULL pointer dereference in ccp and a couple of bugs in the af_alg interface" * tag 'v6.17-p3' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: crypto: af_alg - Disallow concurrent writes in af_alg_sendmsg crypto: af_alg - Set merge to zero early in af_alg_sendmsg crypto: ccp - Always pass in an error pointer to __sev_platform_shutdown_locked()
2 parents e8442d5 + 1b34cbb commit dcf7d9e

3 files changed

Lines changed: 16 additions & 6 deletions

File tree

crypto/af_alg.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -970,6 +970,12 @@ int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size,
970970
}
971971

972972
lock_sock(sk);
973+
if (ctx->write) {
974+
release_sock(sk);
975+
return -EBUSY;
976+
}
977+
ctx->write = true;
978+
973979
if (ctx->init && !ctx->more) {
974980
if (ctx->used) {
975981
err = -EINVAL;
@@ -1019,6 +1025,8 @@ int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size,
10191025
continue;
10201026
}
10211027

1028+
ctx->merge = 0;
1029+
10221030
if (!af_alg_writable(sk)) {
10231031
err = af_alg_wait_for_wmem(sk, msg->msg_flags);
10241032
if (err)
@@ -1058,7 +1066,6 @@ int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size,
10581066
ctx->used += plen;
10591067
copied += plen;
10601068
size -= plen;
1061-
ctx->merge = 0;
10621069
} else {
10631070
do {
10641071
struct page *pg;
@@ -1104,6 +1111,7 @@ int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size,
11041111

11051112
unlock:
11061113
af_alg_data_wakeup(sk);
1114+
ctx->write = false;
11071115
release_sock(sk);
11081116

11091117
return copied ?: err;

drivers/crypto/ccp/sev-dev.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2430,7 +2430,7 @@ static void __sev_firmware_shutdown(struct sev_device *sev, bool panic)
24302430
{
24312431
int error;
24322432

2433-
__sev_platform_shutdown_locked(NULL);
2433+
__sev_platform_shutdown_locked(&error);
24342434

24352435
if (sev_es_tmr) {
24362436
/*

include/crypto/if_alg.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ struct af_alg_async_req {
135135
* SG?
136136
* @enc: Cryptographic operation to be performed when
137137
* recvmsg is invoked.
138+
* @write: True if we are in the middle of a write.
138139
* @init: True if metadata has been sent.
139140
* @len: Length of memory allocated for this data structure.
140141
* @inflight: Non-zero when AIO requests are in flight.
@@ -151,10 +152,11 @@ struct af_alg_ctx {
151152
size_t used;
152153
atomic_t rcvused;
153154

154-
bool more;
155-
bool merge;
156-
bool enc;
157-
bool init;
155+
u32 more:1,
156+
merge:1,
157+
enc:1,
158+
write:1,
159+
init:1;
158160

159161
unsigned int len;
160162

0 commit comments

Comments
 (0)