CC: [email protected]
CC: [email protected]
CC: [email protected]
TO: Thomas Zimmermann <[email protected]>
CC: Maxime Ripard <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   fb3b0673b7d5b477ed104949450cd511337ba3c6
commit: 55dc449a7c60d3df5a8f0b71bbae9d5173c864f5 drm/ast: Handle failed I2C 
initialization gracefully
date:   4 weeks ago
:::::: branch date: 11 hours ago
:::::: commit date: 4 weeks ago
config: riscv-randconfig-c006-20220113 
(https://download.01.org/0day-ci/archive/20220114/[email protected]/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
d1021978b8e7e35dcc30201ca1731d64b5a602a8)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=55dc449a7c60d3df5a8f0b71bbae9d5173c864f5
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 55dc449a7c60d3df5a8f0b71bbae9d5173c864f5
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
   fs/overlayfs/export.c:654:34: note: '?' condition is false
   fs/overlayfs/export.c:655:24: note: '?' condition is false
           struct dentry *real = upper ?: (index ?: lowerpath->dentry);
                                 ^
   fs/overlayfs/export.c:655:34: note: '?' condition is false
           struct dentry *real = upper ?: (index ?: lowerpath->dentry);
                                           ^
   fs/overlayfs/export.c:655:2: note: 'real' initialized to a null pointer value
           struct dentry *real = upper ?: (index ?: lowerpath->dentry);
           ^~~~~~~~~~~~~~~~~~~
   fs/overlayfs/export.c:661:16: note: Passing null pointer value via 1st 
parameter 'dentry'
           if (!d_is_dir(real))
                         ^~~~
   fs/overlayfs/export.c:661:7: note: Calling 'd_is_dir'
           if (!d_is_dir(real))
                ^~~~~~~~~~~~~~
   include/linux/dcache.h:420:22: note: Passing null pointer value via 1st 
parameter 'dentry'
           return d_can_lookup(dentry) || d_is_autodir(dentry);
                               ^~~~~~
   include/linux/dcache.h:420:9: note: Calling 'd_can_lookup'
           return d_can_lookup(dentry) || d_is_autodir(dentry);
                  ^~~~~~~~~~~~~~~~~~~~
   include/linux/dcache.h:410:24: note: Passing null pointer value via 1st 
parameter 'dentry'
           return __d_entry_type(dentry) == DCACHE_DIRECTORY_TYPE;
                                 ^~~~~~
   include/linux/dcache.h:410:9: note: Calling '__d_entry_type'
           return __d_entry_type(dentry) == DCACHE_DIRECTORY_TYPE;
                  ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/dcache.h:395:9: note: Access to field 'd_flags' results in a 
