All of lore.kernel.org
 help / color / mirror / Atom feed
* drivers/virt/nitro_enclaves/ne_misc_dev.c:935 ne_set_user_memory_region_ioctl() warn: should ' << 12' be a 64 bit
@ 2020-11-27  1:57 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2020-11-27  1:57 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 15615 bytes --]

CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Andra Paraschiv <andraprs@amazon.com>
CC: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
CC: Alexander Graf <graf@amazon.com>

Hi Andra,

First bad commit (maybe != root cause):

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   85a2c56cb4454c73f56d3099d96942e7919b292f
commit: 0f5c7b7484394e26afc07c063290fb43c4ba42c7 nitro_enclaves: Add Makefile for the Nitro Enclaves driver
date:   9 weeks ago
:::::: branch date: 7 hours ago
:::::: commit date: 9 weeks ago
config: i386-randconfig-m031-20201127 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/virt/nitro_enclaves/ne_misc_dev.c:935 ne_set_user_memory_region_ioctl() warn: should ' << 12' be a 64 bit type?

Old smatch warnings:
drivers/virt/nitro_enclaves/ne_misc_dev.c:967 ne_set_user_memory_region_ioctl() warn: should ' << 12' be a 64 bit type?

vim +935 drivers/virt/nitro_enclaves/ne_misc_dev.c

