Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ALSA: galaxy: Fix the missing snd_card_free() call at probe error

The previous cleanup with devres may lead to the incorrect release
orders at the probe error handling due to the devres's nature. Until
we register the card, snd_card_free() has to be called at first for
releasing the stuff properly when the driver tries to manage and
release the stuff via card->private_free().

This patch fixes it by calling snd_card_free() on the error from the
probe callback using a new helper function.

Fixes: 35a245ec0619 ("ALSA: galaxy: Allocate resources with device-managed APIs")
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20220412102636.16000-2-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>

+6 -1
+6 -1
sound/isa/galaxy/galaxy.c
··· 478 478 galaxy_set_config(galaxy, galaxy->config); 479 479 } 480 480 481 - static int snd_galaxy_probe(struct device *dev, unsigned int n) 481 + static int __snd_galaxy_probe(struct device *dev, unsigned int n) 482 482 { 483 483 struct snd_galaxy *galaxy; 484 484 struct snd_wss *chip; ··· 596 596 597 597 dev_set_drvdata(dev, card); 598 598 return 0; 599 + } 600 + 601 + static int snd_galaxy_probe(struct device *dev, unsigned int n) 602 + { 603 + return snd_card_free_on_error(dev, __snd_galaxy_probe(dev, n)); 599 604 } 600 605 601 606 static struct isa_driver snd_galaxy_driver = {