arch/x86/kernel/cpu/sgx/virt.c:295:36: sparse: sparse: cast removes address space '__user' of expression
From: kernel test robot
Date: Sat Jun 04 2022 - 05:46:48 EST
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 032dcf09e2bf7c822be25b4abef7a6c913870d98
commit: d155030b1e7c0e448aab22a803f7a71ea2e117d7 x86/sgx: Add helpers to expose ECREATE and EINIT to KVM
date: 1 year, 2 months ago
config: x86_64-allyesconfig (https://download.01.org/0day-ci/archive/20220604/202206041712.XoJv2ESx-lkp@xxxxxxxxx/config)
compiler: gcc-11 (Debian 11.3.0-1) 11.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-18-g56afb504-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d155030b1e7c0e448aab22a803f7a71ea2e117d7
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout d155030b1e7c0e448aab22a803f7a71ea2e117d7
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=x86_64 SHELL=/bin/bash arch/x86/kernel/cpu/sgx/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <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://01.org/lkp