All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Dhaval Shah <dhaval.r.shah@amd.com>
Cc: oe-kbuild-all@lists.linux.dev, git@amd.com,
	Michal Simek <monstr@monstr.eu>,
	Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
Subject: [xilinx-xlnx:xlnx_rebase_v6.6_LTS_2024.1_update 615/1001] crypto/algif_aead.c:71:undefined reference to `af_alg_sendmsg'
Date: Fri, 27 Sep 2024 22:23:39 +0800	[thread overview]
Message-ID: <202409272245.w7aTHfRF-lkp@intel.com> (raw)

tree:   https://github.com/Xilinx/linux-xlnx xlnx_rebase_v6.6_LTS_2024.1_update
head:   5365c13a86998da06d845c918f849b30b8735538
commit: d8acda0778f572993e1eb7f22487ff20113ab13c [615/1001] crypto: xilinx: select AES GCM fallback and userspace kernel config
config: s390-randconfig-001-20240927 (https://download.01.org/0day-ci/archive/20240927/202409272245.w7aTHfRF-lkp@intel.com/config)
compiler: s390-linux-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240927/202409272245.w7aTHfRF-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409272245.w7aTHfRF-lkp@intel.com/

All errors (new ones prefixed by >>):

   s390-linux-ld: crypto/algif_aead.o: in function `aead_sendmsg':
>> crypto/algif_aead.c:71:(.text+0x1b2): undefined reference to `af_alg_sendmsg'
   s390-linux-ld: crypto/algif_aead.o: in function `aead_sock_destruct':
>> crypto/algif_aead.c:517:(.text+0x29a): undefined reference to `af_alg_pull_tsgl'
>> s390-linux-ld: crypto/algif_aead.c:518:(.text+0x2b8): undefined reference to `sock_kzfree_s'
>> s390-linux-ld: crypto/algif_aead.c:519:(.text+0x2d6): undefined reference to `sock_kfree_s'
>> s390-linux-ld: crypto/algif_aead.c:520:(.text+0x2e0): undefined reference to `af_alg_release_parent'
   s390-linux-ld: crypto/algif_aead.o: in function `aead_accept_parent_nokey':
>> crypto/algif_aead.c:532:(.text+0x34a): undefined reference to `sock_kmalloc'
>> s390-linux-ld: crypto/algif_aead.c:537:(.text+0x36c): undefined reference to `sock_kmalloc'
   s390-linux-ld: crypto/algif_aead.c:539:(.text+0x398): undefined reference to `sock_kfree_s'
   s390-linux-ld: crypto/algif_aead.o: in function `lock_sock':
>> include/net/sock.h:1720:(.text+0x600): undefined reference to `lock_sock_nested'
   s390-linux-ld: crypto/algif_aead.o: in function `aead_check_key':
>> crypto/algif_aead.c:395:(.text+0x638): undefined reference to `lock_sock_nested'
>> s390-linux-ld: crypto/algif_aead.c:405:(.text+0x688): undefined reference to `release_sock'
   s390-linux-ld: crypto/algif_aead.c:407:(.text+0x692): undefined reference to `release_sock'
   s390-linux-ld: crypto/algif_aead.o: in function `_aead_recvmsg':
>> crypto/algif_aead.c:110:(.text+0x812): undefined reference to `af_alg_wait_for_data'
>> s390-linux-ld: crypto/algif_aead.c:153:(.text+0x9ba): undefined reference to `af_alg_alloc_areq'
>> s390-linux-ld: crypto/algif_aead.c:159:(.text+0x9f2): undefined reference to `af_alg_get_rsgl'
>> s390-linux-ld: crypto/algif_aead.c:231:(.text+0xbb4): undefined reference to `af_alg_pull_tsgl'
>> s390-linux-ld: crypto/algif_aead.c:252:(.text+0xbf8): undefined reference to `af_alg_count_tsgl'
   s390-linux-ld: crypto/algif_aead.c:256:(.text+0xc46): undefined reference to `sock_kmalloc'
   s390-linux-ld: crypto/algif_aead.c:266:(.text+0xca0): undefined reference to `af_alg_pull_tsgl'
   s390-linux-ld: crypto/algif_aead.o: in function `aead_request_set_callback':
>> include/crypto/aead.h:492:(.text+0xf1a): undefined reference to `af_alg_async_cb'
   s390-linux-ld: crypto/algif_aead.o: in function `sock_put':
>> include/net/sock.h:1989:(.text+0xfb0): undefined reference to `sk_free'
   s390-linux-ld: crypto/algif_aead.o: in function `_aead_recvmsg':
>> crypto/algif_aead.c:320:(.text+0x10a6): undefined reference to `af_alg_free_resources'
   s390-linux-ld: crypto/algif_aead.o: in function `lock_sock':
   include/net/sock.h:1720:(.text+0x1158): undefined reference to `lock_sock_nested'
   s390-linux-ld: crypto/algif_aead.o: in function `aead_recvmsg':
>> crypto/algif_aead.c:353:(.text+0x11ce): undefined reference to `af_alg_wmem_wakeup'
   s390-linux-ld: crypto/algif_aead.c:354:(.text+0x11d8): undefined reference to `release_sock'
   s390-linux-ld: crypto/algif_aead.o: in function `algif_aead_exit':
>> crypto/algif_aead.c:585:(.exit.text+0x1e): undefined reference to `af_alg_unregister_type'
   s390-linux-ld: crypto/algif_aead.o: in function `algif_aead_init':
   crypto/algif_aead.c:580:(.init.text+0x1e): undefined reference to `af_alg_register_type'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x10): undefined reference to `af_alg_release'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x18): undefined reference to `sock_no_bind'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x20): undefined reference to `sock_no_connect'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x28): undefined reference to `sock_no_socketpair'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x30): undefined reference to `sock_no_accept'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x38): undefined reference to `sock_no_getname'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x40): undefined reference to `af_alg_poll'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x48): undefined reference to `sock_no_ioctl'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x58): undefined reference to `sock_no_listen'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x60): undefined reference to `sock_no_shutdown'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x90): undefined reference to `sock_no_mmap'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0xe8): undefined reference to `af_alg_release'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0xf0): undefined reference to `sock_no_bind'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0xf8): undefined reference to `sock_no_connect'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x100): undefined reference to `sock_no_socketpair'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x108): undefined reference to `sock_no_accept'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x110): undefined reference to `sock_no_getname'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x118): undefined reference to `af_alg_poll'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x120): undefined reference to `sock_no_ioctl'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x130): undefined reference to `sock_no_listen'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x138): undefined reference to `sock_no_shutdown'
   s390-linux-ld: crypto/algif_aead.o:(.data.rel+0x168): undefined reference to `sock_no_mmap'

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for CRYPTO_USER_API_AEAD
   Depends on [n]: CRYPTO [=y] && NET [=n]
   Selected by [y]:
   - CRYPTO_DEV_ZYNQMP_AES [=y] && CRYPTO [=y] && CRYPTO_HW [=y] && (ZYNQMP_FIRMWARE [=n] || COMPILE_TEST [=y])


vim +71 crypto/algif_aead.c

