Messages in this thread | | | Date | Sun, 14 Apr 2024 11:39:26 +0100 | From | Simon Horman <> | Subject | Re: [PATCH v7 13/16] power: sequencing: implement the pwrseq core |
| |
On Wed, Apr 10, 2024 at 02:46:25PM +0200, Bartosz Golaszewski wrote:
..
> +/** > + * pwrseq_device_register() - Register a new power sequencer. > + * @config: Configuration of the new power sequencing device. > + * > + * The config structure is only used during the call and can be freed after > + * the function returns. The config structure *must* have the parent device > + * as well as the match() callback and at least one target set. > + * > + * Returns: > + * Returns the address of the new pwrseq device or ERR_PTR() on failure. > + */ > +struct pwrseq_device * > +pwrseq_device_register(const struct pwrseq_config *config) > +{ > + struct pwrseq_device *pwrseq; > + int ret; > + > + if (!config->parent || !config->match || !config->targets || > + !config->targets[0]) > + return ERR_PTR(-EINVAL); > + > + pwrseq = kzalloc(sizeof(*pwrseq), GFP_KERNEL); > + if (!pwrseq) > + return ERR_PTR(-ENOMEM); > + > + pwrseq->dev.type = &pwrseq_device_type; > + pwrseq->dev.bus = &pwrseq_bus; > + pwrseq->dev.parent = config->parent; > + device_set_node(&pwrseq->dev, dev_fwnode(config->parent)); > + dev_set_drvdata(&pwrseq->dev, config->drvdata); > + > + pwrseq->id = ida_alloc(&pwrseq_ida, GFP_KERNEL); > + if (pwrseq->id < 0) { > + kfree(pwrseq);
Hi Bartosz,
pwrseq is freed on the line above, so it should not be dereferenced on the line below.
Flagged by Smatch.
> + return ERR_PTR(pwrseq->id); > + }
..
| |