From: Pete Zaitcev <zaitcev@redhat.com>
To: Chris Wright <chrisw@osdl.org>, marcelo@conectiva.com.br
Cc: linux-kernel@vger.kernel.org, mc@cs.stanford.edu,
alan@lxorguk.ukuu.org.uk, zaitcev@redhat.com
Subject: Re: [CHECKER] 32 Memory Leaks on Error Paths
Date: Wed, 24 Sep 2003 00:13:34 -0400 [thread overview]
Message-ID: <20030924001334.A19940@devserv.devel.redhat.com> (raw)
In-Reply-To: <20030923140503.N20572@osdlab.pdx.osdl.net>; from chrisw@osdl.org on Tue, Sep 23, 2003 at 02:05:03PM -0700
> Date: Tue, 23 Sep 2003 13:15:15 -0700
> From: Chris Wright <chrisw@osdl.org>
> --- 1.38/sound/oss/ymfpci.c Tue Aug 26 09:25:41 2003
> +++ edited/sound/oss/ymfpci.c Tue Sep 23 12:42:45 2003
> @@ -2638,6 +2638,7 @@
> out_free:
> if (codec->ac97_codec[0])
> ac97_release_codec(codec->ac97_codec[0]);
> + kfree(codec);
> return -ENODEV;
> }
Someone was savaging sound code, adding these bugs.
For 2.6, the above patch is probably ok; it's immaterial,
because ALSA won long ago.
A patch for 2.4 to undo the damage is attached.
-- Pete
diff -ur -X dontdiff linux-2.4.23-pre5/drivers/sound/ymfpci.c linux-2.4.23-pre5-nip/drivers/sound/ymfpci.c
--- linux-2.4.23-pre5/drivers/sound/ymfpci.c 2003-09-23 17:41:04.000000000 -0700
+++ linux-2.4.23-pre5-nip/drivers/sound/ymfpci.c 2003-09-23 20:44:46.000000000 -0700
@@ -173,43 +173,40 @@
static void ymfpci_codec_write(struct ac97_codec *dev, u8 reg, u16 val)
{
- ymfpci_t *codec = dev->private_data;
+ ymfpci_t *unit = dev->private_data;
u32 cmd;
- spin_lock(&codec->ac97_lock);
+ down(&unit->ac97_lock);
/* XXX Do make use of dev->id */
- ymfpci_codec_ready(codec, 0, 0);
+ ymfpci_codec_ready(unit, 0, 0);
cmd = ((YDSXG_AC97WRITECMD | reg) << 16) | val;
- ymfpci_writel(codec, YDSXGR_AC97CMDDATA, cmd);
- spin_unlock(&codec->ac97_lock);
+ ymfpci_writel(unit, YDSXGR_AC97CMDDATA, cmd);
+ up(&unit->ac97_lock);
}
-static u16 _ymfpci_codec_read(ymfpci_t *unit, u8 reg)
+static u16 ymfpci_codec_read(struct ac97_codec *dev, u8 reg)
{
+ ymfpci_t *unit = dev->private_data;
int i;
+ u16 ret;
+ down(&unit->ac97_lock);
if (ymfpci_codec_ready(unit, 0, 0))
- return ~0;
+ goto out_none;
ymfpci_writew(unit, YDSXGR_AC97CMDADR, YDSXG_AC97READCMD | reg);
if (ymfpci_codec_ready(unit, 0, 0))
- return ~0;
+ goto out_none;
if (unit->pci->device == PCI_DEVICE_ID_YAMAHA_744 && unit->rev < 2) {
for (i = 0; i < 600; i++)
ymfpci_readw(unit, YDSXGR_PRISTATUSDATA);
}
- return ymfpci_readw(unit, YDSXGR_PRISTATUSDATA);
-}
-
-static u16 ymfpci_codec_read(struct ac97_codec *dev, u8 reg)
-{
- ymfpci_t *unit = dev->private_data;
- u16 ret;
-
- spin_lock(&unit->ac97_lock);
- ret = _ymfpci_codec_read(unit, reg);
- spin_unlock(&unit->ac97_lock);
-
+ ret = ymfpci_readw(unit, YDSXGR_PRISTATUSDATA);
+ up(&unit->ac97_lock);
return ret;
+
+out_none:
+ up(&unit->ac97_lock);
+ return ~0;
}
/*
@@ -2526,7 +2523,7 @@
spin_lock_init(&codec->reg_lock);
spin_lock_init(&codec->voice_lock);
- spin_lock_init(&codec->ac97_lock);
+ init_MUTEX(&codec->ac97_lock);
init_MUTEX(&codec->open_sem);
INIT_LIST_HEAD(&codec->states);
codec->pci = pcidev;
@@ -2625,6 +2622,7 @@
out_release_region:
release_mem_region(pci_resource_start(pcidev, 0), 0x8000);
out_free:
+ kfree(codec);
return -ENODEV;
}
@@ -2652,6 +2650,7 @@
unload_uart401(&codec->mpu_data);
}
#endif /* CONFIG_SOUND_YMFPCI_LEGACY */
+ kfree(codec);
}
MODULE_AUTHOR("Jaroslav Kysela");
diff -ur -X dontdiff linux-2.4.23-pre5/drivers/sound/ymfpci.h linux-2.4.23-pre5-nip/drivers/sound/ymfpci.h
--- linux-2.4.23-pre5/drivers/sound/ymfpci.h 2003-09-23 17:56:01.000000000 -0700
+++ linux-2.4.23-pre5-nip/drivers/sound/ymfpci.h 2003-09-23 20:46:06.000000000 -0700
@@ -275,7 +275,7 @@
spinlock_t reg_lock;
spinlock_t voice_lock;
- spinlock_t ac97_lock;
+ struct semaphore ac97_lock;
/* soundcore stuff */
int dev_audio;
next parent reply other threads:[~2003-09-24 4:14 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20030923140503.N20572@osdlab.pdx.osdl.net>
2003-09-24 4:13 ` Pete Zaitcev [this message]
2003-09-24 12:49 ` [CHECKER] 32 Memory Leaks on Error Paths Alan Cox
2003-09-24 16:38 ` Pete Zaitcev
2003-09-29 17:48 ` Marcelo Tosatti
2003-09-29 17:54 ` Pete Zaitcev
2003-11-06 0:58 ` Pete Zaitcev
2003-09-16 4:35 David Yu Chen
2003-09-16 6:40 ` Neil Brown
2003-09-16 6:55 ` Jörn Engel
2003-09-16 7:32 ` Jörn Engel
2003-09-16 8:51 ` Jörn Engel
2003-09-16 14:52 ` Timothy Miller
2003-09-16 15:02 ` Wade
2003-09-16 15:04 ` Valdis.Kletnieks
2003-09-16 15:04 ` Nick Piggin
2003-09-16 8:45 ` Wade
2003-09-16 8:56 ` Jörn Engel
2003-09-16 12:10 ` Andries Brouwer
2003-09-16 9:07 ` Jörn Engel
2003-09-20 7:58 ` David S. Miller
2003-09-16 12:03 ` Andries Brouwer
2003-09-19 23:03 ` Chris Wright
2003-09-19 23:04 ` Chris Wright
2003-09-19 23:04 ` Chris Wright
2003-09-19 23:04 ` Chris Wright
2003-09-23 13:15 ` Stephen Smalley
2003-09-23 18:02 ` Chris Wright
2003-09-22 22:54 ` Chris Wright
2003-09-22 22:55 ` Chris Wright
2003-09-22 22:55 ` Chris Wright
2003-09-23 20:13 ` Chris Wright
2003-09-23 20:25 ` Greg KH
2003-09-23 21:38 ` Chris Wright
2003-09-23 22:14 ` Chris Wright
2003-09-24 0:17 ` Greg KH
2003-09-23 20:14 ` Chris Wright
2003-09-24 7:08 ` David Howells
2003-09-23 20:14 ` Chris Wright
2003-09-23 20:21 ` Jean Tourrilhes
2003-09-23 20:24 ` Chris Wright
2003-09-23 20:14 ` Chris Wright
2003-09-23 20:15 ` Chris Wright
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030924001334.A19940@devserv.devel.redhat.com \
--to=zaitcev@redhat.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=chrisw@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marcelo@conectiva.com.br \
--cc=mc@cs.stanford.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox