提交 b9b50363 编写于 作者: L Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
  ALSA: ASoC: Fix double free and memory leak in many codec drivers
  ALSA: CA0106 on MSI K8N Diamond PLUS Motherboard
...@@ -249,11 +249,12 @@ static struct snd_ca0106_details ca0106_chip_details[] = { ...@@ -249,11 +249,12 @@ static struct snd_ca0106_details ca0106_chip_details[] = {
.name = "MSI K8N Diamond MB [SB0438]", .name = "MSI K8N Diamond MB [SB0438]",
.gpio_type = 2, .gpio_type = 2,
.i2c_adc = 1 } , .i2c_adc = 1 } ,
/* Another MSI K8N Diamond MB, which has apprently a different SSID */ /* MSI K8N Diamond PLUS MB */
{ .serial = 0x10091102, { .serial = 0x10091102,
.name = "MSI K8N Diamond MB", .name = "MSI K8N Diamond MB",
.gpio_type = 2, .gpio_type = 2,
.i2c_adc = 1 } , .i2c_adc = 1,
.spi_dac = 2 }
/* Shuttle XPC SD31P which has an onboard Creative Labs /* Shuttle XPC SD31P which has an onboard Creative Labs
* Sound Blaster Live! 24-bit EAX * Sound Blaster Live! 24-bit EAX
* high-definition 7.1 audio processor". * high-definition 7.1 audio processor".
......
...@@ -562,10 +562,9 @@ static int ak4535_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -562,10 +562,9 @@ static int ak4535_codec_probe(struct i2c_adapter *adap, int addr, int kind)
client_template.addr = addr; client_template.addr = addr;
i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
if (i2c == NULL) { if (i2c == NULL)
kfree(codec);
return -ENOMEM; return -ENOMEM;
}
i2c_set_clientdata(i2c, codec); i2c_set_clientdata(i2c, codec);
codec->control_data = i2c; codec->control_data = i2c;
...@@ -583,7 +582,6 @@ static int ak4535_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -583,7 +582,6 @@ static int ak4535_codec_probe(struct i2c_adapter *adap, int addr, int kind)
return ret; return ret;
err: err:
kfree(codec);
kfree(i2c); kfree(i2c);
return ret; return ret;
} }
...@@ -660,6 +658,11 @@ static int ak4535_probe(struct platform_device *pdev) ...@@ -660,6 +658,11 @@ static int ak4535_probe(struct platform_device *pdev)
#else #else
/* Add other interfaces here */ /* Add other interfaces here */
#endif #endif
if (ret != 0) {
kfree(codec->private_data);
kfree(codec);
}
return ret; return ret;
} }
......
...@@ -1199,10 +1199,9 @@ static int aic3x_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -1199,10 +1199,9 @@ static int aic3x_codec_probe(struct i2c_adapter *adap, int addr, int kind)
client_template.addr = addr; client_template.addr = addr;
i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
if (i2c == NULL) { if (i2c == NULL)
kfree(codec);
return -ENOMEM; return -ENOMEM;
}
i2c_set_clientdata(i2c, codec); i2c_set_clientdata(i2c, codec);
codec->control_data = i2c; codec->control_data = i2c;
...@@ -1221,7 +1220,6 @@ static int aic3x_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -1221,7 +1220,6 @@ static int aic3x_codec_probe(struct i2c_adapter *adap, int addr, int kind)
return ret; return ret;
err: err:
kfree(codec);
kfree(i2c); kfree(i2c);
return ret; return ret;
} }
...@@ -1302,6 +1300,11 @@ static int aic3x_probe(struct platform_device *pdev) ...@@ -1302,6 +1300,11 @@ static int aic3x_probe(struct platform_device *pdev)
#else #else
/* Add other interfaces here */ /* Add other interfaces here */
#endif #endif
if (ret != 0) {
kfree(codec->private_data);
kfree(codec);
}
return ret; return ret;
} }
......
...@@ -729,10 +729,9 @@ static int uda1380_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -729,10 +729,9 @@ static int uda1380_codec_probe(struct i2c_adapter *adap, int addr, int kind)
client_template.addr = addr; client_template.addr = addr;
i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
if (i2c == NULL) { if (i2c == NULL)
kfree(codec);
return -ENOMEM; return -ENOMEM;
}
i2c_set_clientdata(i2c, codec); i2c_set_clientdata(i2c, codec);
codec->control_data = i2c; codec->control_data = i2c;
...@@ -750,7 +749,6 @@ static int uda1380_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -750,7 +749,6 @@ static int uda1380_codec_probe(struct i2c_adapter *adap, int addr, int kind)
return ret; return ret;
err: err:
kfree(codec);
kfree(i2c); kfree(i2c);
return ret; return ret;
} }
...@@ -817,6 +815,9 @@ static int uda1380_probe(struct platform_device *pdev) ...@@ -817,6 +815,9 @@ static int uda1380_probe(struct platform_device *pdev)
#else #else
/* Add other interfaces here */ /* Add other interfaces here */
#endif #endif
if (ret != 0)
kfree(codec);
return ret; return ret;
} }
......
...@@ -693,10 +693,9 @@ static int wm8510_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -693,10 +693,9 @@ static int wm8510_codec_probe(struct i2c_adapter *adap, int addr, int kind)
client_template.addr = addr; client_template.addr = addr;
i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
if (i2c == NULL) { if (i2c == NULL)
kfree(codec);
return -ENOMEM; return -ENOMEM;
}
i2c_set_clientdata(i2c, codec); i2c_set_clientdata(i2c, codec);
codec->control_data = i2c; codec->control_data = i2c;
...@@ -714,7 +713,6 @@ static int wm8510_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -714,7 +713,6 @@ static int wm8510_codec_probe(struct i2c_adapter *adap, int addr, int kind)
return ret; return ret;
err: err:
kfree(codec);
kfree(i2c); kfree(i2c);
return ret; return ret;
} }
...@@ -782,6 +780,9 @@ static int wm8510_probe(struct platform_device *pdev) ...@@ -782,6 +780,9 @@ static int wm8510_probe(struct platform_device *pdev)
#else #else
/* Add other interfaces here */ /* Add other interfaces here */
#endif #endif
if (ret != 0)
kfree(codec);
return ret; return ret;
} }
......
...@@ -596,10 +596,9 @@ static int wm8731_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -596,10 +596,9 @@ static int wm8731_codec_probe(struct i2c_adapter *adap, int addr, int kind)
client_template.addr = addr; client_template.addr = addr;
i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
if (i2c == NULL) { if (i2c == NULL)
kfree(codec);
return -ENOMEM; return -ENOMEM;
}
i2c_set_clientdata(i2c, codec); i2c_set_clientdata(i2c, codec);
codec->control_data = i2c; codec->control_data = i2c;
...@@ -617,7 +616,6 @@ static int wm8731_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -617,7 +616,6 @@ static int wm8731_codec_probe(struct i2c_adapter *adap, int addr, int kind)
return ret; return ret;
err: err:
kfree(codec);
kfree(i2c); kfree(i2c);
return ret; return ret;
} }
...@@ -693,6 +691,11 @@ static int wm8731_probe(struct platform_device *pdev) ...@@ -693,6 +691,11 @@ static int wm8731_probe(struct platform_device *pdev)
#else #else
/* Add other interfaces here */ /* Add other interfaces here */
#endif #endif
if (ret != 0) {
kfree(codec->private_data);
kfree(codec);
}
return ret; return ret;
} }
......
...@@ -869,10 +869,9 @@ static int wm8750_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -869,10 +869,9 @@ static int wm8750_codec_probe(struct i2c_adapter *adap, int addr, int kind)
client_template.addr = addr; client_template.addr = addr;
i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
if (i2c == NULL) { if (i2c == NULL)
kfree(codec);
return -ENOMEM; return -ENOMEM;
}
i2c_set_clientdata(i2c, codec); i2c_set_clientdata(i2c, codec);
codec->control_data = i2c; codec->control_data = i2c;
...@@ -890,7 +889,6 @@ static int wm8750_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -890,7 +889,6 @@ static int wm8750_codec_probe(struct i2c_adapter *adap, int addr, int kind)
return ret; return ret;
err: err:
kfree(codec);
kfree(i2c); kfree(i2c);
return ret; return ret;
} }
...@@ -966,6 +964,10 @@ static int wm8750_probe(struct platform_device *pdev) ...@@ -966,6 +964,10 @@ static int wm8750_probe(struct platform_device *pdev)
/* Add other interfaces here */ /* Add other interfaces here */
#endif #endif
if (ret != 0) {
kfree(codec->private_data);
kfree(codec);
}
return ret; return ret;
} }
......
...@@ -1660,10 +1660,9 @@ static int wm8753_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -1660,10 +1660,9 @@ static int wm8753_codec_probe(struct i2c_adapter *adap, int addr, int kind)
client_template.addr = addr; client_template.addr = addr;
i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
if (!i2c) { if (!i2c)
kfree(codec);
return -ENOMEM; return -ENOMEM;
}
i2c_set_clientdata(i2c, codec); i2c_set_clientdata(i2c, codec);
codec->control_data = i2c; codec->control_data = i2c;
...@@ -1682,7 +1681,6 @@ static int wm8753_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -1682,7 +1681,6 @@ static int wm8753_codec_probe(struct i2c_adapter *adap, int addr, int kind)
return ret; return ret;
err: err:
kfree(codec);
kfree(i2c); kfree(i2c);
return ret; return ret;
} }
...@@ -1759,6 +1757,11 @@ static int wm8753_probe(struct platform_device *pdev) ...@@ -1759,6 +1757,11 @@ static int wm8753_probe(struct platform_device *pdev)
#else #else
/* Add other interfaces here */ /* Add other interfaces here */
#endif #endif
if (ret != 0) {
kfree(codec->private_data);
kfree(codec);
}
return ret; return ret;
} }
......
...@@ -1500,10 +1500,9 @@ static int wm8990_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -1500,10 +1500,9 @@ static int wm8990_codec_probe(struct i2c_adapter *adap, int addr, int kind)
client_template.addr = addr; client_template.addr = addr;
i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL); i2c = kmemdup(&client_template, sizeof(client_template), GFP_KERNEL);
if (i2c == NULL) { if (i2c == NULL)
kfree(codec);
return -ENOMEM; return -ENOMEM;
}
i2c_set_clientdata(i2c, codec); i2c_set_clientdata(i2c, codec);
codec->control_data = i2c; codec->control_data = i2c;
...@@ -1521,7 +1520,6 @@ static int wm8990_codec_probe(struct i2c_adapter *adap, int addr, int kind) ...@@ -1521,7 +1520,6 @@ static int wm8990_codec_probe(struct i2c_adapter *adap, int addr, int kind)
return ret; return ret;
err: err:
kfree(codec);
kfree(i2c); kfree(i2c);
return ret; return ret;
} }
...@@ -1595,6 +1593,11 @@ static int wm8990_probe(struct platform_device *pdev) ...@@ -1595,6 +1593,11 @@ static int wm8990_probe(struct platform_device *pdev)
#else #else
/* Add other interfaces here */ /* Add other interfaces here */
#endif #endif
if (ret != 0) {
kfree(codec->private_data);
kfree(codec);
}
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册