On 4/6/25 23:57, Herbert Xu wrote: > The recent reordering of code in sev_ioctl_do_pdh_export triggered > a false-positive may-be-uninitialized warning from gcc: > > In file included from ../include/linux/sched/task.h:13, > from ../include/linux/sched/signal.h:9, > from ../include/linux/rcuwait.h:6, > from ../include/linux/percpu-rwsem.h:7, > from ../include/linux/fs.h:34, > from ../include/linux/compat.h:17, > from ../arch/x86/include/asm/ia32.h:7, > from ../arch/x86/include/asm/elf.h:10, > from ../include/linux/elf.h:6, > from ../include/linux/module.h:19, > from ../drivers/crypto/ccp/sev-dev.c:11: > In function ‘copy_to_user’, > inlined from ‘sev_ioctl_do_pdh_export’ at ../drivers/crypto/ccp/sev-dev.c:2036:7, > inlined from ‘sev_ioctl’ at ../drivers/crypto/ccp/sev-dev.c:2249:9: > ../include/linux/uaccess.h:225:16: warning: ‘input_cert_chain_address’ may be used uninitialized [-Wmaybe-uninitialized] > 225 | return _copy_to_user(to, from, n); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~ > ../drivers/crypto/ccp/sev-dev.c: In function ‘sev_ioctl’: > ../drivers/crypto/ccp/sev-dev.c:1961:22: note: ‘input_cert_chain_address’ was declared here > 1961 | void __user *input_cert_chain_address; > | ^~~~~~~~~~~~~~~~~~~~~~~~ > > Silence it by moving the initialisation of the variables in question > prior to the NULL check. > > Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Acked-by: Tom Lendacky <thomas.lendacky@xxxxxxx> > > diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c > index 671347702ae7..c9ab4bd38d68 100644 > --- a/drivers/crypto/ccp/sev-dev.c > +++ b/drivers/crypto/ccp/sev-dev.c > @@ -1968,15 +1968,15 @@ static int sev_ioctl_do_pdh_export(struct sev_issue_cmd *argp, bool writable) > > memset(&data, 0, sizeof(data)); > > + input_pdh_cert_address = (void __user *)input.pdh_cert_address; > + input_cert_chain_address = (void __user *)input.cert_chain_address; > + > /* Userspace wants to query the certificate length. */ > if (!input.pdh_cert_address || > !input.pdh_cert_len || > !input.cert_chain_address) > goto cmd; > > - input_pdh_cert_address = (void __user *)input.pdh_cert_address; > - input_cert_chain_address = (void __user *)input.cert_chain_address; > - > /* Allocate a physically contiguous buffer to store the PDH blob. */ > if (input.pdh_cert_len > SEV_FW_BLOB_MAX_SIZE) > return -EFAULT;