[PATCH v2] drm/ast: Fixed CVE for DP501

kernel test robot lkp at intel.com
Fri Dec 11 18:52:46 UTC 2020


Hi KuoHsiang,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm-exynos/exynos-drm-next]
[also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next drm-tip/drm-tip linus/master v5.10-rc7 next-20201211]
[cannot apply to drm/drm-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/KuoHsiang-Chou/drm-ast-Fixed-CVE-for-DP501/20201211-162352
base:   https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
config: x86_64-randconfig-s022-20201210 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.3-179-ga00755aa-dirty
        # https://github.com/0day-ci/linux/commit/75af180bfa7bc2227224653381d743b9396b41c2
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review KuoHsiang-Chou/drm-ast-Fixed-CVE-for-DP501/20201211-162352
        git checkout 75af180bfa7bc2227224653381d743b9396b41c2
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64 

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


"sparse warnings: (new ones prefixed by >>)"
>> drivers/gpu/drm/ast/ast_dp501.c:357:39: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void volatile [noderef] __iomem *addr @@     got unsigned int [usertype] * @@
   drivers/gpu/drm/ast/ast_dp501.c:357:39: sparse:     expected void volatile [noderef] __iomem *addr
   drivers/gpu/drm/ast/ast_dp501.c:357:39: sparse:     got unsigned int [usertype] *
   drivers/gpu/drm/ast/ast_dp501.c:383:39: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void volatile [noderef] __iomem *addr @@     got unsigned int [usertype] * @@
   drivers/gpu/drm/ast/ast_dp501.c:383:39: sparse:     expected void volatile [noderef] __iomem *addr
   drivers/gpu/drm/ast/ast_dp501.c:383:39: sparse:     got unsigned int [usertype] *

vim +357 drivers/gpu/drm/ast/ast_dp501.c

   332	
   333	bool ast_dp501_read_edid(struct drm_device *dev, u8 *ediddata)
   334	{
   335		struct ast_private *ast = to_ast_private(dev);
   336		u32 i, boot_address, offset, data;
   337	
   338		if (ast->config_mode == ast_use_p2a) {
   339			boot_address = get_fw_base(ast);
   340	
   341			/* validate FW version */
   342			offset = AST_DP501_GBL_VERSION;
   343			data = ast_mindwm(ast, boot_address + offset);
   344			if ((data & AST_DP501_FW_VERSION_MASK) != AST_DP501_FW_VERSION_1)
   345				return false;
   346	
   347			/* validate PnP Monitor */
   348			offset = AST_DP501_PNPMONITOR;
   349			data = ast_mindwm(ast, boot_address + offset);
   350			if (!(data & AST_DP501_PNP_CONNECTED))
   351				return false;
   352	
   353			/* Read EDID */
   354			offset = AST_DP501_EDID_DATA;
   355			for (i = 0; i < 128; i += 4) {
   356				data = ast_mindwm(ast, boot_address + offset + i);
 > 357				writel(data, (u32 *)(ediddata + i));
   358			}
   359		} else {
   360			if (!ast->dp501_fw_buf)
   361				return false;
   362	
   363			/* dummy read */
   364			offset = 0x0000;
   365			data = readl(ast->dp501_fw_buf + offset);
   366	
   367			/* validate FW version */
   368			offset = AST_DP501_GBL_VERSION;
   369			data = readl(ast->dp501_fw_buf + offset);
   370			if ((data & AST_DP501_FW_VERSION_MASK) != AST_DP501_FW_VERSION_1)
   371				return false;
   372	
   373			/* validate PnP Monitor */
   374			offset = AST_DP501_PNPMONITOR;
   375			data = readl(ast->dp501_fw_buf + offset);
   376			if (!(data & AST_DP501_PNP_CONNECTED))
   377				return false;
   378	
   379			/* Read EDID */
   380			offset = AST_DP501_EDID_DATA;
   381			for (i = 0; i < 128; i += 4) {
   382				data = readl(ast->dp501_fw_buf + offset + i);
   383				writel(data, (u32 *)(ediddata + i));
   384			}
   385		}
   386	
   387		return true;
   388	}
   389	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 38525 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20201212/793a8b83/attachment-0001.gz>


More information about the dri-devel mailing list