Re: [PATCH] drm/ast: fix using freed memory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

Am 03.02.22 um 16:23 schrieb trix@xxxxxxxxxx:
From: Tom Rix <trix@xxxxxxxxxx>

clang static analysis reports this problem
ast_mode.c:1235:3: warning: Use of memory after it is freed
   drm_connector_update_edid_property(&ast_connector->base, edid);
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The second condition on

   if (!flags && ast_connector->i2c)

Means that the edid is not always set.  If the previous block
fails the freed edid value will be used.  So set edid to NULL
after freeing.

Thanks for your patch. We have meanwhile merges a change that replaces the code entirely.

Best regards
Thomas


Fixes: 55dc449a7c60 ("drm/ast: Handle failed I2C initialization gracefully")
Signed-off-by: Tom Rix <trix@xxxxxxxxxx>
---
  drivers/gpu/drm/ast/ast_mode.c | 6 ++++--
  1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index ab52efb15670e..9131dc8a1a2fc 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -1224,10 +1224,12 @@ static int ast_get_modes(struct drm_connector *connector)
  			return -ENOMEM;
flags = ast_dp501_read_edid(connector->dev, (u8 *)edid);
-		if (flags)
+		if (flags) {
  			ast->dp501_maxclk = ast_get_dp501_max_clk(connector->dev);
-		else
+		} else {
  			kfree(edid);
+			edid = NULL;
+		}
  	}
  	if (!flags && ast_connector->i2c)
  		edid = drm_get_edid(connector, &ast_connector->i2c->adapter);

--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux