{"id":2231264,"url":"http://patchwork.ozlabs.org/api/patches/2231264/?format=json","web_url":"http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/4f75d641a85c7cb60554ff98c70d5d2721fe013c.1777552173.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.1777552173.git.massimiliano.pellizzer@canonical.com>","list_archive_url":null,"date":"2026-04-30T12:30:30","name":"[SRU,J,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.1777552173.git.massimiliano.pellizzer@canonical.com/mbox/","series":[{"id":502300,"url":"http://patchwork.ozlabs.org/api/series/502300/?format=json","web_url":"http://patchwork.ozlabs.org/project/ubuntu-kernel/list/?series=502300","date":"2026-04-30T12:30:28","name":"CVE-2026-31431","version":1,"mbox":"http://patchwork.ozlabs.org/series/502300/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2231264/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2231264/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=l1D/HGjL;\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 4g5tpJ0KYjz1yGq\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 22:31:52 +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 1wIQYP-0005QW-Ab; Thu, 30 Apr 2026 12:31:41 +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 1wIQYH-0004uj-Tg\n for kernel-team@lists.ubuntu.com; Thu, 30 Apr 2026 12:31:34 +0000","from mail-wm1-f70.google.com (mail-wm1-f70.google.com\n [209.85.128.70])\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 CA9A93F9CC\n for <kernel-team@lists.ubuntu.com>; Thu, 30 Apr 2026 12:31:32 +0000 (UTC)","by mail-wm1-f70.google.com with SMTP id\n 5b1f17b1804b1-488c2aa6becso6892035e9.2\n for <kernel-team@lists.ubuntu.com>; Thu, 30 Apr 2026 05:31:32 -0700 (PDT)","from tuxedo-infinitybook.ts.net\n (net-93-71-66-38.cust.vodafonedsl.it. [93.71.66.38])\n by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-48a81ed6bafsm103695005e9.2.2026.04.30.05.31.30\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 05:31:30 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com;\n s=20251003; t=1777552292;\n bh=/4GWeNLvyCYlnA/MgHDVqXsQFv+pq5p8LN+tJcoe0eA=;\n h=From:To:Subject:Date:Message-ID:In-Reply-To:References:\n MIME-Version;\n b=l1D/HGjLFU+kzAuVj8UFky8MfG04CadCdfJ9AsfdjWASeszF+aU5WFnOB8nLMkpip\n nSWubQVB5BBdcPZEsgfKav2jACTshJ6yi0M1BgBEHzMPNBNseJLMRLGh5ucC8hUt4L\n 4tbF+aNS1HMPyaYZMqbY2efRc+jsJQynhBQyo8ebVt0+KfKBEU1e4yT1xUGNQjRuqC\n euVn95vvcwk5AYjcfd3fRxGagzzaQofW2y+T7JK6Jc4X3kHgsm4c99kFU0as3kMKw9\n CfudVQhBT9C19Ei5sfRn43nXuhveSLJJb8HzKd3YLtFe9tBaDT5m2e6u8ymeyhegK8\n pPTBhiHdzQOFymajv173fvBq42EkksCNqK2iKoXR2lkUtbeCxtwwGPoP2kLaYUO+E1\n 6Jkm0LSTRkq6MzUR65CaU01+INzx7U373LjEC870FMoTwZJvwwFpzsTypxtG3WN/BH\n ztVuAKHIdSC5VGIcQuspBGcSrqDzaOZqhDakRaqIZ6ooJ4VOHUJ98+HS3T1M8v0zjJ\n v8VWO0Xg8b/9If6D8ua8C4YuhiWv0XNTPX2Ng4mZlSgzGvdWaDXW+fvME4whPc1Mi8\n Jq3Jo66jRbp9eLBYuzLILJvEBqJAj1+ohKw8NA4JuK6q5oEMW2B90a8r6kJhK18UVC\n g9nQ3SXm0rMY80K61O9a2ntI=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777552292; x=1778157092;\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=IieOQrvdJpeDYXxN2c5XarBdHSDvwANdB/RQPLr/x15l+fTORXA4sI/d7JI11JLFh/\n Ue3pBpm3bYvDGAxGiKmOIqEDKuN0JNoh/5iOG8LX/pgqkXDUUWhdg/VTsujfkgDaIZBz\n tbQ4AXtaEZVCUHDrSIS5t/lHhe645szvr7hFKVlbjh/tI715NWHBHRvJF20dly6VGjQ9\n fncEem0a49FOooYYvxL5sBKJU7oUeqq4JQxOGQwmDId7dmnV1VzgzhFpmUabyaenQFa8\n no6R/ZPnKlUQt3Sy7FKHnHsM8/+v2pLKVhoUUCArEn3hRKciQYU/7aFpGKTxvdIVbTxu\n BSVA==","X-Gm-Message-State":"AOJu0Yz9AiWi9ObxTJ5gByGq0H30cJXPb+taxKRZDKRcSqFeR175s9NE\n rPjkmwvBZHA7uV04MfS7tGIIdpTN+RJSFAGD9Tqoc12yQ9PAr836mIqmKKFGnMhu8L6VyfpFRnI\n Z741yXRdC8b4+Guv3Ks5cC3bOX7YbV/I6R8LNtnbrnERVVeCOuYyeQ4ktzLYWxx9EnvufoLpEtJ\n Pg1xB8VUSh5sfAdA==","X-Gm-Gg":"AeBDiesblaNymL1+YI+m6GVGypz7wtl79WSR76WstVdNX125d2JYrB/pRHUzrrdkh7h\n g/y8ASPf0ScFURFDmncoifMaNVxdSb8wS27jIYsl7182hgJwJTso8UCnBBTDdjxT5Les2qWp1Jr\n aEwSF+fDF279RjvT2O+5PQFjEbWbqcbyZMEXh0y8C5Wxn+nDVx6aTsN+3ntJkVbDC2Vbmy5rHfc\n suwQXafsxUzuogb49Qxm5N+uZrAVbXkRB8Yp7H2nbLbujty0JfD+H/942+BjB8sbHpUtGQXkdmq\n lpfWmpTjNXGsbW9gqF48xpD9fotUASi+WLe3OVkDxTYAQbseovWlKE6qEvksym1z4A/IUiADSGL\n 1fOro9EKJmkvTfSqt5SPOQ3vBhXoJfM2SCpfAY3Bx81BUg2sryHUr+kKtrLb1vV16txnSonbkBm\n WhNiAxQVI7oRsB26cXveQKa4yfX+jfD+dIU8wsWPvWKPmNVwEu65zlJ+2l6SMT8xm+Ta3rrMG3s\n mnlkbMseP1QYw2jlawkLs0=","X-Received":["by 2002:a05:600c:859a:b0:488:9ed3:1492 with SMTP id\n 5b1f17b1804b1-48a83d7725bmr34658585e9.10.1777552291818;\n Thu, 30 Apr 2026 05:31:31 -0700 (PDT)","by 2002:a05:600c:859a:b0:488:9ed3:1492 with SMTP id\n 5b1f17b1804b1-48a83d7725bmr34658145e9.10.1777552291245;\n Thu, 30 Apr 2026 05:31:31 -0700 (PDT)"],"From":"Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>","To":"kernel-team@lists.ubuntu.com","Subject":"[SRU][J][PATCH 2/9] crypto: algif_aead - use memcpy_sglist() instead\n of null skcipher","Date":"Thu, 30 Apr 2026 14:30:30 +0200","Message-ID":"\n <4f75d641a85c7cb60554ff98c70d5d2721fe013c.1777552173.git.massimiliano.pellizzer@canonical.com>","X-Mailer":"git-send-email 2.53.0","In-Reply-To":"<cover.1777552173.git.massimiliano.pellizzer@canonical.com>","References":"\n <177754965576.503496.12142658280614619991@tuxedo-infinitybook.public>\n <cover.1777552173.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","2/9"]}