arch/x86/kernel/cpu/sgx/virt.c:295:36: sparse: sparse: cast removes address space '__user' of expression
From: kernel test robot
Date: Sat Aug 12 2023 - 11:28:26 EST
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: f8de32cc060ba3f63171aaa0e8764d22d8c37978
commit: d155030b1e7c0e448aab22a803f7a71ea2e117d7 x86/sgx: Add helpers to expose ECREATE and EINIT to KVM
date: 2 years, 4 months ago
config: x86_64-allmodconfig (https://download.01.org/0day-ci/archive/20230812/202308122341.T4Bg7lx0-lkp@xxxxxxxxx/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230812/202308122341.T4Bg7lx0-lkp@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308122341.T4Bg7lx0-lkp@xxxxxxxxx/
sparse warnings: (new ones prefixed by >>)
arch/x86/kernel/cpu/sgx/virt.c:59:13: sparse: sparse: incorrect type in assignment (different base types) @@ expected int [assigned] ret @@ got restricted vm_fault_t @@
arch/x86/kernel/cpu/sgx/virt.c:59:13: sparse: expected int [assigned] ret
arch/x86/kernel/cpu/sgx/virt.c:59:13: sparse: got restricted vm_fault_t
arch/x86/kernel/cpu/sgx/virt.c:60:20: sparse: sparse: restricted vm_fault_t degrades to integer
arch/x86/kernel/cpu/sgx/virt.c:95:35: sparse: sparse: symbol 'sgx_vepc_vm_ops' was not declared. Should it be static?
>> arch/x86/kernel/cpu/sgx/virt.c:295:36: sparse: sparse: cast removes address space '__user' of expression
arch/x86/kernel/cpu/sgx/virt.c:326:24: sparse: sparse: cast removes address space '__user' of expression
arch/x86/kernel/cpu/sgx/virt.c:326:43: sparse: sparse: cast removes address space '__user' of expression
arch/x86/kernel/cpu/sgx/virt.c:326:58: sparse: sparse: cast removes address space '__user' of expression
vim +/__user +295 arch/x86/kernel/cpu/sgx/virt.c
260
261 /**
262 * sgx_virt_ecreate() - Run ECREATE on behalf of guest
263 * @pageinfo: Pointer to PAGEINFO structure
264 * @secs: Userspace pointer to SECS page
265 * @trapnr: trap number injected to guest in case of ECREATE error
266 *
267 * Run ECREATE on behalf of guest after KVM traps ECREATE for the purpose
268 * of enforcing policies of guest's enclaves, and return the trap number
269 * which should be injected to guest in case of any ECREATE error.
270 *
271 * Return:
272 * - 0: ECREATE was successful.
273 * - <0: on error.
274 */
275 int sgx_virt_ecreate(struct sgx_pageinfo *pageinfo, void __user *secs,
276 int *trapnr)
277 {
278 int ret;
279
280 /*
281 * @secs is an untrusted, userspace-provided address. It comes from
282 * KVM and is assumed to be a valid pointer which points somewhere in
283 * userspace. This can fault and call SGX or other fault handlers when
284 * userspace mapping @secs doesn't exist.
285 *
286 * Add a WARN() to make sure @secs is already valid userspace pointer
287 * from caller (KVM), who should already have handled invalid pointer
288 * case (for instance, made by malicious guest). All other checks,
289 * such as alignment of @secs, are deferred to ENCLS itself.
290 */
291 if (WARN_ON_ONCE(!access_ok(secs, PAGE_SIZE)))
292 return -EINVAL;
293
294 __uaccess_begin();
> 295 ret = __ecreate(pageinfo, (void *)secs);
296 __uaccess_end();
297
298 if (encls_faulted(ret)) {
299 *trapnr = ENCLS_TRAPNR(ret);
300 return -EFAULT;
301 }
302
303 /* ECREATE doesn't return an error code, it faults or succeeds. */
304 WARN_ON_ONCE(ret);
305 return 0;
306 }
307 EXPORT_SYMBOL_GPL(sgx_virt_ecreate);
308
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki