Skip to contentSkip to conversation

Staging: intel_sst: off by one bug

PATCH In review Dan Carpenter 3 participants 5 messages Oct 15, 2010 – Oct 18, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Staging: intel_sst: off by one bug

This should be >= instead of > or we go passed the end of the array.

Also the arrays are declared with size MAX_NUM_STREAMS. This is the only place that uses MAX_NUM_STREAMS_MFLD. It seems like asking for trouble to use two variables for the same information. I've changed everything to use MAX_NUM_STREAMS.

This bug isn't really harmful. In the worst case, if you enabled debugging then you would see a message.

drivers/staging/intel_sst/intel_sst_fw_ipc.h +0 -1
index 1a2f67f..9d3c368 100644
@@ -31,7 +31,6 @@
 */
 
 #define MAX_NUM_STREAMS_MRST 3
-#define MAX_NUM_STREAMS_MFLD 6
 #define MAX_NUM_STREAMS 6
 #define MAX_DBG_RW_BYTES 80
 #define MAX_NUM_SCATTER_BUFFERS 8
drivers/staging/intel_sst/intel_sst_stream.c +1 -1
index 1ce3a9c..b2c4b70 100644
@@ -45,7 +45,7 @@
  */
 int sst_check_device_type(u32 device, u32 num_chan, u32 *pcm_slot)
 {
-	if (device > MAX_NUM_STREAMS_MFLD) {
+	if (device >= MAX_NUM_STREAMS) {
 		pr_debug("sst: device type invalid %d\n", device);
 		return -EINVAL;
 	}
#1 lore raw

Btw I don't understand the sst_drv_ctx->streams[] array.

What is stored in streams[0]?

What does MRST from MAX_NUM_STREAMS_MRST and get_mrst_stream_id() stand for? I understand that MRST streams are SND_SST_DEVICE_HEADSET, SND_SST_DEVICE_IHF, and SND_SST_DEVICE_VIBRA. What makes them different from SND_SST_DEVICE_HAPTIC and SND_SST_DEVICE_CAPTURE?

regards,
dan carpenter

#2 lore raw
In reply to Dan Carpenter
Quoted 2 lines

Btw I don't understand the sst_drv_ctx->streams[] array.

This is used to store the runtime information related to the stream

Quoted 2 lines

What is stored in streams[0]?

Nothing :) its unused
In this array, the index refers to stream id which starts from 1 to x. So I instead of adding stream id as field and subtracting one to get index, left [0] as unused....

Quoted 5 lines

What does MRST from MAX_NUM_STREAMS_MRST and get_mrst_stream_id() stand for? I understand that MRST streams are SND_SST_DEVICE_HEADSET, SND_SST_DEVICE_IHF, and SND_SST_DEVICE_VIBRA. What makes them different from SND_SST_DEVICE_HAPTIC and SND_SST_DEVICE_CAPTURE?

The driver supports two platforms, Moorestown (MRST) and Medfield (MFLD) The capabilities of each are different. In former we support 3 streams and in latter 5.
The driver assigns the stream id, for mrst, just in first come first server basis. In mfld, based on type of device opened, for instance Vibra will always be stream 3 and capture 5.

HTH
Vinod

Acked-by on v1 1/1
#3 lore raw
In reply to Dan Carpenter
Quoted 11 lines

This should be >= instead of > or we go passed the end of the array.

Also the arrays are declared with size MAX_NUM_STREAMS. This is the only place that uses MAX_NUM_STREAMS_MFLD. It seems like asking for trouble to use two variables for the same information. I've changed everything to use MAX_NUM_STREAMS.

This bug isn't really harmful. In the worst case, if you enabled debugging then you would see a message.

Acked-by on v1 1/1
#4 lore raw
In reply to Dan Carpenter
Quoted 8 lines

This should be >= instead of > or we go passed the end of the array.

Also the arrays are declared with size MAX_NUM_STREAMS. This is the only place that uses MAX_NUM_STREAMS_MFLD. It seems like asking for trouble to use two variables for the same information. I've changed everything to use MAX_NUM_STREAMS.

Quoted 5 lines

This bug isn't really harmful. In the worst case, if you enabled debugging then you would see a message.