[bug report] media: stv090x: Implement probe/remove for stv090x

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Tobias Klausmann,

The patch eb5005df886b: "media: stv090x: Implement probe/remove for
stv090x" from May 29, 2019, leads to the following static checker
warning:

	drivers/media/dvb-frontends/stv090x.c:5032 stv090x_probe()
	warn: 'state' was already freed.

drivers/media/dvb-frontends/stv090x.c
  4994  static int stv090x_probe(struct i2c_client *client,
  4995                           const struct i2c_device_id *id)
  4996  {
  4997          int ret = 0;
  4998          struct stv090x_config *config = client->dev.platform_data;
  4999  
  5000          struct stv090x_state *state = NULL;
  5001  
  5002          state = kzalloc(sizeof(*state), GFP_KERNEL);
  5003          if (!state) {
  5004                  ret = -ENOMEM;
  5005                  goto error;
  5006          }
  5007  
  5008          state->verbose                          = &verbose;
  5009          state->config                           = config;
  5010          state->i2c                              = client->adapter;
  5011          state->frontend.ops                     = stv090x_ops;
  5012          state->frontend.demodulator_priv        = state;
  5013          state->demod                            = config->demod;
  5014                                                  /* Single or Dual mode */
  5015          state->demod_mode                       = config->demod_mode;
  5016          state->device                           = config->device;
  5017                                                  /* default */
  5018          state->rolloff                          = STV090x_RO_35;
  5019  
  5020          ret = stv090x_setup_compound(state);
  5021          if (ret)
  5022                  goto error;

stv090x_setup_compound() frees "state" on error.

  5023  
  5024          i2c_set_clientdata(client, state);
  5025  
  5026          /* setup callbacks */
  5027          config->get_dvb_frontend = stv090x_get_dvb_frontend;
  5028  
  5029          return 0;
  5030  
  5031  error:
  5032          kfree(state);
                ^^^^^^^^^^^^
Double free.

  5033          return ret;
  5034  }

regards,
dan carpenter



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux