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  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:   Sun, 9 Aug 2020 06:46:23 +0800
From:   kernel test robot <lkp@...el.com>
To:     Hari Bathini <hbathini@...ux.ibm.com>
Cc:     kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org,
        Michael Ellerman <mpe@...erman.id.au>
Subject: arch/powerpc/platforms/powernv/opal-fadump.c:130:22: sparse: sparse:
 incorrect type in assignment (different base types)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   11030fe96b57ad843518b0e9430f3cd4b3610ce2
commit: 7dee93a9a8808b3d8595e1cc79ccb8b1a7bc7a77 powerpc/fadump: support holes in kernel boot memory area
date:   11 months ago
config: powerpc64-randconfig-s032-20200808 (attached as .config)
compiler: powerpc64-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.2-118-ge1578773-dirty
        git checkout 7dee93a9a8808b3d8595e1cc79ccb8b1a7bc7a77
        # 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__' ARCH=powerpc64 

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 >>)

   arch/powerpc/platforms/powernv/opal-fadump.c:104:41: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] boot_mem_dest_addr @@     got restricted __be64 const [usertype] dest @@
   arch/powerpc/platforms/powernv/opal-fadump.c:104:41: sparse:     expected unsigned long long [usertype] boot_mem_dest_addr
   arch/powerpc/platforms/powernv/opal-fadump.c:104:41: sparse:     got restricted __be64 const [usertype] dest
>> arch/powerpc/platforms/powernv/opal-fadump.c:130:22: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long base @@     got restricted __be64 const [usertype] src @@
>> arch/powerpc/platforms/powernv/opal-fadump.c:130:22: sparse:     expected unsigned long base
>> arch/powerpc/platforms/powernv/opal-fadump.c:130:22: sparse:     got restricted __be64 const [usertype] src
>> arch/powerpc/platforms/powernv/opal-fadump.c:131:22: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long size @@     got restricted __be64 const [usertype] size @@
>> arch/powerpc/platforms/powernv/opal-fadump.c:131:22: sparse:     expected unsigned long size
   arch/powerpc/platforms/powernv/opal-fadump.c:131:22: sparse:     got restricted __be64 const [usertype] size
   arch/powerpc/platforms/powernv/opal-fadump.c:146:46: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long reserve_dump_area_start @@     got restricted __be64 const [usertype] dest @@
   arch/powerpc/platforms/powernv/opal-fadump.c:146:46: sparse:     expected unsigned long reserve_dump_area_start
   arch/powerpc/platforms/powernv/opal-fadump.c:146:46: sparse:     got restricted __be64 const [usertype] dest
>> arch/powerpc/platforms/powernv/opal-fadump.c:196:41: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __be64 [usertype] src @@     got unsigned long long @@
   arch/powerpc/platforms/powernv/opal-fadump.c:196:41: sparse:     expected restricted __be64 [usertype] src
>> arch/powerpc/platforms/powernv/opal-fadump.c:196:41: sparse:     got unsigned long long
   arch/powerpc/platforms/powernv/opal-fadump.c:197:41: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __be64 [usertype] dest @@     got unsigned long long [usertype] addr @@
   arch/powerpc/platforms/powernv/opal-fadump.c:197:41: sparse:     expected restricted __be64 [usertype] dest
   arch/powerpc/platforms/powernv/opal-fadump.c:197:41: sparse:     got unsigned long long [usertype] addr
>> arch/powerpc/platforms/powernv/opal-fadump.c:198:41: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __be64 [usertype] size @@     got unsigned long long @@
   arch/powerpc/platforms/powernv/opal-fadump.c:198:41: sparse:     expected restricted __be64 [usertype] size
   arch/powerpc/platforms/powernv/opal-fadump.c:198:41: sparse:     got unsigned long long
   arch/powerpc/platforms/powernv/opal-fadump.c:208:53: sparse: sparse: restricted __be64 degrades to integer
   arch/powerpc/platforms/powernv/opal-fadump.c:276:56: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected unsigned long long [usertype] src @@     got restricted __be64 [usertype] src @@
   arch/powerpc/platforms/powernv/opal-fadump.c:276:56: sparse:     expected unsigned long long [usertype] src
   arch/powerpc/platforms/powernv/opal-fadump.c:276:56: sparse:     got restricted __be64 [usertype] src
   arch/powerpc/platforms/powernv/opal-fadump.c:277:56: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected unsigned long long [usertype] dest @@     got restricted __be64 [usertype] dest @@
   arch/powerpc/platforms/powernv/opal-fadump.c:277:56: sparse:     expected unsigned long long [usertype] dest
   arch/powerpc/platforms/powernv/opal-fadump.c:277:56: sparse:     got restricted __be64 [usertype] dest
   arch/powerpc/platforms/powernv/opal-fadump.c:278:56: sparse: sparse: incorrect type in argument 4 (different base types) @@     expected unsigned long long [usertype] size @@     got restricted __be64 [usertype] size @@
   arch/powerpc/platforms/powernv/opal-fadump.c:278:56: sparse:     expected unsigned long long [usertype] size
   arch/powerpc/platforms/powernv/opal-fadump.c:278:56: sparse:     got restricted __be64 [usertype] size
   arch/powerpc/platforms/powernv/opal-fadump.c:573:38: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] dumped_bytes @@     got restricted __be64 const [usertype] size @@
   arch/powerpc/platforms/powernv/opal-fadump.c:573:38: sparse:     expected unsigned long long [usertype] dumped_bytes
   arch/powerpc/platforms/powernv/opal-fadump.c:573:38: sparse:     got restricted __be64 const [usertype] size
   arch/powerpc/platforms/powernv/opal-fadump.c:689:16: sparse: sparse: cast to restricted __be64
   arch/powerpc/platforms/powernv/opal-fadump.c:707:24: sparse: sparse: cast to restricted __be64
   arch/powerpc/platforms/powernv/opal-fadump.c: note: in included file:
   arch/powerpc/platforms/powernv/opal-fadump.h:138:33: sparse: sparse: restricted __be64 degrades to integer