dereference of a null pointer (loaded from variable 'dentry')
           return dentry->d_flags & DCACHE_ENTRY_TYPE;
                  ^~~~~~
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (2 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (2 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   7 warnings generated.
   drivers/gpu/drm/ast/ast_mode.c:291:2: warning: Value stored to 'jreg' is 
never read [clang-analyzer-deadcode.DeadStores]
           jreg = ast_io_read8(ast, AST_IO_INPUT_STATUS1_READ);
           ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_mode.c:291:2: note: Value stored to 'jreg' is never 
read
           jreg = ast_io_read8(ast, AST_IO_INPUT_STATUS1_READ);
           ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_mode.c:300:2: warning: Value stored to 'jreg' is 
never read [clang-analyzer-deadcode.DeadStores]
           jreg = ast_io_read8(ast, AST_IO_INPUT_STATUS1_READ);
           ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_mode.c:300:2: note: Value stored to 'jreg' is never 
read
           jreg = ast_io_read8(ast, AST_IO_INPUT_STATUS1_READ);
           ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/ast/ast_mode.c:1232:3: warning: Use of memory after it is 
>> freed [clang-analyzer-unix.Malloc]
                   drm_connector_update_edid_property(&ast_connector->base, 
edid);
                   ^                                                        ~~~~
   drivers/gpu/drm/ast/ast_mode.c:1217:6: note: Assuming field 'tx_chip_type' 
is equal to AST_TX_DP501
           if (ast->tx_chip_type == AST_TX_DP501) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_mode.c:1217:2: note: Taking true branch
           if (ast->tx_chip_type == AST_TX_DP501) {
           ^
   drivers/gpu/drm/ast/ast_mode.c:1220:7: note: Assuming 'edid' is non-null
                   if (!edid)
                       ^~~~~
   drivers/gpu/drm/ast/ast_mode.c:1220:3: note: Taking false branch
                   if (!edid)
                   ^
   drivers/gpu/drm/ast/ast_mode.c:1224:7: note: Assuming 'flags' is false
                   if (flags)
                       ^~~~~
   drivers/gpu/drm/ast/ast_mode.c:1224:3: note: Taking false branch
                   if (flags)
                   ^
   drivers/gpu/drm/ast/ast_mode.c:1227:4: note: Memory is released
                           kfree(edid);
                           ^~~~~~~~~~~
   drivers/gpu/drm/ast/ast_mode.c:1229:7: note: 'flags' is false
           if (!flags && ast_connector->i2c)
                ^~~~~
   drivers/gpu/drm/ast/ast_mode.c:1229:6: note: Left side of '&&' is true
           if (!flags && ast_connector->i2c)
               ^
   drivers/gpu/drm/ast/ast_mode.c:1229:16: note: Assuming field 'i2c' is null
           if (!flags && ast_connector->i2c)
                         ^~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_mode.c:1229:2: note: Taking false branch
           if (!flags && ast_connector->i2c)
           ^
   drivers/gpu/drm/ast/ast_mode.c:1231:6: note: 'edid' is non-null
           if (edid) {
               ^~~~
   drivers/gpu/drm/ast/ast_mode.c:1231:2: note: Taking true branch
           if (edid) {
           ^
   drivers/gpu/drm/ast/ast_mode.c:1232:3: note: Use of memory after it is freed
                   drm_connector_update_edid_property(&ast_connector->base, 
edid);
                   ^                                                        ~~~~
   Suppressed 4 warnings (4 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 warnings generated.
   Suppressed 4 warnings (4 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   drivers/gpu/drm/ast/ast_dp501.c:227:20: warning: Access to field 'data' 
results in a dereference of a null pointer (loaded from field 'dp501_fw') 
[clang-analyzer-core.NullDereference]
                           fw_addr = (u8 *)ast->dp501_fw->data;
                                           ^
   drivers/gpu/drm/ast/ast_dp501.c:498:6: note: Assuming field 'chip' is equal 
to AST2300
           if (ast->chip == AST2300 || ast->chip == AST2400) {
               ^~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_dp501.c:498:27: note: Left side of '||' is true
           if (ast->chip == AST2300 || ast->chip == AST2400) {
                                    ^
   drivers/gpu/drm/ast/ast_dp501.c:500:3: note: Control jumps to 'case 8:'  at 
line 504
                   switch (jreg & 0x0e) {
                   ^
   drivers/gpu/drm/ast/ast_dp501.c:505:4: note: Calling 'ast_launch_m68k'
                           ast_launch_m68k(dev);
                           ^~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_dp501.c:213:6: note: Assuming field 'config_mode' is 
equal to ast_use_p2a
           if (ast->config_mode != ast_use_p2a)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_dp501.c:213:2: note: Taking false branch
           if (ast->config_mode != ast_use_p2a)
           ^
   drivers/gpu/drm/ast/ast_dp501.c:217:6: note: Assuming 'data' is 0
           if (!data) {
               ^~~~~
   drivers/gpu/drm/ast/ast_dp501.c:217:2: note: Taking true branch
           if (!data) {
           ^
   drivers/gpu/drm/ast/ast_dp501.c:219:7: note: Assuming field 'dp501_fw_addr' 
is null
                   if (ast->dp501_fw_addr) {
                       ^~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_dp501.c:219:3: note: Taking false branch
                   if (ast->dp501_fw_addr) {
                   ^
   drivers/gpu/drm/ast/ast_dp501.c:223:8: note: Assuming field 'dp501_fw' is 
null
                           if (!ast->dp501_fw &&
                               ^~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_dp501.c:223:8: note: Left side of '&&' is true
   drivers/gpu/drm/ast/ast_dp501.c:224:8: note: Calling 
'ast_load_dp501_microcode'
                               ast_load_dp501_microcode(dev) < 0)
                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/ast/ast_dp501.c:25:6: note: Assuming 'ret' is 0
           if (ret)
               ^~~
   drivers/gpu/drm/ast/ast_dp501.c:25:2: note: Taking false branch
           if (ret)
           ^
   drivers/gpu/drm/ast/ast_dp501.c:28:9: note: Calling 
'devm_add_action_or_reset'
           return devm_add_action_or_reset(dev->dev, ast_release_firmware, ast);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/device.h:254:6: note: Assuming 'ret' is not equal to 0

vim +1232 drivers/gpu/drm/ast/ast_mode.c

312fec1405dd54 Dave Airlie       2012-02-29  1204  
4961eb60f14553 Thomas Zimmermann 2019-11-07  1205  /*
4961eb60f14553 Thomas Zimmermann 2019-11-07  1206   * Connector
4961eb60f14553 Thomas Zimmermann 2019-11-07  1207   */
4961eb60f14553 Thomas Zimmermann 2019-11-07  1208  
312fec1405dd54 Dave Airlie       2012-02-29  1209  static int 
ast_get_modes(struct drm_connector *connector)
312fec1405dd54 Dave Airlie       2012-02-29  1210  {
312fec1405dd54 Dave Airlie       2012-02-29  1211       struct ast_connector 
*ast_connector = to_ast_connector(connector);
fa7dbd7688849d Thomas Zimmermann 2020-06-17  1212       struct ast_private *ast 
= to_ast_private(connector->dev);
55dc449a7c60d3 Thomas Zimmermann 2021-12-06  1213       struct edid *edid = 
NULL;
83c6620bae3f14 Dave Airlie       2014-03-28  1214       bool flags = false;
55dc449a7c60d3 Thomas Zimmermann 2021-12-06  1215       int ret;
6c9bd4432b2527 Gregory Williams  2021-07-30  1216  
83c6620bae3f14 Dave Airlie       2014-03-28  1217       if (ast->tx_chip_type 
== AST_TX_DP501) {
83c6620bae3f14 Dave Airlie       2014-03-28  1218               
ast->dp501_maxclk = 0xff;
83c6620bae3f14 Dave Airlie       2014-03-28  1219               edid = 
kmalloc(128, GFP_KERNEL);
83c6620bae3f14 Dave Airlie       2014-03-28  1220               if (!edid)
83c6620bae3f14 Dave Airlie       2014-03-28  1221                       return 
-ENOMEM;
312fec1405dd54 Dave Airlie       2012-02-29  1222  
83c6620bae3f14 Dave Airlie       2014-03-28  1223               flags = 
ast_dp501_read_edid(connector->dev, (u8 *)edid);
83c6620bae3f14 Dave Airlie       2014-03-28  1224               if (flags)
83c6620bae3f14 Dave Airlie       2014-03-28  1225                       
ast->dp501_maxclk = ast_get_dp501_max_clk(connector->dev);
83c6620bae3f14 Dave Airlie       2014-03-28  1226               else
83c6620bae3f14 Dave Airlie       2014-03-28  1227                       
kfree(edid);
83c6620bae3f14 Dave Airlie       2014-03-28  1228       }
55dc449a7c60d3 Thomas Zimmermann 2021-12-06  1229       if (!flags && 
ast_connector->i2c)
312fec1405dd54 Dave Airlie       2012-02-29  1230               edid = 
drm_get_edid(connector, &ast_connector->i2c->adapter);
312fec1405dd54 Dave Airlie       2012-02-29  1231       if (edid) {
c555f02371c338 Daniel Vetter     2018-07-09 @1232               
drm_connector_update_edid_property(&ast_connector->base, edid);
312fec1405dd54 Dave Airlie       2012-02-29  1233               ret = 
drm_add_edid_modes(connector, edid);
993dcb05e47e35 Jani Nikula       2012-08-15  1234               kfree(edid);
312fec1405dd54 Dave Airlie       2012-02-29  1235               return ret;
6c9bd4432b2527 Gregory Williams  2021-07-30  1236       }
c555f02371c338 Daniel Vetter     2018-07-09  1237       
drm_connector_update_edid_property(&ast_connector->base, NULL);
312fec1405dd54 Dave Airlie       2012-02-29  1238       return 0;
312fec1405dd54 Dave Airlie       2012-02-29  1239  }
312fec1405dd54 Dave Airlie       2012-02-29  1240  

:::::: The code at line 1232 was first introduced by commit
:::::: c555f02371c338b06752577aebf738dbdb6907bd drm: drop _mode_ from 
update_edit_property()

:::::: TO: Daniel Vetter <[email protected]>
:::::: CC: Daniel Vetter <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to