{"id":2231534,"url":"http://patchwork.ozlabs.org/api/patches/2231534/?format=json","web_url":"http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/4f75d641a85c7cb60554ff98c70d5d2721fe013c.1777577013.git.massimiliano.pellizzer@canonical.com/","project":{"id":15,"url":"http://patchwork.ozlabs.org/api/projects/15/?format=json","name":"Ubuntu Kernel","link_name":"ubuntu-kernel","list_id":"kernel-team.lists.ubuntu.com","list_email":"kernel-team@lists.ubuntu.com","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<4f75d641a85c7cb60554ff98c70d5d2721fe013c.1777577013.git.massimiliano.pellizzer@canonical.com>","list_archive_url":null,"date":"2026-04-30T19:28:23","name":"[SRU,J,v2,2/9] crypto: algif_aead - use memcpy_sglist() instead of null skcipher","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"7ffc82b192d7a2ba77b768a2a9f772c95b906912","submitter":{"id":89057,"url":"http://patchwork.ozlabs.org/api/people/89057/?format=json","name":"Massimiliano Pellizzer","email":"massimiliano.pellizzer@canonical.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/4f75d641a85c7cb60554ff98c70d5d2721fe013c.1777577013.git.massimiliano.pellizzer@canonical.com/mbox/","series":[{"id":502368,"url":"http://patchwork.ozlabs.org/api/series/502368/?format=json","web_url":"http://patchwork.ozlabs.org/project/ubuntu-kernel/list/?series=502368","date":"2026-04-30T19:28:21","name":"CVE-2026-31431","version":2,"mbox":"http://patchwork.ozlabs.org/series/502368/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2231534/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2231534/checks/","tags":{},"related":[],"headers":{"Return-Path":"<kernel-team-bounces@lists.ubuntu.com>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (4096-bit key;\n unprotected) header.d=canonical.com header.i=@canonical.com\n header.a=rsa-sha256 header.s=20251003 header.b=EPJE9Y2H;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com\n (client-ip=185.125.189.65; helo=lists.ubuntu.com;\n envelope-from=kernel-team-bounces@lists.ubuntu.com;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.ubuntu.com (lists.ubuntu.com [185.125.189.65])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g644l0Fscz1yHv\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 01 May 2026 05:29:59 +1000 (AEST)","from localhost ([127.0.0.1] helo=lists.ubuntu.com)\n\tby lists.ubuntu.com with esmtp (Exim 4.86_2)\n\t(envelope-from <kernel-team-bounces@lists.ubuntu.com>)\n\tid 1wIX56-0003xE-GS; Thu, 30 Apr 2026 19:29:52 +0000","from smtp-relay-internal-1.internal ([10.131.114.114]\n helo=smtp-relay-internal-1.canonical.com)\n by lists.ubuntu.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.86_2) (envelope-from <massimiliano.pellizzer@canonical.com>)\n id 1wIX4l-0002P0-2Y\n for kernel-team@lists.ubuntu.com; Thu, 30 Apr 2026 19:29:31 +0000","from mail-wm1-f71.google.com (mail-wm1-f71.google.com\n [209.85.128.71])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-relay-internal-1.canonical.com (Postfix) with ESMTPS id DC4623F637\n for <kernel-team@lists.ubuntu.com>; Thu, 30 Apr 2026 19:29:30 +0000 (UTC)","by mail-wm1-f71.google.com with SMTP id\n 5b1f17b1804b1-488d8deb75fso8998815e9.3\n for <kernel-team@lists.ubuntu.com>; Thu, 30 Apr 2026 12:29:30 -0700 (PDT)","from tuxedo-infinitybook (net-93-71-66-38.cust.vodafonedsl.it.\n [93.71.66.38]) by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-448e74324a5sm8133217f8f.12.2026.04.30.12.29.29\n for <kernel-team@lists.ubuntu.com>\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 30 Apr 2026 12:29:29 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com;\n s=20251003; t=1777577370;\n bh=/4GWeNLvyCYlnA/MgHDVqXsQFv+pq5p8LN+tJcoe0eA=;\n h=From:To:Subject:Date:Message-ID:In-Reply-To:References:\n MIME-Version;\n b=EPJE9Y2H94j1WYMd/UY6YkJDtj4wz17VMFTx5TnWzIfWoSHMFsGIDa34HeNAyDHLn\n jzosLjITu2ArM7DWLeb/DyBcbTz8UCRJf/KY3HpA7wB060uAqFZ/AzlRfebW/yQRmH\n 5DFP6FCP7kdPLHT5ovxSwqz4lwUaQu/IqUmhD+gav/rUpOymVWzFEhy18/RZih6RT0\n olIzjf2G1b1WFC79ZUWs0SV0T3ZTapG2wGzA9pvr0xdlHDlXwfqSgqrCpduF73o+y9\n UxUR8lHxLdyx4ycseakuRD8/9M6hQgw9d6XMo0t6rWVCGJl6BFgRTKIvN9z7esEMXU\n 6LmaNQiuVedjUSNWr/fkqwlpo5xFP1+eJF78+RZlkPEjXyMPJPyK1oQZbpiY9dW3rp\n L0m/wWSuWYqInxmPvzGEpT/cVSqoEu2qD2K+rwfyhaw9rGcUsaZKJcAoCTdrncW2Vk\n 9kIIfAk+9LKxxgCr51oD0MjOXgvobjEaI9iTmPa71gdtFA9/vU9G7kjpRX1kFRnERb\n omZpwcQS/RjSPZx9RhCcZQt5O3SX65W6b2iZxsNzLveQR07N+6aEMImUq4xUQkMrB5\n JtA4BtANqRPaynM6NF0lRz3yRMFsg4FoCWJ1WJEmybEfGbR3u6QyrLY1mGc0RYvDv2\n GGD+gRy5QYd4XiUfkto3egQE=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777577370; x=1778182170;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to\n :cc:subject:date:message-id:reply-to;\n bh=/4GWeNLvyCYlnA/MgHDVqXsQFv+pq5p8LN+tJcoe0eA=;\n b=UF+Lz39eymJoUs3hzw0aKvkb7CX510pSZyfmpXOLQJcKKi1pUTdd+WrZAffrKZf64x\n 2jNvS+31vqkd2ei7V/PghuFTHQa8OCGccBdDhXmSrX/DgiQ1AihPeNPuVjJkGLyiA5yn\n d5Aepis/2oOjc3EcsiertYitYktvzdE1KUGMWvYm7mpo0+eAZmc7pmo9OWgpfK8j3dR2\n 80IexFVuDdAHtClTleMEcjafonrBPeQ8Mr4Iiw/NYVKBbFqmhYpP184OVVZDXY6IRayF\n 9OaMYYwm/8IQLdbis1am3W2zWPWnPWtCs1AEc2O2WhRitKclm3WQrSXiHUbj86FB1Zz7\n dJhw==","X-Gm-Message-State":"AOJu0Yx7iPTyV5O9AAxm500sJb9PLEV3/JOm2THJpB3IBF0R/nQ3W/m/\n 4GclCczEaHTRKrZFzj4iJOLH0IGyVx3879iSf+yxBsHMckbZ88rXlAPuAn5/i5m4ooHN6IHyLdR\n y9p5Kip8ze7X+AT2j5/9/WacTqdtvD3hXbydFr9yjwZebELeCIGS04kL4LcP4baHvWnUh0pB8M/\n pnIMnfdvPap75ulQ==","X-Gm-Gg":"AeBDieutFwN4pGxsByM49h0aoqk0FoZshzi5KLx/I3bfCwPBXx+qz/zd7ay80oCg4zy\n b+M0xSbDSscMlD6FFgXZWq5YpidyBLT/PDDJooYpFbnjjpb0mdXSSPWd6KqElSSxs77s3duuhIa\n qQzd245WJRrSoiYhksZ1qvFrCTKzOx764dwxIpzGRFByfwQFOlLZZjX6YBw4NU2gmL1Z6t3OYHI\n 6b2WJsmAS3igZp4ItZijm4W6rhJKG4SIboffrh2Ob7LT1MY8dnJWPmwm4jO0YF+9973vaG1ibQo\n AjY9KFrkIHbmX8/aMzw16yqDcsz8LqI+FNueevGeJYDddK6EKDthqGwOEB06mKWK7fhEge8AHpP\n eNFOFoJOspdcznq3V3ipMxNIgx8auDvDHIZk70AW9lEebZFlCtNoC+7i3zkBcnQMTc+BGzED6Oz\n XM4ok29SuzLkRfXcYP8rfncpBQYxgceADwCi4dUR9QTM4+NhiB93YzXdWBjaETk69+1NSZLkErI\n H5iCL7a7tJBMA==","X-Received":["by 2002:a05:600c:3552:b0:489:1ca2:eafd with SMTP id\n 5b1f17b1804b1-48a83f6d022mr72933825e9.11.1777577370120;\n Thu, 30 Apr 2026 12:29:30 -0700 (PDT)","by 2002:a05:600c:3552:b0:489:1ca2:eafd with SMTP id\n 5b1f17b1804b1-48a83f6d022mr72933595e9.11.1777577369648;\n Thu, 30 Apr 2026 12:29:29 -0700 (PDT)"],"From":"Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>","To":"kernel-team@lists.ubuntu.com","Subject":"[SRU][J][PATCH v2 2/9] crypto: algif_aead - use memcpy_sglist()\n instead of null skcipher","Date":"Thu, 30 Apr 2026 21:28:23 +0200","Message-ID":"\n <4f75d641a85c7cb60554ff98c70d5d2721fe013c.1777577013.git.massimiliano.pellizzer@canonical.com>","X-Mailer":"git-send-email 2.53.0","In-Reply-To":"<cover.1777577013.git.massimiliano.pellizzer@canonical.com>","References":"\n <177757626672.818044.11792928639290212185@tuxedo-infinitybook.public>\n <cover.1777577013.git.massimiliano.pellizzer@canonical.com>","MIME-Version":"1.0","X-BeenThere":"kernel-team@lists.ubuntu.com","X-Mailman-Version":"2.1.20","Precedence":"list","List-Id":"Kernel team discussions <kernel-team.lists.ubuntu.com>","List-Unsubscribe":"<https://lists.ubuntu.com/mailman/options/kernel-team>,\n <mailto:kernel-team-request@lists.ubuntu.com?subject=unsubscribe>","List-Archive":"<https://lists.ubuntu.com/archives/kernel-team>","List-Post":"<mailto:kernel-team@lists.ubuntu.com>","List-Help":"<mailto:kernel-team-request@lists.ubuntu.com?subject=help>","List-Subscribe":"<https://lists.ubuntu.com/mailman/listinfo/kernel-team>,\n <mailto:kernel-team-request@lists.ubuntu.com?subject=subscribe>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"kernel-team-bounces@lists.ubuntu.com","Sender":"\"kernel-team\" <kernel-team-bounces@lists.ubuntu.com>"},"content":"From: Eric Biggers <ebiggers@google.com>\n\ncommit f2804d0eee8ddd57aa79d0b82872b74c21e1b69b upstream.\n\nFor copying data between two scatterlists, just use memcpy_sglist()\ninstead of the so-called \"null skcipher\".  This is much simpler.\n\nSigned-off-by: Eric Biggers <ebiggers@google.com>\nSigned-off-by: Herbert Xu <herbert@gondor.apana.org.au>\nSigned-off-by: Eric Biggers <ebiggers@kernel.org>\nSigned-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>\n(cherry picked from commit 17774d99bb4347c6b025ef80b637d6e3f94fe2f7 linux-5.15.y)\nCVE-2026-31431\nSigned-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>\n---\n crypto/Kconfig      |  1 -\n crypto/algif_aead.c | 98 ++++++++-------------------------------------\n 2 files changed, 17 insertions(+), 82 deletions(-)","diff":"diff --git a/crypto/Kconfig b/crypto/Kconfig\nindex db260ccfba51b..15994570627bf 100644\n--- a/crypto/Kconfig\n+++ b/crypto/Kconfig\n@@ -1872,7 +1872,6 @@ config CRYPTO_USER_API_AEAD\n \tdepends on NET\n \tselect CRYPTO_AEAD\n \tselect CRYPTO_SKCIPHER\n-\tselect CRYPTO_NULL\n \tselect CRYPTO_USER_API\n \thelp\n \t  This option enables the user-spaces interface for AEAD\ndiff --git a/crypto/algif_aead.c b/crypto/algif_aead.c\nindex 42493b4d8ce46..38a4ab8c90c72 100644\n--- a/crypto/algif_aead.c\n+++ b/crypto/algif_aead.c\n@@ -27,7 +27,6 @@\n #include <crypto/scatterwalk.h>\n #include <crypto/if_alg.h>\n #include <crypto/skcipher.h>\n-#include <crypto/null.h>\n #include <linux/init.h>\n #include <linux/list.h>\n #include <linux/kernel.h>\n@@ -36,19 +35,13 @@\n #include <linux/net.h>\n #include <net/sock.h>\n \n-struct aead_tfm {\n-\tstruct crypto_aead *aead;\n-\tstruct crypto_sync_skcipher *null_tfm;\n-};\n-\n static inline bool aead_sufficient_data(struct sock *sk)\n {\n \tstruct alg_sock *ask = alg_sk(sk);\n \tstruct sock *psk = ask->parent;\n \tstruct alg_sock *pask = alg_sk(psk);\n \tstruct af_alg_ctx *ctx = ask->private;\n-\tstruct aead_tfm *aeadc = pask->private;\n-\tstruct crypto_aead *tfm = aeadc->aead;\n+\tstruct crypto_aead *tfm = pask->private;\n \tunsigned int as = crypto_aead_authsize(tfm);\n \n \t/*\n@@ -64,27 +57,12 @@ static int aead_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)\n \tstruct alg_sock *ask = alg_sk(sk);\n \tstruct sock *psk = ask->parent;\n \tstruct alg_sock *pask = alg_sk(psk);\n-\tstruct aead_tfm *aeadc = pask->private;\n-\tstruct crypto_aead *tfm = aeadc->aead;\n+\tstruct crypto_aead *tfm = pask->private;\n \tunsigned int ivsize = crypto_aead_ivsize(tfm);\n \n \treturn af_alg_sendmsg(sock, msg, size, ivsize);\n }\n \n-static int crypto_aead_copy_sgl(struct crypto_sync_skcipher *null_tfm,\n-\t\t\t\tstruct scatterlist *src,\n-\t\t\t\tstruct scatterlist *dst, unsigned int len)\n-{\n-\tSYNC_SKCIPHER_REQUEST_ON_STACK(skreq, null_tfm);\n-\n-\tskcipher_request_set_sync_tfm(skreq, null_tfm);\n-\tskcipher_request_set_callback(skreq, CRYPTO_TFM_REQ_MAY_SLEEP,\n-\t\t\t\t      NULL, NULL);\n-\tskcipher_request_set_crypt(skreq, src, dst, len, NULL);\n-\n-\treturn crypto_skcipher_encrypt(skreq);\n-}\n-\n static int _aead_recvmsg(struct socket *sock, struct msghdr *msg,\n \t\t\t size_t ignored, int flags)\n {\n@@ -93,9 +71,7 @@ static int _aead_recvmsg(struct socket *sock, struct msghdr *msg,\n \tstruct sock *psk = ask->parent;\n \tstruct alg_sock *pask = alg_sk(psk);\n \tstruct af_alg_ctx *ctx = ask->private;\n-\tstruct aead_tfm *aeadc = pask->private;\n-\tstruct crypto_aead *tfm = aeadc->aead;\n-\tstruct crypto_sync_skcipher *null_tfm = aeadc->null_tfm;\n+\tstruct crypto_aead *tfm = pask->private;\n \tunsigned int i, as = crypto_aead_authsize(tfm);\n \tstruct af_alg_async_req *areq;\n \tstruct af_alg_tsgl *tsgl, *tmp;\n@@ -223,10 +199,7 @@ static int _aead_recvmsg(struct socket *sock, struct msghdr *msg,\n \t\t *\t    v\t   v\n \t\t * RX SGL: AAD || PT || Tag\n \t\t */\n-\t\terr = crypto_aead_copy_sgl(null_tfm, tsgl_src,\n-\t\t\t\t\t   areq->first_rsgl.sgl.sg, processed);\n-\t\tif (err)\n-\t\t\tgoto free;\n+\t\tmemcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, processed);\n \t\taf_alg_pull_tsgl(sk, processed, NULL, 0);\n \t} else {\n \t\t/*\n@@ -240,11 +213,8 @@ static int _aead_recvmsg(struct socket *sock, struct msghdr *msg,\n \t\t * RX SGL: AAD || CT ----+\n \t\t */\n \n-\t\t /* Copy AAD || CT to RX SGL buffer for in-place operation. */\n-\t\terr = crypto_aead_copy_sgl(null_tfm, tsgl_src,\n-\t\t\t\t\t   areq->first_rsgl.sgl.sg, outlen);\n-\t\tif (err)\n-\t\t\tgoto free;\n+\t\t/* Copy AAD || CT to RX SGL buffer for in-place operation. */\n+\t\tmemcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, outlen);\n \n \t\t/* Create TX SGL for tag and chain it to RX SGL. */\n \t\tareq->tsgl_entries = af_alg_count_tsgl(sk, processed,\n@@ -378,7 +348,7 @@ static int aead_check_key(struct socket *sock)\n \tint err = 0;\n \tstruct sock *psk;\n \tstruct alg_sock *pask;\n-\tstruct aead_tfm *tfm;\n+\tstruct crypto_aead *tfm;\n \tstruct sock *sk = sock->sk;\n \tstruct alg_sock *ask = alg_sk(sk);\n \n@@ -392,7 +362,7 @@ static int aead_check_key(struct socket *sock)\n \n \terr = -ENOKEY;\n \tlock_sock_nested(psk, SINGLE_DEPTH_NESTING);\n-\tif (crypto_aead_get_flags(tfm->aead) & CRYPTO_TFM_NEED_KEY)\n+\tif (crypto_aead_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)\n \t\tgoto unlock;\n \n \tatomic_dec(&pask->nokey_refcnt);\n@@ -466,54 +436,22 @@ static struct proto_ops algif_aead_ops_nokey = {\n \n static void *aead_bind(const char *name, u32 type, u32 mask)\n {\n-\tstruct aead_tfm *tfm;\n-\tstruct crypto_aead *aead;\n-\tstruct crypto_sync_skcipher *null_tfm;\n-\n-\ttfm = kzalloc(sizeof(*tfm), GFP_KERNEL);\n-\tif (!tfm)\n-\t\treturn ERR_PTR(-ENOMEM);\n-\n-\taead = crypto_alloc_aead(name, type, mask);\n-\tif (IS_ERR(aead)) {\n-\t\tkfree(tfm);\n-\t\treturn ERR_CAST(aead);\n-\t}\n-\n-\tnull_tfm = crypto_get_default_null_skcipher();\n-\tif (IS_ERR(null_tfm)) {\n-\t\tcrypto_free_aead(aead);\n-\t\tkfree(tfm);\n-\t\treturn ERR_CAST(null_tfm);\n-\t}\n-\n-\ttfm->aead = aead;\n-\ttfm->null_tfm = null_tfm;\n-\n-\treturn tfm;\n+\treturn crypto_alloc_aead(name, type, mask);\n }\n \n static void aead_release(void *private)\n {\n-\tstruct aead_tfm *tfm = private;\n-\n-\tcrypto_free_aead(tfm->aead);\n-\tcrypto_put_default_null_skcipher();\n-\tkfree(tfm);\n+\tcrypto_free_aead(private);\n }\n \n static int aead_setauthsize(void *private, unsigned int authsize)\n {\n-\tstruct aead_tfm *tfm = private;\n-\n-\treturn crypto_aead_setauthsize(tfm->aead, authsize);\n+\treturn crypto_aead_setauthsize(private, authsize);\n }\n \n static int aead_setkey(void *private, const u8 *key, unsigned int keylen)\n {\n-\tstruct aead_tfm *tfm = private;\n-\n-\treturn crypto_aead_setkey(tfm->aead, key, keylen);\n+\treturn crypto_aead_setkey(private, key, keylen);\n }\n \n static void aead_sock_destruct(struct sock *sk)\n@@ -522,8 +460,7 @@ static void aead_sock_destruct(struct sock *sk)\n \tstruct af_alg_ctx *ctx = ask->private;\n \tstruct sock *psk = ask->parent;\n \tstruct alg_sock *pask = alg_sk(psk);\n-\tstruct aead_tfm *aeadc = pask->private;\n-\tstruct crypto_aead *tfm = aeadc->aead;\n+\tstruct crypto_aead *tfm = pask->private;\n \tunsigned int ivlen = crypto_aead_ivsize(tfm);\n \n \taf_alg_pull_tsgl(sk, ctx->used, NULL, 0);\n@@ -536,10 +473,9 @@ static int aead_accept_parent_nokey(void *private, struct sock *sk)\n {\n \tstruct af_alg_ctx *ctx;\n \tstruct alg_sock *ask = alg_sk(sk);\n-\tstruct aead_tfm *tfm = private;\n-\tstruct crypto_aead *aead = tfm->aead;\n+\tstruct crypto_aead *tfm = private;\n \tunsigned int len = sizeof(*ctx);\n-\tunsigned int ivlen = crypto_aead_ivsize(aead);\n+\tunsigned int ivlen = crypto_aead_ivsize(tfm);\n \n \tctx = sock_kmalloc(sk, len, GFP_KERNEL);\n \tif (!ctx)\n@@ -566,9 +502,9 @@ static int aead_accept_parent_nokey(void *private, struct sock *sk)\n \n static int aead_accept_parent(void *private, struct sock *sk)\n {\n-\tstruct aead_tfm *tfm = private;\n+\tstruct crypto_aead *tfm = private;\n \n-\tif (crypto_aead_get_flags(tfm->aead) & CRYPTO_TFM_NEED_KEY)\n+\tif (crypto_aead_get_flags(tfm) & CRYPTO_TFM_NEED_KEY)\n \t\treturn -ENOKEY;\n \n \treturn aead_accept_parent_nokey(private, sk);\n","prefixes":["SRU","J","v2","2/9"]}