lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:   Thu, 20 May 2021 05:53:04 +0800
From:   kernel test robot <lkp@...el.com>
To:     Lenny Szubowicz <lszubowi@...hat.com>
Cc:     kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org,
        Ard Biesheuvel <ardb@...nel.org>
Subject: drivers/firmware/efi/mokvar-table.c:142:33: sparse: sparse:
 incorrect type in argument 1 (different address spaces)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   c3d0e3fd41b7f0f5d5d5b6022ab7e813f04ea727
commit: 58c909022a5a56cd1d9e89c8c5461fd1f6a27bb5 efi: Support for MOK variable config table
date:   8 months ago
config: ia64-allmodconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-341-g8af24329-dirty
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58c909022a5a56cd1d9e89c8c5461fd1f6a27bb5
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 58c909022a5a56cd1d9e89c8c5461fd1f6a27bb5
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=ia64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>


sparse warnings: (new ones prefixed by >>)
>> drivers/firmware/efi/mokvar-table.c:142:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void volatile [noderef] __iomem *addr @@     got void *va @@
   drivers/firmware/efi/mokvar-table.c:142:33: sparse:     expected void volatile [noderef] __iomem *addr
   drivers/firmware/efi/mokvar-table.c:142:33: sparse:     got void *va
>> drivers/firmware/efi/mokvar-table.c:151:28: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected void *va @@     got void [noderef] __iomem * @@
   drivers/firmware/efi/mokvar-table.c:151:28: sparse:     expected void *va
   drivers/firmware/efi/mokvar-table.c:151:28: sparse:     got void [noderef] __iomem *
   drivers/firmware/efi/mokvar-table.c:179:17: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void volatile [noderef] __iomem *addr @@     got void *va @@
   drivers/firmware/efi/mokvar-table.c:179:17: sparse:     expected void volatile [noderef] __iomem *addr
   drivers/firmware/efi/mokvar-table.c:179:17: sparse:     got void *va

vim +142 drivers/firmware/efi/mokvar-table.c

    77	
    78	/*
    79	 * efi_mokvar_table_init() - Early boot validation of EFI MOK config table
    80	 *
    81	 * If present, validate and compute the size of the EFI MOK variable
    82	 * configuration table. This table may be provided by an EFI boot loader
    83	 * as an alternative to ordinary EFI variables, due to platform-dependent
    84	 * limitations. The memory occupied by this table is marked as reserved.
    85	 *
    86	 * This routine must be called before efi_free_boot_services() in order
    87	 * to guarantee that it can mark the table as reserved.
    88	 *
    89	 * Implicit inputs:
    90	 * efi.mokvar_table:	Physical address of EFI MOK variable config table
    91	 *			or special value that indicates no such table.
    92	 *
    93	 * Implicit outputs:
    94	 * efi_mokvar_table_size: Computed size of EFI MOK variable config table.
    95	 *			The table is considered present and valid if this
    96	 *			is non-zero.
    97	 */
    98	void __init efi_mokvar_table_init(void)
    99	{
   100		efi_memory_desc_t md;
   101		u64 end_pa;
   102		void *va = NULL;
   103		size_t cur_offset = 0;
   104		size_t offset_limit;
   105		size_t map_size = 0;
   106		size_t map_size_needed = 0;
   107		size_t size;
   108		struct efi_mokvar_table_entry *mokvar_entry;
   109		int err = -EINVAL;
   110	
   111		if (!efi_enabled(EFI_MEMMAP))
   112			return;
   113	
   114		if (efi.mokvar_table == EFI_INVALID_TABLE_ADDR)
   115			return;
   116		/*
   117		 * The EFI MOK config table must fit within a single EFI memory
   118		 * descriptor range.
   119		 */
   120		err = efi_mem_desc_lookup(efi.mokvar_table, &md);
   121		if (err) {
   122			pr_warn("EFI MOKvar config table is not within the EFI memory map\n");
   123			return;
   124		}
   125		end_pa = efi_mem_desc_end(&md);
   126		if (efi.mokvar_table >= end_pa) {
   127			pr_err("EFI memory descriptor containing MOKvar config table is invalid\n");
   128			return;
   129		}
   130		offset_limit = end_pa - efi.mokvar_table;
   131		/*
   132		 * Validate the MOK config table. Since there is no table header
   133		 * from which we could get the total size of the MOK config table,
   134		 * we compute the total size as we validate each variably sized
   135		 * entry, remapping as necessary.
   136		 */
   137		while (cur_offset + sizeof(*mokvar_entry) <= offset_limit) {
   138			mokvar_entry = va + cur_offset;
   139			map_size_needed = cur_offset + sizeof(*mokvar_entry);
   140			if (map_size_needed > map_size) {
   141				if (va)
 > 142					early_memunmap(va, map_size);
   143				/*
   144				 * Map a little more than the fixed size entry
   145				 * header, anticipating some data. It's safe to
   146				 * do so as long as we stay within current memory
   147				 * descriptor.
   148				 */
   149				map_size = min(map_size_needed + 2*EFI_PAGE_SIZE,
   150					       offset_limit);
 > 151				va = early_memremap(efi.mokvar_table, map_size);
   152				if (!va) {
   153					pr_err("Failed to map EFI MOKvar config table pa=0x%lx, size=%zu.\n",
   154					       efi.mokvar_table, map_size);
   155					return;
   156				}
   157				mokvar_entry = va + cur_offset;
   158			}
   159	
   160			/* Check for last sentinel entry */
   161			if (mokvar_entry->name[0] == '\0') {
   162				if (mokvar_entry->data_size != 0)
   163					break;
   164				err = 0;
   165				break;
   166			}
   167	
   168			/* Sanity check that the name is null terminated */
   169			size = strnlen(mokvar_entry->name,
   170				       sizeof(mokvar_entry->name));
   171			if (size >= sizeof(mokvar_entry->name))
   172				break;
   173	
   174			/* Advance to the next entry */
   175			cur_offset = map_size_needed + mokvar_entry->data_size;
   176		}
   177	
   178		if (va)
   179			early_memunmap(va, map_size);
   180		if (err) {
   181			pr_err("EFI MOKvar config table is not valid\n");
   182			return;
   183		}
   184		efi_mem_reserve(efi.mokvar_table, map_size_needed);
   185		efi_mokvar_table_size = map_size_needed;
   186	}
   187	

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

Download attachment ".config.gz" of type "application/gzip" (61968 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