vim +130 arch/powerpc/platforms/powernv/opal-fadump.c

   110	
   111	/*
   112	 * This function is called in the capture kernel to get configuration details
   113	 * from metadata setup by the first kernel.
   114	 */
   115	static void opal_fadump_get_config(struct fw_dump *fadump_conf,
   116					   const struct opal_fadump_mem_struct *fdm)
   117	{
   118		unsigned long base, size, last_end, hole_size;
   119		int i;
   120	
   121		if (!fadump_conf->dump_active)
   122			return;
   123	
   124		last_end = 0;
   125		hole_size = 0;
   126		fadump_conf->boot_memory_size = 0;
   127	
   128		pr_debug("Boot memory regions:\n");
   129		for (i = 0; i < fdm->region_cnt; i++) {
 > 130			base = fdm->rgn[i].src;
 > 131			size = fdm->rgn[i].size;
   132			pr_debug("\t[%03d] base: 0x%lx, size: 0x%lx\n", i, base, size);
   133	
   134			fadump_conf->boot_mem_addr[i] = base;
   135			fadump_conf->boot_mem_sz[i] = size;
   136			fadump_conf->boot_memory_size += size;
   137			hole_size += (base - last_end);
   138	
   139			last_end = base + size;
   140		}
   141	
   142		/*
   143		 * Start address of reserve dump area (permanent reservation) for
   144		 * re-registering FADump after dump capture.
   145		 */
   146		fadump_conf->reserve_dump_area_start = fdm->rgn[0].dest;
   147	
   148		/*
   149		 * Rarely, but it can so happen that system crashes before all
   150		 * boot memory regions are registered for MPIPL. In such
   151		 * cases, warn that the vmcore may not be accurate and proceed
   152		 * anyway as that is the best bet considering free pages, cache
   153		 * pages, user pages, etc are usually filtered out.
   154		 *
   155		 * Hope the memory that could not be preserved only has pages
   156		 * that are usually filtered out while saving the vmcore.
   157		 */
   158		if (fdm->region_cnt > fdm->registered_regions) {
   159			pr_warn("Not all memory regions were saved!!!\n");
   160			pr_warn("  Unsaved memory regions:\n");
   161			i = fdm->registered_regions;
   162			while (i < fdm->region_cnt) {
   163				pr_warn("\t[%03d] base: 0x%llx, size: 0x%llx\n",
   164					i, fdm->rgn[i].src, fdm->rgn[i].size);
   165				i++;
   166			}
   167	
   168			pr_warn("If the unsaved regions only contain pages that are filtered out (eg. free/user pages), the vmcore should still be usable.\n");
   169			pr_warn("WARNING: If the unsaved regions contain kernel pages, the vmcore will be corrupted.\n");
   170		}
   171	
   172		fadump_conf->boot_mem_top = (fadump_conf->boot_memory_size + hole_size);
   173		fadump_conf->boot_mem_regs_cnt = fdm->region_cnt;
   174		opal_fadump_update_config(fadump_conf, fdm);
   175	}
   176	
   177	/* Initialize kernel metadata */
   178	static void opal_fadump_init_metadata(struct opal_fadump_mem_struct *fdm)
   179	{
   180		fdm->version = OPAL_FADUMP_VERSION;
   181		fdm->region_cnt = 0;
   182		fdm->registered_regions = 0;
   183		fdm->fadumphdr_addr = 0;
   184	}
   185	
   186	static u64 opal_fadump_init_mem_struct(struct fw_dump *fadump_conf)
   187	{
   188		u64 addr = fadump_conf->reserve_dump_area_start;
   189		int i;
   190	
   191		opal_fdm = __va(fadump_conf->kernel_metadata);
   192		opal_fadump_init_metadata(opal_fdm);
   193	
   194		/* Boot memory regions */
   195		for (i = 0; i < fadump_conf->boot_mem_regs_cnt; i++) {
 > 196			opal_fdm->rgn[i].src	= fadump_conf->boot_mem_addr[i];
   197			opal_fdm->rgn[i].dest	= addr;
 > 198			opal_fdm->rgn[i].size	= fadump_conf->boot_mem_sz[i];
   199	
   200			opal_fdm->region_cnt++;
   201			addr += fadump_conf->boot_mem_sz[i];
   202		}
   203	
   204		/*
   205		 * Kernel metadata is passed to f/w and retrieved in capture kerenl.
   206		 * So, use it to save fadump header address instead of calculating it.
   207		 */
   208		opal_fdm->fadumphdr_addr = (opal_fdm->rgn[0].dest +
   209					    fadump_conf->boot_memory_size);
   210	
   211		opal_fadump_update_config(fadump_conf, opal_fdm);
   212	
   213		return addr;
   214	}
   215	

---
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" (30353 bytes)

Powered by blists - more mailing lists