7dc9d4309fdb777 Andra Paraschiv 2020-09-21   826  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   827  /**
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   828   * ne_set_user_memory_region_ioctl() - Add user space memory region to the slot
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   829   *				       associated with the current enclave.
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   830   * @ne_enclave :	Private data associated with the current enclave.
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   831   * @mem_region :	User space memory region to be associated with the given slot.
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   832   *
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   833   * Context: Process context. This function is called with the ne_enclave mutex held.
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   834   * Return:
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   835   * * 0 on success.
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   836   * * Negative return value on failure.
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   837   */
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   838  static int ne_set_user_memory_region_ioctl(struct ne_enclave *ne_enclave,
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   839  	struct ne_user_memory_region mem_region)
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   840  {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   841  	long gup_rc = 0;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   842  	unsigned long i = 0;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   843  	unsigned long max_nr_pages = 0;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   844  	unsigned long memory_size = 0;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   845  	struct ne_mem_region *ne_mem_region = NULL;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   846  	unsigned long nr_phys_contig_mem_regions = 0;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   847  	struct pci_dev *pdev = ne_devs.ne_pci_dev->pdev;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   848  	struct page **phys_contig_mem_regions = NULL;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   849  	int rc = -EINVAL;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   850  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   851  	rc = ne_sanity_check_user_mem_region(ne_enclave, mem_region);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   852  	if (rc < 0)
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   853  		return rc;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   854  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   855  	ne_mem_region = kzalloc(sizeof(*ne_mem_region), GFP_KERNEL);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   856  	if (!ne_mem_region)
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   857  		return -ENOMEM;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   858  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   859  	max_nr_pages = mem_region.memory_size / NE_MIN_MEM_REGION_SIZE;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   860  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   861  	ne_mem_region->pages = kcalloc(max_nr_pages, sizeof(*ne_mem_region->pages),
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   862  				       GFP_KERNEL);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   863  	if (!ne_mem_region->pages) {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   864  		rc = -ENOMEM;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   865  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   866  		goto free_mem_region;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   867  	}
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   868  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   869  	phys_contig_mem_regions = kcalloc(max_nr_pages, sizeof(*phys_contig_mem_regions),
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   870  					  GFP_KERNEL);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   871  	if (!phys_contig_mem_regions) {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   872  		rc = -ENOMEM;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   873  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   874  		goto free_mem_region;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   875  	}
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   876  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   877  	do {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   878  		i = ne_mem_region->nr_pages;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   879  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   880  		if (i == max_nr_pages) {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   881  			dev_err_ratelimited(ne_misc_dev.this_device,
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   882  					    "Reached max nr of pages in the pages data struct\n");
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   883  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   884  			rc = -ENOMEM;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   885  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   886  			goto put_pages;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   887  		}
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   888  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   889  		gup_rc = get_user_pages(mem_region.userspace_addr + memory_size, 1, FOLL_GET,
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   890  					ne_mem_region->pages + i, NULL);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   891  		if (gup_rc < 0) {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   892  			rc = gup_rc;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   893  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   894  			dev_err_ratelimited(ne_misc_dev.this_device,
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   895  					    "Error in get user pages [rc=%d]\n", rc);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   896  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   897  			goto put_pages;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   898  		}
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   899  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   900  		rc = ne_sanity_check_user_mem_region_page(ne_enclave, ne_mem_region->pages[i]);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   901  		if (rc < 0)
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   902  			goto put_pages;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   903  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   904  		/*
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   905  		 * TODO: Update once handled non-contiguous memory regions
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   906  		 * received from user space or contiguous physical memory regions
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   907  		 * larger than 2 MiB e.g. 8 MiB.
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   908  		 */
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   909  		phys_contig_mem_regions[i] = ne_mem_region->pages[i];
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   910  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   911  		memory_size += page_size(ne_mem_region->pages[i]);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   912  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   913  		ne_mem_region->nr_pages++;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   914  	} while (memory_size < mem_region.memory_size);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   915  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   916  	/*
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   917  	 * TODO: Update once handled non-contiguous memory regions received
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   918  	 * from user space or contiguous physical memory regions larger than
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   919  	 * 2 MiB e.g. 8 MiB.
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   920  	 */
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   921  	nr_phys_contig_mem_regions = ne_mem_region->nr_pages;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   922  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   923  	if ((ne_enclave->nr_mem_regions + nr_phys_contig_mem_regions) >
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   924  	    ne_enclave->max_mem_regions) {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   925  		dev_err_ratelimited(ne_misc_dev.this_device,
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   926  				    "Reached max memory regions %lld\n",
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   927  				    ne_enclave->max_mem_regions);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   928  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   929  		rc = -NE_ERR_MEM_MAX_REGIONS;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   930  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   931  		goto put_pages;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   932  	}
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   933  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   934  	for (i = 0; i < nr_phys_contig_mem_regions; i++) {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21  @935  		u64 phys_region_addr = page_to_phys(phys_contig_mem_regions[i]);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   936  		u64 phys_region_size = page_size(phys_contig_mem_regions[i]);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   937  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   938  		if (phys_region_size & (NE_MIN_MEM_REGION_SIZE - 1)) {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   939  			dev_err_ratelimited(ne_misc_dev.this_device,
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   940  					    "Physical mem region size is not multiple of 2 MiB\n");
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   941  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   942  			rc = -EINVAL;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   943  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   944  			goto put_pages;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   945  		}
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   946  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   947  		if (!IS_ALIGNED(phys_region_addr, NE_MIN_MEM_REGION_SIZE)) {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   948  			dev_err_ratelimited(ne_misc_dev.this_device,
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   949  					    "Physical mem region address is not 2 MiB aligned\n");
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   950  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   951  			rc = -EINVAL;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   952  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   953  			goto put_pages;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   954  		}
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   955  	}
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   956  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   957  	ne_mem_region->memory_size = mem_region.memory_size;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   958  	ne_mem_region->userspace_addr = mem_region.userspace_addr;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   959  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   960  	list_add(&ne_mem_region->mem_region_list_entry, &ne_enclave->mem_regions_list);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   961  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   962  	for (i = 0; i < nr_phys_contig_mem_regions; i++) {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   963  		struct ne_pci_dev_cmd_reply cmd_reply = {};
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   964  		struct slot_add_mem_req slot_add_mem_req = {};
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   965  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   966  		slot_add_mem_req.slot_uid = ne_enclave->slot_uid;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   967  		slot_add_mem_req.paddr = page_to_phys(phys_contig_mem_regions[i]);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   968  		slot_add_mem_req.size = page_size(phys_contig_mem_regions[i]);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   969  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   970  		rc = ne_do_request(pdev, SLOT_ADD_MEM,
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   971  				   &slot_add_mem_req, sizeof(slot_add_mem_req),
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   972  				   &cmd_reply, sizeof(cmd_reply));
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   973  		if (rc < 0) {
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   974  			dev_err_ratelimited(ne_misc_dev.this_device,
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   975  					    "Error in slot add mem [rc=%d]\n", rc);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   976  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   977  			kfree(phys_contig_mem_regions);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   978  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   979  			/*
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   980  			 * Exit here without put pages as memory regions may
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   981  			 * already been added.
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   982  			 */
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   983  			return rc;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   984  		}
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   985  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   986  		ne_enclave->mem_size += slot_add_mem_req.size;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   987  		ne_enclave->nr_mem_regions++;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   988  	}
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   989  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   990  	kfree(phys_contig_mem_regions);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   991  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   992  	return 0;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   993  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   994  put_pages:
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   995  	for (i = 0; i < ne_mem_region->nr_pages; i++)
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   996  		put_page(ne_mem_region->pages[i]);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   997  free_mem_region:
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   998  	kfree(phys_contig_mem_regions);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21   999  	kfree(ne_mem_region->pages);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21  1000  	kfree(ne_mem_region);
7dc9d4309fdb777 Andra Paraschiv 2020-09-21  1001  
7dc9d4309fdb777 Andra Paraschiv 2020-09-21  1002  	return rc;
7dc9d4309fdb777 Andra Paraschiv 2020-09-21  1003  }
7dc9d4309fdb777 Andra Paraschiv 2020-09-21  1004  

:::::: The code at line 935 was first introduced by commit
:::::: 7dc9d4309fdb7773df13a17e203c16966676f21a nitro_enclaves: Add logic for setting an enclave memory region

:::::: TO: Andra Paraschiv <andraprs@amazon.com>
:::::: CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 35110 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-11-27  1:57 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-27  1:57 drivers/virt/nitro_enclaves/ne_misc_dev.c:935 ne_set_user_memory_region_ioctl() warn: should ' << 12' be a 64 bit kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.