[alsa-devel] [bug report] ALSA: oxfw: configure packet format in pcm.hw_params callback

Dan Carpenter dan.carpenter at oracle.com
Wed Jun 19 12:16:39 CEST 2019


Hello Takashi Sakamoto,

The patch 4f380d007052: "ALSA: oxfw: configure packet format in
pcm.hw_params callback" from Jun 12, 2019, leads to the following
static checker warning:

	sound/firewire/oxfw/oxfw-stream.c:357 snd_oxfw_stream_start_duplex()
	warn: 'oxfw->rx_stream.buffer.packets' double freed

sound/firewire/oxfw/oxfw-stream.c
   317  int snd_oxfw_stream_start_duplex(struct snd_oxfw *oxfw)
   318  {
   319          int err;
   320  
   321          if (oxfw->substreams_count == 0)
   322                  return -EIO;
   323  
   324          if (amdtp_streaming_error(&oxfw->rx_stream) ||
   325              amdtp_streaming_error(&oxfw->tx_stream)) {
   326                  amdtp_stream_stop(&oxfw->rx_stream);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

   327                  cmp_connection_break(&oxfw->in_conn);
   328  
   329                  if (oxfw->has_output) {
   330                          amdtp_stream_stop(&oxfw->tx_stream);
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

   331                          cmp_connection_break(&oxfw->out_conn);
   332                  }
   333          }
   334  
   335          if (!amdtp_stream_running(&oxfw->rx_stream)) {
   336                  err = start_stream(oxfw, &oxfw->rx_stream);
   337                  if (err < 0) {
   338                          dev_err(&oxfw->unit->device,
   339                                  "fail to start rx stream: %d\n", err);
   340                          goto error;
   341                  }
   342          }
   343  
   344          if (oxfw->has_output) {
   345                  if (!amdtp_stream_running(&oxfw->tx_stream)) {
   346                          err = start_stream(oxfw, &oxfw->tx_stream);
   347                          if (err < 0) {
   348                                  dev_err(&oxfw->unit->device,
   349                                          "fail to start tx stream: %d\n", err);
   350                                  goto error;
   351                          }
   352                  }
   353          }
   354  
   355          return 0;
   356  error:
   357          amdtp_stream_stop(&oxfw->rx_stream);
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Smatch is basically complaining that we call amdtp_stream_stop() and
it's not clear that we necessarily reset things.  I don't know this code
very well so I have maybe missed something.

   358          cmp_connection_break(&oxfw->in_conn);
   359          if (oxfw->has_output) {
   360                  amdtp_stream_stop(&oxfw->tx_stream);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

   361                  cmp_connection_break(&oxfw->out_conn);
   362          }
   363          return err;
   364  }

regards,
dan carpenter


More information about the Alsa-devel mailing list