Now snd_register_device_for_dev() can oops when device_create() returns ERR_PTR(err).
Scenario: preg->dev = device_create(...); /* fails */ if (preg->dev) /* contains ERR_PTR(err) */ dev_set_drvdata(preg->dev, private_data); and dev_set_drvdata() looks like this: static inline void dev_set_drvdata (struct device *dev, void *data) { dev->driver_data = data; <--- boom } This patch should prevent that. Signed-off-by: Mariusz Kozlowski <[EMAIL PROTECTED]> sound/core/sound.c | 8 ++++++++ 1 file changed, 8 insertions(+) --- linux-2.6.23-rc8-mm1-a/sound/core/sound.c 2007-09-26 12:07:01.000000000 +0200 +++ linux-2.6.23-rc8-mm1-b/sound/core/sound.c 2007-09-27 09:36:47.000000000 +0200 @@ -266,6 +266,14 @@ int snd_register_device_for_dev(int type snd_minors[minor] = preg; preg->dev = device_create(sound_class, device, MKDEV(major, minor), "%s", name); + if (IS_ERR(preg->dev)) { + snd_minors[minor] = NULL; + mutex_unlock(&sound_mutex); + minor = PTR_ERR(preg->dev); + kfree(preg); + return minor; + } + if (preg->dev) dev_set_drvdata(preg->dev, private_data); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/