* drivers/gpu/drm/ast/ast_mode.c:1232:3: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc]
@ 2022-01-14 6:12 kernel test robot
2022-01-18 7:33 ` kernel test robot
0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2022-01-14 6:12 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 17463 bytes --]
CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Thomas Zimmermann <tzimmermann@suse.de>
CC: Maxime Ripard <maxime@cerno.tech>
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/202201141416.VfNXpsi5-lkp(a)intel.com/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 <lkp@intel.com>
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 <daniel.vetter@ffwll.ch>
:::::: CC: Daniel Vetter <daniel.vetter@ffwll.ch>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] 3+ messages in thread
* drivers/gpu/drm/ast/ast_mode.c:1232:3: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc]
2022-01-14 6:12 drivers/gpu/drm/ast/ast_mode.c:1232:3: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] kernel test robot
@ 2022-01-18 7:33 ` kernel test robot
0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2022-01-18 7:33 UTC (permalink / raw)
To: Thomas Zimmermann
Cc: llvm, kbuild-all, Linux Kernel Mailing List, Maxime Ripard
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
config: riscv-randconfig-c006-20220113 (https://download.01.org/0day-ci/archive/20220114/202201141416.VfNXpsi5-lkp@intel.com/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 <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
>> 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);
^ ~~~~
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
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
^ permalink raw reply [flat|nested] 3+ messages in thread
* drivers/gpu/drm/ast/ast_mode.c:1232:3: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc]
@ 2022-01-18 7:33 ` kernel test robot
0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2022-01-18 7:33 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 6806 bytes --]
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
config: riscv-randconfig-c006-20220113 (https://download.01.org/0day-ci/archive/20220114/202201141416.VfNXpsi5-lkp(a)intel.com/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 <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
>> 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);
^ ~~~~
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
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-01-18 7:33 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-14 6:12 drivers/gpu/drm/ast/ast_mode.c:1232:3: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] kernel test robot
2022-01-18 7:33 ` kernel test robot
2022-01-18 7:33 ` kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.