From: Takashi Iwai Date: Tue, 31 Jan 2017 07:29:56 +0000 (+0100) Subject: ALSA: x86: Handle the error from hdmi_audio_probe() properly X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=45459d16867988a792a18233bdfc294492976841;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git ALSA: x86: Handle the error from hdmi_audio_probe() properly The error from hdmi_audio_probe() wasn't handled properly, and it may leave some resources leaked or mapped. Fix it and also clean up the error paths. Signed-off-by: Takashi Iwai --- diff --git a/sound/x86/intel_hdmi_lpe_audio.c b/sound/x86/intel_hdmi_lpe_audio.c index 18a2ae6796b8..0c11d82eb99b 100644 --- a/sound/x86/intel_hdmi_lpe_audio.c +++ b/sound/x86/intel_hdmi_lpe_audio.c @@ -422,16 +422,14 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev) NULL); if (ret < 0) { dev_err(&hlpe_pdev->dev, "request_irq failed\n"); - iounmap(mmio_start); - return -ENODEV; + goto error_irq; } /* alloc and save context */ ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); if (ctx == NULL) { - free_irq(irq, NULL); - iounmap(mmio_start); - return -ENOMEM; + ret = -ENOMEM; + goto error_ctx; } ctx->irq = irq; @@ -454,15 +452,16 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev) if (pdata == NULL) { dev_err(&hlpe_pdev->dev, "%s: quit: pdata not allocated by i915!!\n", __func__); - kfree(ctx); - free_irq(irq, NULL); - iounmap(mmio_start); - return -ENOMEM; + ret = -ENOMEM; + goto error_probe; } platform_set_drvdata(pdev, ctx); ret = hdmi_audio_probe(pdev, &ctx->had); + if (ret < 0) + goto error_probe; + dev_dbg(&hlpe_pdev->dev, "hdmi lpe audio: setting pin eld notify callback\n"); /* The Audio driver is loading now and we need to notify @@ -483,6 +482,14 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev) spin_unlock_irqrestore(&pdata->lpe_audio_slock, flag_irq); return ret; + + error_probe: + kfree(ctx); + error_ctx: + free_irq(irq, NULL); + error_irq: + iounmap(mmio_start); + return ret; } /**