400c40cf78da00 Stephan Mueller  2015-02-28   60  
eccd02f32a2c25 Linus Torvalds   2015-04-15   61  static int aead_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
400c40cf78da00 Stephan Mueller  2015-02-28   62  {
400c40cf78da00 Stephan Mueller  2015-02-28   63  	struct sock *sk = sock->sk;
400c40cf78da00 Stephan Mueller  2015-02-28   64  	struct alg_sock *ask = alg_sk(sk);
d887c52d6ae43a Stephan Mueller  2017-06-25   65  	struct sock *psk = ask->parent;
d887c52d6ae43a Stephan Mueller  2017-06-25   66  	struct alg_sock *pask = alg_sk(psk);
d887c52d6ae43a Stephan Mueller  2017-06-25   67  	struct aead_tfm *aeadc = pask->private;
d887c52d6ae43a Stephan Mueller  2017-06-25   68  	struct crypto_aead *tfm = aeadc->aead;
d887c52d6ae43a Stephan Mueller  2017-06-25   69  	unsigned int ivsize = crypto_aead_ivsize(tfm);
400c40cf78da00 Stephan Mueller  2015-02-28   70  
2d97591ef43d05 Stephan Mueller  2017-08-02  @71  	return af_alg_sendmsg(sock, msg, size, ivsize);
83094e5e9e49f8 Tadeusz Struk    2016-03-11   72  }
83094e5e9e49f8 Tadeusz Struk    2016-03-11   73  
8d605398425843 Kees Cook        2018-09-18   74  static int crypto_aead_copy_sgl(struct crypto_sync_skcipher *null_tfm,
72548b093ee38a Stephan Mueller  2017-07-30   75  				struct scatterlist *src,
72548b093ee38a Stephan Mueller  2017-07-30   76  				struct scatterlist *dst, unsigned int len)
72548b093ee38a Stephan Mueller  2017-07-30   77  {
8d605398425843 Kees Cook        2018-09-18   78  	SYNC_SKCIPHER_REQUEST_ON_STACK(skreq, null_tfm);
72548b093ee38a Stephan Mueller  2017-07-30   79  
8d605398425843 Kees Cook        2018-09-18   80  	skcipher_request_set_sync_tfm(skreq, null_tfm);
cbdad1f246dd98 Herbert Xu       2020-07-31   81  	skcipher_request_set_callback(skreq, CRYPTO_TFM_REQ_MAY_SLEEP,
72548b093ee38a Stephan Mueller  2017-07-30   82  				      NULL, NULL);
72548b093ee38a Stephan Mueller  2017-07-30   83  	skcipher_request_set_crypt(skreq, src, dst, len, NULL);
72548b093ee38a Stephan Mueller  2017-07-30   84  
72548b093ee38a Stephan Mueller  2017-07-30   85  	return crypto_skcipher_encrypt(skreq);
72548b093ee38a Stephan Mueller  2017-07-30   86  }
72548b093ee38a Stephan Mueller  2017-07-30   87  
d887c52d6ae43a Stephan Mueller  2017-06-25   88  static int _aead_recvmsg(struct socket *sock, struct msghdr *msg,
d887c52d6ae43a Stephan Mueller  2017-06-25   89  			 size_t ignored, int flags)
400c40cf78da00 Stephan Mueller  2015-02-28   90  {
400c40cf78da00 Stephan Mueller  2015-02-28   91  	struct sock *sk = sock->sk;
400c40cf78da00 Stephan Mueller  2015-02-28   92  	struct alg_sock *ask = alg_sk(sk);
d887c52d6ae43a Stephan Mueller  2017-06-25   93  	struct sock *psk = ask->parent;
d887c52d6ae43a Stephan Mueller  2017-06-25   94  	struct alg_sock *pask = alg_sk(psk);
2d97591ef43d05 Stephan Mueller  2017-08-02   95  	struct af_alg_ctx *ctx = ask->private;
d887c52d6ae43a Stephan Mueller  2017-06-25   96  	struct aead_tfm *aeadc = pask->private;
d887c52d6ae43a Stephan Mueller  2017-06-25   97  	struct crypto_aead *tfm = aeadc->aead;
8d605398425843 Kees Cook        2018-09-18   98  	struct crypto_sync_skcipher *null_tfm = aeadc->null_tfm;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10   99  	unsigned int i, as = crypto_aead_authsize(tfm);
2d97591ef43d05 Stephan Mueller  2017-08-02  100  	struct af_alg_async_req *areq;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  101  	struct af_alg_tsgl *tsgl, *tmp;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  102  	struct scatterlist *rsgl_src, *tsgl_src = NULL;
d887c52d6ae43a Stephan Mueller  2017-06-25  103  	int err = 0;
d887c52d6ae43a Stephan Mueller  2017-06-25  104  	size_t used = 0;		/* [in]  TX bufs to be en/decrypted */
d887c52d6ae43a Stephan Mueller  2017-06-25  105  	size_t outlen = 0;		/* [out] RX bufs produced by kernel */
d887c52d6ae43a Stephan Mueller  2017-06-25  106  	size_t usedpages = 0;		/* [in]  RX bufs to be used from user */
d887c52d6ae43a Stephan Mueller  2017-06-25  107  	size_t processed = 0;		/* [in]  TX bufs to be consumed */
400c40cf78da00 Stephan Mueller  2015-02-28  108  
f3c802a1f30013 Herbert Xu       2020-05-30  109  	if (!ctx->init || ctx->more) {
f3c802a1f30013 Herbert Xu       2020-05-30 @110  		err = af_alg_wait_for_data(sk, flags, 0);
11edb555966ed2 Stephan Mueller  2017-11-29  111  		if (err)
11edb555966ed2 Stephan Mueller  2017-11-29  112  			return err;
11edb555966ed2 Stephan Mueller  2017-11-29  113  	}
11edb555966ed2 Stephan Mueller  2017-11-29  114  
400c40cf78da00 Stephan Mueller  2015-02-28  115  	/*
bf63e250c4b1f2 David Howells    2023-06-06  116  	 * Data length provided by caller via sendmsg that has not yet been
bf63e250c4b1f2 David Howells    2023-06-06  117  	 * processed.
400c40cf78da00 Stephan Mueller  2015-02-28  118  	 */
400c40cf78da00 Stephan Mueller  2015-02-28  119  	used = ctx->used;
400c40cf78da00 Stephan Mueller  2015-02-28  120  
400c40cf78da00 Stephan Mueller  2015-02-28  121  	/*
bf63e250c4b1f2 David Howells    2023-06-06  122  	 * Make sure sufficient data is present -- note, the same check is also
bf63e250c4b1f2 David Howells    2023-06-06  123  	 * present in sendmsg. The checks in sendmsg shall provide an
bf63e250c4b1f2 David Howells    2023-06-06  124  	 * information to the data sender that something is wrong, but they are
bf63e250c4b1f2 David Howells    2023-06-06  125  	 * irrelevant to maintain the kernel integrity.  We need this check
bf63e250c4b1f2 David Howells    2023-06-06  126  	 * here too in case user space decides to not honor the error message
bf63e250c4b1f2 David Howells    2023-06-06  127  	 * in sendmsg and still call recvmsg. This check here protects the
bf63e250c4b1f2 David Howells    2023-06-06  128  	 * kernel integrity.
400c40cf78da00 Stephan Mueller  2015-02-28  129  	 */
d887c52d6ae43a Stephan Mueller  2017-06-25  130  	if (!aead_sufficient_data(sk))
d887c52d6ae43a Stephan Mueller  2017-06-25  131  		return -EINVAL;
400c40cf78da00 Stephan Mueller  2015-02-28  132  
0c1e16cd1ec419 Stephan Mueller  2016-12-05  133  	/*
0c1e16cd1ec419 Stephan Mueller  2016-12-05  134  	 * Calculate the minimum output buffer size holding the result of the
0c1e16cd1ec419 Stephan Mueller  2016-12-05  135  	 * cipher operation. When encrypting data, the receiving buffer is
0c1e16cd1ec419 Stephan Mueller  2016-12-05  136  	 * larger by the tag length compared to the input buffer as the
0c1e16cd1ec419 Stephan Mueller  2016-12-05  137  	 * encryption operation generates the tag. For decryption, the input
0c1e16cd1ec419 Stephan Mueller  2016-12-05  138  	 * buffer provides the tag which is consumed resulting in only the
0c1e16cd1ec419 Stephan Mueller  2016-12-05  139  	 * plaintext without a buffer for the tag returned to the caller.
0c1e16cd1ec419 Stephan Mueller  2016-12-05  140  	 */
0c1e16cd1ec419 Stephan Mueller  2016-12-05  141  	if (ctx->enc)
0c1e16cd1ec419 Stephan Mueller  2016-12-05  142  		outlen = used + as;
0c1e16cd1ec419 Stephan Mueller  2016-12-05  143  	else
0c1e16cd1ec419 Stephan Mueller  2016-12-05  144  		outlen = used - as;
19fa77522e45e3 Herbert Xu       2015-05-27  145  
400c40cf78da00 Stephan Mueller  2015-02-28  146  	/*
400c40cf78da00 Stephan Mueller  2015-02-28  147  	 * The cipher operation input data is reduced by the associated data
400c40cf78da00 Stephan Mueller  2015-02-28  148  	 * length as this data is processed separately later on.
400c40cf78da00 Stephan Mueller  2015-02-28  149  	 */
0c1e16cd1ec419 Stephan Mueller  2016-12-05  150  	used -= ctx->aead_assoclen;
400c40cf78da00 Stephan Mueller  2015-02-28  151  
d887c52d6ae43a Stephan Mueller  2017-06-25  152  	/* Allocate cipher request for current operation. */
2d97591ef43d05 Stephan Mueller  2017-08-02 @153  	areq = af_alg_alloc_areq(sk, sizeof(struct af_alg_async_req) +
2d97591ef43d05 Stephan Mueller  2017-08-02  154  				     crypto_aead_reqsize(tfm));
2d97591ef43d05 Stephan Mueller  2017-08-02  155  	if (IS_ERR(areq))
2d97591ef43d05 Stephan Mueller  2017-08-02  156  		return PTR_ERR(areq);
d887c52d6ae43a Stephan Mueller  2017-06-25  157  
d887c52d6ae43a Stephan Mueller  2017-06-25  158  	/* convert iovecs of output buffers into RX SGL */
2d97591ef43d05 Stephan Mueller  2017-08-02 @159  	err = af_alg_get_rsgl(sk, msg, flags, areq, outlen, &usedpages);
d887c52d6ae43a Stephan Mueller  2017-06-25  160  	if (err)
d887c52d6ae43a Stephan Mueller  2017-06-25  161  		goto free;
400c40cf78da00 Stephan Mueller  2015-02-28  162  
d887c52d6ae43a Stephan Mueller  2017-06-25  163  	/*
d887c52d6ae43a Stephan Mueller  2017-06-25  164  	 * Ensure output buffer is sufficiently large. If the caller provides
d887c52d6ae43a Stephan Mueller  2017-06-25  165  	 * less buffer space, only use the relative required input size. This
d887c52d6ae43a Stephan Mueller  2017-06-25  166  	 * allows AIO operation where the caller sent all data to be processed
d887c52d6ae43a Stephan Mueller  2017-06-25  167  	 * and the AIO operation performs the operation on the different chunks
d887c52d6ae43a Stephan Mueller  2017-06-25  168  	 * of the input data.
d887c52d6ae43a Stephan Mueller  2017-06-25  169  	 */
0c1e16cd1ec419 Stephan Mueller  2016-12-05  170  	if (usedpages < outlen) {
d887c52d6ae43a Stephan Mueller  2017-06-25  171  		size_t less = outlen - usedpages;
d887c52d6ae43a Stephan Mueller  2017-06-25  172  
d887c52d6ae43a Stephan Mueller  2017-06-25  173  		if (used < less) {
0c1e16cd1ec419 Stephan Mueller  2016-12-05  174  			err = -EINVAL;
d887c52d6ae43a Stephan Mueller  2017-06-25  175  			goto free;
d887c52d6ae43a Stephan Mueller  2017-06-25  176  		}
d887c52d6ae43a Stephan Mueller  2017-06-25  177  		used -= less;
d887c52d6ae43a Stephan Mueller  2017-06-25  178  		outlen -= less;
0c1e16cd1ec419 Stephan Mueller  2016-12-05  179  	}
400c40cf78da00 Stephan Mueller  2015-02-28  180  
72548b093ee38a Stephan Mueller  2017-07-30  181  	processed = used + ctx->aead_assoclen;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  182  	list_for_each_entry_safe(tsgl, tmp, &ctx->tsgl_list, list) {
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  183  		for (i = 0; i < tsgl->cur; i++) {
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  184  			struct scatterlist *process_sg = tsgl->sg + i;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  185  
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  186  			if (!(process_sg->length) || !sg_page(process_sg))
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  187  				continue;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  188  			tsgl_src = process_sg;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  189  			break;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  190  		}
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  191  		if (tsgl_src)
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  192  			break;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  193  	}
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  194  	if (processed && !tsgl_src) {
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  195  		err = -EFAULT;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  196  		goto free;
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  197  	}
72548b093ee38a Stephan Mueller  2017-07-30  198  
d887c52d6ae43a Stephan Mueller  2017-06-25  199  	/*
72548b093ee38a Stephan Mueller  2017-07-30  200  	 * Copy of AAD from source to destination
72548b093ee38a Stephan Mueller  2017-07-30  201  	 *
72548b093ee38a Stephan Mueller  2017-07-30  202  	 * The AAD is copied to the destination buffer without change. Even
72548b093ee38a Stephan Mueller  2017-07-30  203  	 * when user space uses an in-place cipher operation, the kernel
72548b093ee38a Stephan Mueller  2017-07-30  204  	 * will copy the data as it does not see whether such in-place operation
72548b093ee38a Stephan Mueller  2017-07-30  205  	 * is initiated.
72548b093ee38a Stephan Mueller  2017-07-30  206  	 *
72548b093ee38a Stephan Mueller  2017-07-30  207  	 * To ensure efficiency, the following implementation ensure that the
72548b093ee38a Stephan Mueller  2017-07-30  208  	 * ciphers are invoked to perform a crypto operation in-place. This
72548b093ee38a Stephan Mueller  2017-07-30  209  	 * is achieved by memory management specified as follows.
d887c52d6ae43a Stephan Mueller  2017-06-25  210  	 */
72548b093ee38a Stephan Mueller  2017-07-30  211  
72548b093ee38a Stephan Mueller  2017-07-30  212  	/* Use the RX SGL as source (and destination) for crypto op. */
c1abe6f570aff4 David Howells    2023-06-06  213  	rsgl_src = areq->first_rsgl.sgl.sgt.sgl;
72548b093ee38a Stephan Mueller  2017-07-30  214  
72548b093ee38a Stephan Mueller  2017-07-30  215  	if (ctx->enc) {
72548b093ee38a Stephan Mueller  2017-07-30  216  		/*
72548b093ee38a Stephan Mueller  2017-07-30  217  		 * Encryption operation - The in-place cipher operation is
72548b093ee38a Stephan Mueller  2017-07-30  218  		 * achieved by the following operation:
72548b093ee38a Stephan Mueller  2017-07-30  219  		 *
75d11e75357c1c Stephan Mueller  2017-08-09  220  		 * TX SGL: AAD || PT
72548b093ee38a Stephan Mueller  2017-07-30  221  		 *	    |	   |
72548b093ee38a Stephan Mueller  2017-07-30  222  		 *	    | copy |
72548b093ee38a Stephan Mueller  2017-07-30  223  		 *	    v	   v
75d11e75357c1c Stephan Mueller  2017-08-09  224  		 * RX SGL: AAD || PT || Tag
72548b093ee38a Stephan Mueller  2017-07-30  225  		 */
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  226  		err = crypto_aead_copy_sgl(null_tfm, tsgl_src,
c1abe6f570aff4 David Howells    2023-06-06  227  					   areq->first_rsgl.sgl.sgt.sgl,
c1abe6f570aff4 David Howells    2023-06-06  228  					   processed);
72548b093ee38a Stephan Mueller  2017-07-30  229  		if (err)
72548b093ee38a Stephan Mueller  2017-07-30  230  			goto free;
2d97591ef43d05 Stephan Mueller  2017-08-02 @231  		af_alg_pull_tsgl(sk, processed, NULL, 0);
72548b093ee38a Stephan Mueller  2017-07-30  232  	} else {
72548b093ee38a Stephan Mueller  2017-07-30  233  		/*
72548b093ee38a Stephan Mueller  2017-07-30  234  		 * Decryption operation - To achieve an in-place cipher
72548b093ee38a Stephan Mueller  2017-07-30  235  		 * operation, the following  SGL structure is used:
72548b093ee38a Stephan Mueller  2017-07-30  236  		 *
72548b093ee38a Stephan Mueller  2017-07-30  237  		 * TX SGL: AAD || CT || Tag
72548b093ee38a Stephan Mueller  2017-07-30  238  		 *	    |	   |	 ^
72548b093ee38a Stephan Mueller  2017-07-30  239  		 *	    | copy |	 | Create SGL link.
72548b093ee38a Stephan Mueller  2017-07-30  240  		 *	    v	   v	 |
72548b093ee38a Stephan Mueller  2017-07-30  241  		 * RX SGL: AAD || CT ----+
72548b093ee38a Stephan Mueller  2017-07-30  242  		 */
72548b093ee38a Stephan Mueller  2017-07-30  243  
72548b093ee38a Stephan Mueller  2017-07-30  244  		 /* Copy AAD || CT to RX SGL buffer for in-place operation. */
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  245  		err = crypto_aead_copy_sgl(null_tfm, tsgl_src,
c1abe6f570aff4 David Howells    2023-06-06  246  					   areq->first_rsgl.sgl.sgt.sgl,
c1abe6f570aff4 David Howells    2023-06-06  247  					   outlen);
72548b093ee38a Stephan Mueller  2017-07-30  248  		if (err)
72548b093ee38a Stephan Mueller  2017-07-30  249  			goto free;
72548b093ee38a Stephan Mueller  2017-07-30  250  
72548b093ee38a Stephan Mueller  2017-07-30  251  		/* Create TX SGL for tag and chain it to RX SGL. */
2d97591ef43d05 Stephan Mueller  2017-08-02 @252  		areq->tsgl_entries = af_alg_count_tsgl(sk, processed,
72548b093ee38a Stephan Mueller  2017-07-30  253  						       processed - as);
d887c52d6ae43a Stephan Mueller  2017-06-25  254  		if (!areq->tsgl_entries)
d887c52d6ae43a Stephan Mueller  2017-06-25  255  			areq->tsgl_entries = 1;
76e43e37a40785 Kees Cook        2018-06-12  256  		areq->tsgl = sock_kmalloc(sk, array_size(sizeof(*areq->tsgl),
76e43e37a40785 Kees Cook        2018-06-12  257  							 areq->tsgl_entries),
d887c52d6ae43a Stephan Mueller  2017-06-25  258  					  GFP_KERNEL);
d887c52d6ae43a Stephan Mueller  2017-06-25  259  		if (!areq->tsgl) {
d887c52d6ae43a Stephan Mueller  2017-06-25  260  			err = -ENOMEM;
d887c52d6ae43a Stephan Mueller  2017-06-25  261  			goto free;
d887c52d6ae43a Stephan Mueller  2017-06-25  262  		}
d887c52d6ae43a Stephan Mueller  2017-06-25  263  		sg_init_table(areq->tsgl, areq->tsgl_entries);
72548b093ee38a Stephan Mueller  2017-07-30  264  
72548b093ee38a Stephan Mueller  2017-07-30  265  		/* Release TX SGL, except for tag data and reassign tag data. */
2d97591ef43d05 Stephan Mueller  2017-08-02  266  		af_alg_pull_tsgl(sk, processed, areq->tsgl, processed - as);
72548b093ee38a Stephan Mueller  2017-07-30  267  
72548b093ee38a Stephan Mueller  2017-07-30  268  		/* chain the areq TX SGL holding the tag with RX SGL */
2d97591ef43d05 Stephan Mueller  2017-08-02  269  		if (usedpages) {
72548b093ee38a Stephan Mueller  2017-07-30  270  			/* RX SGL present */
2d97591ef43d05 Stephan Mueller  2017-08-02  271  			struct af_alg_sgl *sgl_prev = &areq->last_rsgl->sgl;
c1abe6f570aff4 David Howells    2023-06-06  272  			struct scatterlist *sg = sgl_prev->sgt.sgl;
72548b093ee38a Stephan Mueller  2017-07-30  273  
c1abe6f570aff4 David Howells    2023-06-06  274  			sg_unmark_end(sg + sgl_prev->sgt.nents - 1);
c1abe6f570aff4 David Howells    2023-06-06  275  			sg_chain(sg, sgl_prev->sgt.nents + 1, areq->tsgl);
72548b093ee38a Stephan Mueller  2017-07-30  276  		} else
72548b093ee38a Stephan Mueller  2017-07-30  277  			/* no RX SGL present (e.g. authentication only) */
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  278  			rsgl_src = areq->tsgl;
72548b093ee38a Stephan Mueller  2017-07-30  279  	}
d887c52d6ae43a Stephan Mueller  2017-06-25  280  
d887c52d6ae43a Stephan Mueller  2017-06-25  281  	/* Initialize the crypto operation */
8e1fa89aa8bc28 Stephan Mueller  2017-11-10  282  	aead_request_set_crypt(&areq->cra_u.aead_req, rsgl_src,
c1abe6f570aff4 David Howells    2023-06-06  283  			       areq->first_rsgl.sgl.sgt.sgl, used, ctx->iv);
2d97591ef43d05 Stephan Mueller  2017-08-02  284  	aead_request_set_ad(&areq->cra_u.aead_req, ctx->aead_assoclen);
2d97591ef43d05 Stephan Mueller  2017-08-02  285  	aead_request_set_tfm(&areq->cra_u.aead_req, tfm);
400c40cf78da00 Stephan Mueller  2015-02-28  286  
d887c52d6ae43a Stephan Mueller  2017-06-25  287  	if (msg->msg_iocb && !is_sync_kiocb(msg->msg_iocb)) {
d887c52d6ae43a Stephan Mueller  2017-06-25  288  		/* AIO operation */
7d2c3f54e6f646 Stephan Mueller  2017-11-10  289  		sock_hold(sk);
d887c52d6ae43a Stephan Mueller  2017-06-25  290  		areq->iocb = msg->msg_iocb;
d53c5135792319 Stephan Mueller  2017-12-08  291  
d53c5135792319 Stephan Mueller  2017-12-08  292  		/* Remember output size that will be generated. */
d53c5135792319 Stephan Mueller  2017-12-08  293  		areq->outlen = outlen;
d53c5135792319 Stephan Mueller  2017-12-08  294  
2d97591ef43d05 Stephan Mueller  2017-08-02  295  		aead_request_set_callback(&areq->cra_u.aead_req,
cbdad1f246dd98 Herbert Xu       2020-07-31  296  					  CRYPTO_TFM_REQ_MAY_SLEEP,
2d97591ef43d05 Stephan Mueller  2017-08-02  297  					  af_alg_async_cb, areq);
2d97591ef43d05 Stephan Mueller  2017-08-02  298  		err = ctx->enc ? crypto_aead_encrypt(&areq->cra_u.aead_req) :
2d97591ef43d05 Stephan Mueller  2017-08-02  299  				 crypto_aead_decrypt(&areq->cra_u.aead_req);
7d2c3f54e6f646 Stephan Mueller  2017-11-10  300  
7d2c3f54e6f646 Stephan Mueller  2017-11-10  301  		/* AIO operation in progress */
cbdad1f246dd98 Herbert Xu       2020-07-31  302  		if (err == -EINPROGRESS)
7d2c3f54e6f646 Stephan Mueller  2017-11-10  303  			return -EIOCBQUEUED;
7d2c3f54e6f646 Stephan Mueller  2017-11-10  304  
7d2c3f54e6f646 Stephan Mueller  2017-11-10  305  		sock_put(sk);
d887c52d6ae43a Stephan Mueller  2017-06-25  306  	} else {
d887c52d6ae43a Stephan Mueller  2017-06-25  307  		/* Synchronous operation */
2d97591ef43d05 Stephan Mueller  2017-08-02  308  		aead_request_set_callback(&areq->cra_u.aead_req,
cbdad1f246dd98 Herbert Xu       2020-07-31  309  					  CRYPTO_TFM_REQ_MAY_SLEEP |
d887c52d6ae43a Stephan Mueller  2017-06-25  310  					  CRYPTO_TFM_REQ_MAY_BACKLOG,
2c3f8b162106a7 Gilad Ben-Yossef 2017-10-18  311  					  crypto_req_done, &ctx->wait);
2c3f8b162106a7 Gilad Ben-Yossef 2017-10-18  312  		err = crypto_wait_req(ctx->enc ?
2d97591ef43d05 Stephan Mueller  2017-08-02  313  				crypto_aead_encrypt(&areq->cra_u.aead_req) :
2d97591ef43d05 Stephan Mueller  2017-08-02  314  				crypto_aead_decrypt(&areq->cra_u.aead_req),
2c3f8b162106a7 Gilad Ben-Yossef 2017-10-18  315  				&ctx->wait);
400c40cf78da00 Stephan Mueller  2015-02-28  316  	}
400c40cf78da00 Stephan Mueller  2015-02-28  317  
d887c52d6ae43a Stephan Mueller  2017-06-25  318  
d887c52d6ae43a Stephan Mueller  2017-06-25  319  free:
7d2c3f54e6f646 Stephan Mueller  2017-11-10  320  	af_alg_free_resources(areq);
400c40cf78da00 Stephan Mueller  2015-02-28  321  
400c40cf78da00 Stephan Mueller  2015-02-28  322  	return err ? err : outlen;
400c40cf78da00 Stephan Mueller  2015-02-28  323  }
400c40cf78da00 Stephan Mueller  2015-02-28  324  

:::::: The code at line 71 was first introduced by commit
:::::: 2d97591ef43d0587be22ad1b0d758d6df4999a0b crypto: af_alg - consolidation of duplicate code

:::::: TO: Stephan Mueller <smueller@chronox.de>
:::::: CC: Herbert Xu <herbert@gondor.apana.org.au>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2024-09-27 14:24 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202409272245.w7aTHfRF-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=dhaval.r.shah@amd.com \
    --cc=git@amd.com \
    --cc=monstr@monstr.eu \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=radhey.shyam.pandey@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.