Hi Thomas,

url:    
https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/ast-Fix-I2C-corner-cases-wrt-init-cleanup/20211201-233308
base:   6a8f90ec433e2f5de5fc16d7a4839771b7027cc0
config: i386-randconfig-m021-20211203 
(https://download.01.org/0day-ci/archive/20211204/[email protected]/config)
compiler: gcc-9 (Debian 9.3.0-22) 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]>

smatch warnings:
drivers/gpu/drm/ast/ast_mode.c:1231 ast_get_modes() error: uninitialized symbol 
'edid'.
drivers/gpu/drm/ast/ast_mode.c:1232 ast_get_modes() warn: passing freed memory 
'edid'

vim +/edid +1231 drivers/gpu/drm/ast/ast_mode.c

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);
312fec1405dd54 Dave Airlie       2012-02-29  1213       struct edid *edid;
                                                        ^^^^^^^^^^^^^^^^^^
312fec1405dd54 Dave Airlie       2012-02-29  1214       int ret;
83c6620bae3f14 Dave Airlie       2014-03-28  1215       bool flags = false;
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       }
75bd8f71712a8a Thomas Zimmermann 2021-12-01  1229       if (!flags && 
ast_connector->i2c)

If "flags" is false then "edid" is either freed or uninitialized.  So
if "ast_connector->i2c" also is false then that's going to cause
problems.  Hopefully that part of the condition can just be removed?

        if (!flags)
                edid = drm_get_edid(connector, &ast_connector->i2c->adapter);

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  }

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

Reply via email to