CC: [email protected]
CC: [email protected]
TO: Andra Paraschiv <[email protected]>
CC: "Greg Kroah-Hartman" <[email protected]>
CC: Alexander Graf <[email protected]>

Hi Andra,

First bad commit (maybe != root cause):

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   f838f8d2b694cf9d524dc4423e9dd2db13892f3f
commit: 0f5c7b7484394e26afc07c063290fb43c4ba42c7 nitro_enclaves: Add Makefile 
for the Nitro Enclaves driver
date:   3 months ago
:::::: branch date: 25 hours ago
:::::: commit date: 3 months ago
config: i386-randconfig-m021-20201227 (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 <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

New smatch warnings:
drivers/virt/nitro_enclaves/ne_misc_dev.c:935 ne_set_user_memory_region_ioctl() 
warn: should '(((phys_contig_mem_regions[i]) - mem_map) + (0)) << 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 '(((phys_contig_mem_regions[i]) - mem_map) + (0)) << 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 <[email protected]>
:::::: CC: Greg Kroah-Hartman <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to