lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <563b1dd6-8e91-4cb1-8981-5f18dc1d7130@intel.com>
Date: Mon, 8 Jan 2024 16:07:20 -0700
From: Dave Jiang <dave.jiang@...el.com>
To: Tom Zanussi <tom.zanussi@...ux.intel.com>, <herbert@...dor.apana.org.au>,
	<davem@...emloft.net>, <fenghua.yu@...el.com>
CC: <dan.carpenter@...aro.org>, <tony.luck@...el.com>,
	<linux-kernel@...r.kernel.org>, <linux-crypto@...r.kernel.org>,
	<dmaengine@...r.kernel.org>
Subject: Re: [PATCH] crypto: iaa - Remove header table code



On 1/8/24 15:53, Tom Zanussi wrote:
> The header table and related code is currently unused - it was
> included and used for canned mode, but canned mode has been removed,
> so this code can be safely removed as well.
> 
> This indirectly fixes a bug reported by Dan Carpenter.
> 
> Reported-by: Dan Carpenter <dan.carpenter@...aro.org>
> Closes: https://lore.kernel.org/linux-crypto/b2e0bd974981291e16882686a2b9b1db3986abe4.camel@linux.intel.com/T/#m4403253d6a4347a925fab4fc1cdb4ef7c095fb86
> Signed-off-by: Tom Zanussi <tom.zanussi@...ux.intel.com>

Reviewed-by: Dave Jiang <dave.jiang@...el.com>

> ---
>  drivers/crypto/intel/iaa/iaa_crypto.h         |  25 ----
>  .../crypto/intel/iaa/iaa_crypto_comp_fixed.c  |   1 -
>  drivers/crypto/intel/iaa/iaa_crypto_main.c    | 108 +-----------------
>  3 files changed, 3 insertions(+), 131 deletions(-)
> 
> diff --git a/drivers/crypto/intel/iaa/iaa_crypto.h b/drivers/crypto/intel/iaa/iaa_crypto.h
> index 014420f7beb0..2524091a5f70 100644
> --- a/drivers/crypto/intel/iaa/iaa_crypto.h
> +++ b/drivers/crypto/intel/iaa/iaa_crypto.h
> @@ -59,10 +59,8 @@ struct iaa_device_compression_mode {
>  	const char			*name;
>  
>  	struct aecs_comp_table_record	*aecs_comp_table;
> -	struct aecs_decomp_table_record	*aecs_decomp_table;
>  
>  	dma_addr_t			aecs_comp_table_dma_addr;
> -	dma_addr_t			aecs_decomp_table_dma_addr;
>  };
>  
>  /* Representation of IAA device with wqs, populated by probe */
> @@ -107,23 +105,6 @@ struct aecs_comp_table_record {
>  	u32 reserved_padding[2];
>  } __packed;
>  
> -/* AECS for decompress */
> -struct aecs_decomp_table_record {
> -	u32 crc;
> -	u32 xor_checksum;
> -	u32 low_filter_param;
> -	u32 high_filter_param;
> -	u32 output_mod_idx;
> -	u32 drop_init_decomp_out_bytes;
> -	u32 reserved[36];
> -	u32 output_accum_data[2];
> -	u32 out_bits_valid;
> -	u32 bit_off_indexing;
> -	u32 input_accum_data[64];
> -	u8  size_qw[32];
> -	u32 decomp_state[1220];
> -} __packed;
> -
>  int iaa_aecs_init_fixed(void);
>  void iaa_aecs_cleanup_fixed(void);
>  
> @@ -136,9 +117,6 @@ struct iaa_compression_mode {
>  	int			ll_table_size;
>  	u32			*d_table;
>  	int			d_table_size;
> -	u32			*header_table;
> -	int			header_table_size;
> -	u16			gen_decomp_table_flags;
>  	iaa_dev_comp_init_fn_t	init;
>  	iaa_dev_comp_free_fn_t	free;
>  };
> @@ -148,9 +126,6 @@ int add_iaa_compression_mode(const char *name,
>  			     int ll_table_size,
>  			     const u32 *d_table,
>  			     int d_table_size,
> -			     const u8 *header_table,
> -			     int header_table_size,
> -			     u16 gen_decomp_table_flags,
>  			     iaa_dev_comp_init_fn_t init,
>  			     iaa_dev_comp_free_fn_t free);
>  
> diff --git a/drivers/crypto/intel/iaa/iaa_crypto_comp_fixed.c b/drivers/crypto/intel/iaa/iaa_crypto_comp_fixed.c
> index 45cf5d74f0fb..19d9a333ac49 100644
> --- a/drivers/crypto/intel/iaa/iaa_crypto_comp_fixed.c
> +++ b/drivers/crypto/intel/iaa/iaa_crypto_comp_fixed.c
> @@ -78,7 +78,6 @@ int iaa_aecs_init_fixed(void)
>  				       sizeof(fixed_ll_sym),
>  				       fixed_d_sym,
>  				       sizeof(fixed_d_sym),
> -				       NULL, 0, 0,
>  				       init_fixed_mode, NULL);
>  	if (!ret)
>  		pr_debug("IAA fixed compression mode initialized\n");
> diff --git a/drivers/crypto/intel/iaa/iaa_crypto_main.c b/drivers/crypto/intel/iaa/iaa_crypto_main.c
> index dfd3baf0a8d8..39a5fc905c4d 100644
> --- a/drivers/crypto/intel/iaa/iaa_crypto_main.c
> +++ b/drivers/crypto/intel/iaa/iaa_crypto_main.c
> @@ -258,16 +258,14 @@ static void free_iaa_compression_mode(struct iaa_compression_mode *mode)
>  	kfree(mode->name);
>  	kfree(mode->ll_table);
>  	kfree(mode->d_table);
> -	kfree(mode->header_table);
>  
>  	kfree(mode);
>  }
>  
>  /*
> - * IAA Compression modes are defined by an ll_table, a d_table, and an
> - * optional header_table.  These tables are typically generated and
> - * captured using statistics collected from running actual
> - * compress/decompress workloads.
> + * IAA Compression modes are defined by an ll_table and a d_table.
> + * These tables are typically generated and captured using statistics
> + * collected from running actual compress/decompress workloads.
>   *
>   * A module or other kernel code can add and remove compression modes
>   * with a given name using the exported @add_iaa_compression_mode()
> @@ -315,9 +313,6 @@ EXPORT_SYMBOL_GPL(remove_iaa_compression_mode);
>   * @ll_table_size: The ll table size in bytes
>   * @d_table: The d table
>   * @d_table_size: The d table size in bytes
> - * @header_table: Optional header table
> - * @header_table_size: Optional header table size in bytes
> - * @gen_decomp_table_flags: Otional flags used to generate the decomp table
>   * @init: Optional callback function to init the compression mode data
>   * @free: Optional callback function to free the compression mode data
>   *
> @@ -330,9 +325,6 @@ int add_iaa_compression_mode(const char *name,
>  			     int ll_table_size,
>  			     const u32 *d_table,
>  			     int d_table_size,
> -			     const u8 *header_table,
> -			     int header_table_size,
> -			     u16 gen_decomp_table_flags,
>  			     iaa_dev_comp_init_fn_t init,
>  			     iaa_dev_comp_free_fn_t free)
>  {
> @@ -370,16 +362,6 @@ int add_iaa_compression_mode(const char *name,
>  		mode->d_table_size = d_table_size;
>  	}
>  
> -	if (header_table) {
> -		mode->header_table = kzalloc(header_table_size, GFP_KERNEL);
> -		if (!mode->header_table)
> -			goto free;
> -		memcpy(mode->header_table, header_table, header_table_size);
> -		mode->header_table_size = header_table_size;
> -	}
> -
> -	mode->gen_decomp_table_flags = gen_decomp_table_flags;
> -
>  	mode->init = init;
>  	mode->free = free;
>  
> @@ -420,10 +402,6 @@ static void free_device_compression_mode(struct iaa_device *iaa_device,
>  	if (device_mode->aecs_comp_table)
>  		dma_free_coherent(dev, size, device_mode->aecs_comp_table,
>  				  device_mode->aecs_comp_table_dma_addr);
> -	if (device_mode->aecs_decomp_table)
> -		dma_free_coherent(dev, size, device_mode->aecs_decomp_table,
> -				  device_mode->aecs_decomp_table_dma_addr);
> -
>  	kfree(device_mode);
>  }
>  
> @@ -440,73 +418,6 @@ static int check_completion(struct device *dev,
>  			    bool compress,
>  			    bool only_once);
>  
> -static int decompress_header(struct iaa_device_compression_mode *device_mode,
> -			     struct iaa_compression_mode *mode,
> -			     struct idxd_wq *wq)
> -{
> -	dma_addr_t src_addr, src2_addr;
> -	struct idxd_desc *idxd_desc;
> -	struct iax_hw_desc *desc;
> -	struct device *dev;
> -	int ret = 0;
> -
> -	idxd_desc = idxd_alloc_desc(wq, IDXD_OP_BLOCK);
> -	if (IS_ERR(idxd_desc))
> -		return PTR_ERR(idxd_desc);
> -
> -	desc = idxd_desc->iax_hw;
> -
> -	dev = &wq->idxd->pdev->dev;
> -
> -	src_addr = dma_map_single(dev, (void *)mode->header_table,
> -				  mode->header_table_size, DMA_TO_DEVICE);
> -	dev_dbg(dev, "%s: mode->name %s, src_addr %llx, dev %p, src %p, slen %d\n",
> -		__func__, mode->name, src_addr,	dev,
> -		mode->header_table, mode->header_table_size);
> -	if (unlikely(dma_mapping_error(dev, src_addr))) {
> -		dev_dbg(dev, "dma_map_single err, exiting\n");
> -		ret = -ENOMEM;
> -		return ret;
> -	}
> -
> -	desc->flags = IAX_AECS_GEN_FLAG;
> -	desc->opcode = IAX_OPCODE_DECOMPRESS;
> -
> -	desc->src1_addr = (u64)src_addr;
> -	desc->src1_size = mode->header_table_size;
> -
> -	src2_addr = device_mode->aecs_decomp_table_dma_addr;
> -	desc->src2_addr = (u64)src2_addr;
> -	desc->src2_size = 1088;
> -	dev_dbg(dev, "%s: mode->name %s, src2_addr %llx, dev %p, src2_size %d\n",
> -		__func__, mode->name, desc->src2_addr, dev, desc->src2_size);
> -	desc->max_dst_size = 0; // suppressed output
> -
> -	desc->decompr_flags = mode->gen_decomp_table_flags;
> -
> -	desc->priv = 0;
> -
> -	desc->completion_addr = idxd_desc->compl_dma;
> -
> -	ret = idxd_submit_desc(wq, idxd_desc);
> -	if (ret) {
> -		pr_err("%s: submit_desc failed ret=0x%x\n", __func__, ret);
> -		goto out;
> -	}
> -
> -	ret = check_completion(dev, idxd_desc->iax_completion, false, false);
> -	if (ret)
> -		dev_dbg(dev, "%s: mode->name %s check_completion failed ret=%d\n",
> -			__func__, mode->name, ret);
> -	else
> -		dev_dbg(dev, "%s: mode->name %s succeeded\n", __func__,
> -			mode->name);
> -out:
> -	dma_unmap_single(dev, src_addr, 1088, DMA_TO_DEVICE);
> -
> -	return ret;
> -}
> -
>  static int init_device_compression_mode(struct iaa_device *iaa_device,
>  					struct iaa_compression_mode *mode,
>  					int idx, struct idxd_wq *wq)
> @@ -529,24 +440,11 @@ static int init_device_compression_mode(struct iaa_device *iaa_device,
>  	if (!device_mode->aecs_comp_table)
>  		goto free;
>  
> -	device_mode->aecs_decomp_table = dma_alloc_coherent(dev, size,
> -							    &device_mode->aecs_decomp_table_dma_addr, GFP_KERNEL);
> -	if (!device_mode->aecs_decomp_table)
> -		goto free;
> -
>  	/* Add Huffman table to aecs */
>  	memset(device_mode->aecs_comp_table, 0, sizeof(*device_mode->aecs_comp_table));
>  	memcpy(device_mode->aecs_comp_table->ll_sym, mode->ll_table, mode->ll_table_size);
>  	memcpy(device_mode->aecs_comp_table->d_sym, mode->d_table, mode->d_table_size);
>  
> -	if (mode->header_table) {
> -		ret = decompress_header(device_mode, mode, wq);
> -		if (ret) {
> -			pr_debug("iaa header decompression failed: ret=%d\n", ret);
> -			goto free;
> -		}
> -	}
> -
>  	if (mode->init) {
>  		ret = mode->init(device_mode);
>  		if (ret)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