Skip to content

Commit 62397b4

Browse files
nszeteiherbertx
authored andcommitted
crypto: af-alg - fix NULL pointer dereference in scatterwalk
The AF_ALG interface fails to unmark the end of a Scatter/Gather List (SGL) when chaining a new af_alg_tsgl structure. If a sendmsg() fills an SGL exactly to MAX_SGL_ENTS, the last entry is marked as the end. A subsequent sendmsg() allocates a new SGL and chains it, but fails to clear the end marker on the previous SGL's last data entry. This causes the crypto scatterwalk to hit a premature end, returning NULL on sg_next() and leading to a kernel panic during dereference. Fix this by explicitly unmarking the end of the previous SGL when performing sg_chain() in af_alg_alloc_tsgl(). Fixes: 8ff5909 ("crypto: algif_skcipher - User-space interface for skcipher operations") Signed-off-by: Norbert Szetei <norbert@doyensec.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent 6d89f74 commit 62397b4

1 file changed

Lines changed: 3 additions & 1 deletion

File tree

crypto/af_alg.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -623,8 +623,10 @@ static int af_alg_alloc_tsgl(struct sock *sk)
623623
sg_init_table(sgl->sg, MAX_SGL_ENTS + 1);
624624
sgl->cur = 0;
625625

626-
if (sg)
626+
if (sg) {
627+
sg_unmark_end(sg + MAX_SGL_ENTS - 1);
627628
sg_chain(sg, MAX_SGL_ENTS + 1, sgl->sg);
629+
}
628630

629631
list_add_tail(&sgl->list, &ctx->tsgl_list);
630632
}

0 commit comments

Comments
 (0)