When request_region() on chip->res_mc_indir fails,
chip->res_mc_base should be freed to prevent memleak.

Signed-off-by: Dinghao Liu <[email protected]>
---
 sound/isa/opti9xx/opti92x-ad1848.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/sound/isa/opti9xx/opti92x-ad1848.c 
b/sound/isa/opti9xx/opti92x-ad1848.c
index 881d3b5711d2..06ba18d1737c 100644
--- a/sound/isa/opti9xx/opti92x-ad1848.c
+++ b/sound/isa/opti9xx/opti92x-ad1848.c
@@ -679,8 +679,11 @@ static int snd_opti9xx_read_check(struct snd_opti9xx *chip)
 #else  /* OPTi93X */
        chip->res_mc_indir = request_region(chip->mc_indir_index, 2,
                                            "OPTi93x MC");
-       if (chip->res_mc_indir == NULL)
+       if (chip->res_mc_indir == NULL) {
+               release_and_free_resource(chip->res_mc_base);
+               chip->res_mc_base = NULL;
                return -EBUSY;
+       }
 
        spin_lock_irqsave(&chip->lock, flags);
        outb(chip->password, chip->mc_base + chip->pwd_reg);
-- 
2.17.1

Reply via email to