On 16 January 2015 at 12:34, Tomeu Vizoso <tomeu.vizoso@xxxxxxxxxxxxx> wrote: > On 16 January 2015 at 11:47, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: >> >> int mmc_pwrseq_simple_alloc(struct mmc_host *host, struct device *dev) >> { >> struct mmc_pwrseq_simple *pwrseq; >> + int ret = 0; >> >> pwrseq = kzalloc(sizeof(struct mmc_pwrseq_simple), GFP_KERNEL); >> if (!pwrseq) >> return -ENOMEM; >> >> + pwrseq->reset_gpio = gpiod_get_index(dev, "reset", 0, GPIOD_OUT_HIGH); >> + if (IS_ERR(pwrseq->reset_gpio) && >> + PTR_ERR(pwrseq->reset_gpio) != -ENOENT && >> + PTR_ERR(pwrseq->reset_gpio) != -ENOSYS) { >> + ret = PTR_ERR(pwrseq->reset_gpio); >> + goto free; >> + } >> + >> pwrseq->pwrseq.ops = &mmc_pwrseq_simple_ops; >> host->pwrseq = &pwrseq->pwrseq; >> >> return 0; >> +free: >> + kfree(&pwrseq); > > Hi Ulf, > > this kfree looks a bit fishy (there's one more instance of it in > mmc_pwrseq_simple_free). This is the error path, which means I need to clean up data that I have allocated. mmc_pwrseq_simple_free() is called when host drivers ->remove() callback invokes mmc_free_host(). In that case the host->pwrseq has been assigned. Kind regards Uffe -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html