diff options
| author | Yuan Lin <yualin@google.com> | 2016-08-17 10:03:11 -0700 |
|---|---|---|
| committer | Moyster <oysterized@gmail.com> | 2016-11-17 12:19:52 +0100 |
| commit | 86f56664700ba9577cb2e4c936ec9b8a40a36a0b (patch) | |
| tree | d399403cc82e53429774109beeeb0d5c22ed45c8 /sound | |
| parent | fa566a66dc713cdf877376e44659b65dbddac7e4 (diff) | |
ASoC: check for null function pointer for dummy device read/write
Adding check for null function pointer for dummy sound driver
read/write to prevent kernel panic.
Bug: 28838221
Change-Id: I32548a7e37869a17a5f88c646ddbfb8243cadcc0
Signed-off-by: Yuan Lin <yualin@google.com>
Diffstat (limited to 'sound')
| -rw-r--r-- | sound/soc/soc-core.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index d56bbea6e..a862361f7 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -2103,9 +2103,13 @@ unsigned int snd_soc_read(struct snd_soc_codec *codec, unsigned int reg) { unsigned int ret; - ret = codec->read(codec, reg); - dev_dbg(codec->dev, "read %x => %x\n", reg, ret); - trace_snd_soc_reg_read(codec, reg, ret); + if (codec->read) { + ret = codec->read(codec, reg); + dev_dbg(codec->dev, "read %x => %x\n", reg, ret); + trace_snd_soc_reg_read(codec, reg, ret); + } + else + ret = -EIO; return ret; } @@ -2114,9 +2118,13 @@ EXPORT_SYMBOL_GPL(snd_soc_read); unsigned int snd_soc_write(struct snd_soc_codec *codec, unsigned int reg, unsigned int val) { - dev_dbg(codec->dev, "write %x = %x\n", reg, val); - trace_snd_soc_reg_write(codec, reg, val); - return codec->write(codec, reg, val); + if (codec->write) { + dev_dbg(codec->dev, "write %x = %x\n", reg, val); + trace_snd_soc_reg_write(codec, reg, val); + return codec->write(codec, reg, val); + } + else + return -EIO; } EXPORT_SYMBOL_GPL(snd_soc_write); |
