Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PATCH 9/9] sound/soc/codecs: Correct code taking the size of a pointer

0 views
Skip to first unread message

Julia Lawall

unread,
Dec 13, 2009, 6:50:03 AM12/13/09
to
From: Julia Lawall <ju...@diku.dk>

sizeof(codec->reg_cache) is just the size of the pointer. Elsewhere in the
file, codec->reg_cache is used with sizeof(wm8900_reg_defaults), so the
code is changed to do the same here.

A simplified version of the semantic patch that finds this problem is as
follows: (http://coccinelle.lip6.fr/)

// <smpl>
@@
expression *x;
expression f;
type T;
@@

*f(...,(T)x,...)
// </smpl>

Signed-off-by: Julia Lawall <ju...@diku.dk>

---
sound/soc/codecs/wm8900.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/sound/soc/codecs/wm8900.c b/sound/soc/codecs/wm8900.c
index c9438dd..dbc368c 100644
--- a/sound/soc/codecs/wm8900.c
+++ b/sound/soc/codecs/wm8900.c
@@ -199,7 +199,7 @@ static void wm8900_reset(struct snd_soc_codec *codec)
snd_soc_write(codec, WM8900_REG_RESET, 0);

memcpy(codec->reg_cache, wm8900_reg_defaults,
- sizeof(codec->reg_cache));
+ sizeof(wm8900_reg_defaults));
}

static int wm8900_hp_event(struct snd_soc_dapm_widget *w,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

walter harms

unread,
Dec 13, 2009, 9:10:01 AM12/13/09
to

Julia Lawall schrieb:

I do not think that this was the intention of the original author,
I guess the idea behind sizeof(*codec->reg_cache) was to protect
the area behind it (in case wm8900_reg_defaults are badly defined).

re,
wh

Julia Lawall

unread,
Dec 13, 2009, 10:30:01 AM12/13/09
to

sizeof(codec->reg_cache) is the size of a pointer (void *).
sizeof(*codec->reg_cache) is then the size of void. wm8900_reg_defaults
is a static constant array defined a few lines before this code:

static const u16 wm8900_reg_defaults[WM8900_MAXREG] = { ... };

Later in the same file there is:

cache = kmemdup(codec->reg_cache, sizeof(wm8900_reg_defaults),
GFP_KERNEL);

and codec->reg_cache is initialized as follows:

codec->reg_cache = &wm8900->reg_cache[0];

The reg_cache field in wm8900 is declared as u16 reg_cache[WM8900_MAXREG];

julia

Mark Brown

unread,
Dec 14, 2009, 6:40:02 AM12/14/09
to
On Sun, Dec 13, 2009 at 12:43:15PM +0100, Julia Lawall wrote:
> From: Julia Lawall <ju...@diku.dk>
>
> sizeof(codec->reg_cache) is just the size of the pointer. Elsewhere in the
> file, codec->reg_cache is used with sizeof(wm8900_reg_defaults), so the
> code is changed to do the same here.

Applied, thanks.

0 new messages