Re: [PATCH v5 2/7] crypto: ccp: Ensure implicit SEV/SNP init and shutdown in ioctls

kernel test robot
2025-02-27T18:58:02Z

Hi Ashish,

kernel test robot noticed the following build warnings:

[auto build test WARNING on herbert-cryptodev-2.6/master]
[also build test WARNING on kvm/queue kvm/next linus/master v6.14-rc4 next-20250227]
[cannot apply to kvm/linux-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Ashish-Kalra/crypto-ccp-Move-dev_info-err-messages-for-SEV-SNP-init-and-shutdown/20250226-050640
base: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master
patch link: https://lore.kernel.org/r/1d7b31af0eb36d860907c1e89e553e642f3882e0.1740512583.git.ashish.kalra%40amd.com
patch subject: [PATCH v5 2/7] crypto: ccp: Ensure implicit SEV/SNP init and shutdown in ioctls
config: x86_64-allyesconfig (https://download.01.org/0day-ci/archive/20250228/202502280243.uLlWONet-lkp@intel.com/config)
compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250228/202502280243.uLlWONet-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/202502280243.uLlWONet-lkp@intel.com/

All warnings (new ones prefixed by >>):

In file included from drivers/crypto/ccp/sev-dev.c:22:
In file included from include/linux/ccp.h:14:
In file included from include/linux/scatterlist.h:8:
In file included from include/linux/mm.h:2224:
include/linux/vmstat.h:504:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
504 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
505 | item];
| ~~~~
include/linux/vmstat.h:511:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
511 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
512 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
include/linux/vmstat.h:524:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
524 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
525 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
>> drivers/crypto/ccp/sev-dev.c:1970:7: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
1970 | if (!writable)
| ^~~~~~~~~
drivers/crypto/ccp/sev-dev.c:2012:9: note: uninitialized use occurs here
2012 | return ret;
| ^~~
drivers/crypto/ccp/sev-dev.c:1970:3: note: remove the 'if' if its condition is always false
1970 | if (!writable)
| ^~~~~~~~~~~~~~
1971 | goto e_free_cert;
| ~~~~~~~~~~~~~~~~
drivers/crypto/ccp/sev-dev.c:1927:9: note: initialize the variable 'ret' to silence this warning
1927 | int ret, error;
| ^
| = 0
4 warnings generated.

vim +1970 drivers/crypto/ccp/sev-dev.c

1917
1918 static int sev_ioctl_do_pdh_export(struct sev_issue_cmd *argp, bool writable)
1919 {
1920 struct sev_device *sev = psp_master->sev_data;
1921 struct sev_user_data_pdh_cert_export input;
1922 void *pdh_blob = NULL, *cert_blob = NULL;
1923 struct sev_data_pdh_cert_export data;
1924 void __user *input_cert_chain_address;
1925 void __user *input_pdh_cert_address;
1926 bool shutdown_required = false;
1927 int ret, error;
1928
1929 if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
1930 return -EFAULT;
1931
1932 memset(&data, 0, sizeof(data));
1933
1934 /* Userspace wants to query the certificate length. */
1935 if (!input.pdh_cert_address ||
1936 !input.pdh_cert_len ||
1937 !input.cert_chain_address)
1938 goto cmd;
1939
1940 input_pdh_cert_address = (void __user *)input.pdh_cert_address;
1941 input_cert_chain_address = (void __user *)input.cert_chain_address;
1942
1943 /* Allocate a physically contiguous buffer to store the PDH blob. */
1944 if (input.pdh_cert_len > SEV_FW_BLOB_MAX_SIZE)
1945 return -EFAULT;
1946
1947 /* Allocate a physically contiguous buffer to store the cert chain blob. */
1948 if (input.cert_chain_len > SEV_FW_BLOB_MAX_SIZE)
1949 return -EFAULT;
1950
1951 pdh_blob = kzalloc(input.pdh_cert_len, GFP_KERNEL);
1952 if (!pdh_blob)
1953 return -ENOMEM;
1954
1955 data.pdh_cert_address = __psp_pa(pdh_blob);
1956 data.pdh_cert_len = input.pdh_cert_len;
1957
1958 cert_blob = kzalloc(input.cert_chain_len, GFP_KERNEL);
1959 if (!cert_blob) {
1960 ret = -ENOMEM;
1961 goto e_free_pdh;
1962 }
1963
1964 data.cert_chain_address = __psp_pa(cert_blob);
1965 data.cert_chain_len = input.cert_chain_len;
1966
1967 cmd:
1968 /* If platform is not in INIT state then transition it to INIT. */
1969 if (sev->state != SEV_STATE_INIT) {
> 1970 if (!writable)
1971 goto e_free_cert;
1972 ret = __sev_platform_init_locked(&error);
1973 if (ret) {
1974 argp->error = SEV_RET_INVALID_PLATFORM_STATE;
1975 goto e_free_cert;
1976 }
1977 shutdown_required = true;
1978 }
1979
1980 ret = __sev_do_cmd_locked(SEV_CMD_PDH_CERT_EXPORT, &data, &argp->error);
1981
1982 /* If we query the length, FW responded with expected data. */
1983 input.cert_chain_len = data.cert_chain_len;
1984 input.pdh_cert_len = data.pdh_cert_len;
1985
1986 if (copy_to_user((void __user *)argp->data, &input, sizeof(input))) {
1987 ret = -EFAULT;
1988 goto e_free_cert;
1989 }
1990
1991 if (pdh_blob) {
1992 if (copy_to_user(input_pdh_cert_address,
1993 pdh_blob, input.pdh_cert_len)) {
1994 ret = -EFAULT;
1995 goto e_free_cert;
1996 }
1997 }
1998
1999 if (cert_blob) {
2000 if (copy_to_user(input_cert_chain_address,
2001 cert_blob, input.cert_chain_len))
2002 ret = -EFAULT;
2003 }
2004
2005 e_free_cert:
2006 if (shutdown_required)
2007 __sev_platform_shutdown_locked(&error);
2008
2009 kfree(cert_blob);
2010 e_free_pdh:
2011 kfree(pdh_blob);
2012 return ret;
2013 }
2014

--
0-DAY CI Kernel Test Service