Because of the possible alloc failure of the alloc_page(), it could return NULL pointer. And then it will cause the BUG_ON() in sg_assign_page(). Therefore, it should be better to check it before to avoid the bug. Fixes: 2d97591ef43d ("crypto: af_alg - consolidation of duplicate code") Signed-off-by: Jiasheng Jiang <jiasheng@xxxxxxxxxxx> --- crypto/af_alg.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crypto/af_alg.c b/crypto/af_alg.c index 18cc82dc4a42..a1c0118e222d 100644 --- a/crypto/af_alg.c +++ b/crypto/af_alg.c @@ -931,11 +931,18 @@ int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size, sg_unmark_end(sg + sgl->cur - 1); do { + struct page *pg; unsigned int i = sgl->cur; plen = min_t(size_t, len, PAGE_SIZE); - sg_assign_page(sg + i, alloc_page(GFP_KERNEL)); + pg = alloc_page(GFP_KERNEL); + if (!pg) { + err = -ENOMEM; + goto unlock; + } + + sg_assign_page(sg + i, pg); if (!sg_page(sg + i)) { err = -ENOMEM; goto unlock; -- 2.25.1