Skip to contentSkip to conversation

media: em28xx: Fix possible memory leak of em28xx struct

PATCH In review Igor Matheus Andrade Torrente 3 participants 3 messages May 4, 2021 – May 6, 2021

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 media: em28xx: Fix possible memory leak of em28xx struct

The em28xx struct kref isn't being decreased after an error in the em28xx_ir_init, leading to a possible memory leak.

A kref_put and em28xx_shutdown_buttons is added to the error handler code.

---
 drivers/media/usb/em28xx/em28xx-input.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/media/usb/em28xx/em28xx-input.c +6 -2
index 5aa15a7a49de..59529cbf9cd0 100644
@@ -720,7 +720,8 @@ static int em28xx_ir_init(struct em28xx *dev)
 			dev->board.has_ir_i2c = 0;
 			dev_warn(&dev->intf->dev,
 				 "No i2c IR remote control device found.\n");
-			return -ENODEV;
+			err = -ENODEV;
+			goto ref_put;
 		}
 	}
 
@@ -735,7 +736,7 @@ static int em28xx_ir_init(struct em28xx *dev)
 
 	ir = kzalloc(sizeof(*ir), GFP_KERNEL);
 	if (!ir)
-		return -ENOMEM;
+		goto ref_put;
 	rc = rc_allocate_device(RC_DRIVER_SCANCODE);
 	if (!rc)
 		goto error;
@@ -839,6 +840,9 @@ static int em28xx_ir_init(struct em28xx *dev)
 	dev->ir = NULL;
 	rc_free_device(rc);
 	kfree(ir);
+ref_put:
+	em28xx_shutdown_buttons(dev);
+	kref_put(&dev->ref, em28xx_free_device);
 	return err;
 }
 
Signature · 1 line
2.20.1
#1 lore raw
Quoted 7 lines · Igor Matheus Andrade Torrente

The em28xx struct kref isn't being decreased after an error in the em28xx_ir_init, leading to a possible memory leak.

A kref_put and em28xx_shutdown_buttons is added to the error handler code.

---

Hi Igor,

Please look at Hans's response and comments to your v1 patch. v4l core addresses the lifetime issues now and this driver could be updated to use them instead if fixing the problems in this driver's resource lifetime mgmt code.

Please follow his review comments to address the issue based on his suggestions.

thanks,
-- Shuah

#2 lore raw
Quoted 9 lines · Shuah Khan
Quoted 7 lines · Igor Matheus Andrade Torrente

The em28xx struct kref isn't being decreased after an error in the em28xx_ir_init, leading to a possible memory leak.

A kref_put and em28xx_shutdown_buttons is added to the error handler code.

---

Quoted 6 lines

Hi Igor,

Please look at Hans's response and comments to your v1 patch. v4l core addresses the lifetime issues now and this driver could be updated to use them instead if fixing the problems in this driver's resource lifetime mgmt code.

Actually, this patch is fine (I think, still need to review it). This is related to the input part, not v4l2.

Regards,

Hans

Quoted 7 lines

Please follow his review comments to address the issue based on his suggestions.

thanks,
-- Shuah