On Thu, 20 Dec 2018 03:11:55 +0100, Bard liao wrote:
Date: Wed, 12 Dec 2018 12:23:33 +0100 From: Takashi Iwai tiwai@suse.de To: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com Cc: alsa-devel@alsa-project.org, andriy.shevchenko@intel.com, Daniel Baluta daniel.baluta@gmail.com, liam.r.girdwood@linux.intel.com, vkoul@kernel.org, broonie@kernel.org, Alan Cox alan@linux.intel.com, sound-open-firmware@alsa-project.org Subject: Re: [alsa-devel] [PATCH v3 09/14] ASoC: SOF: Add firmware loader support Message-ID: s5htvjjj8ei.wl-tiwai@suse.de Content-Type: text/plain; charset=US-ASCII
On Tue, 11 Dec 2018 22:23:13 +0100, Pierre-Louis Bossart wrote:
snd_sof_dsp_block_write(sdev, offset,
(void *)block + sizeof(*block),
block->size);
/* next block */
block = (void *)block + sizeof(*block) + block->size;
This may lead to an unaligned access.
Did you mean we should double check the block->size to prevent access to an invalid address?
You need two types of checks for the given data: - The bounce check of block->size; We need to avoid out-of-bounce access.
- Alignment of block->size; For some non-x86 platforms, the access to an unaligned address might be illegal.
Oh, and recently another thing is sometimes needed for avoiding Spectre. This can be covered by array_index_nospec().
Also how is the endianess guaranteed?
Did you mean we should guarantee the driver can work no matter what kernel's endianess is? ie. Use le32_to_cpu() to handle it?
Depends on the implementation. IIRC, topology API refuses the data in a different endianess by checking the magic number at beginning.
thanks,
Takashi