Re: [PATCH 2/2] DSPBRIDGE: add checking 128 byte alignment for dsp cache line size

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

 



On Mon, May 11, 2009 at 6:47 PM, Hiroshi DOYU <Hiroshi.DOYU@xxxxxxxxx> wrote:
> Hi Hari,
>
> From: "ext Kanigeri, Hari" <h-kanigeri2@xxxxxx>
> Subject: RE: [PATCH 2/2] DSPBRIDGE: add checking 128 byte alignment for dsp cache line size
> Date: Mon, 11 May 2009 17:09:03 +0200
>
>> Hi Doyu-san,
>>
>> > A buffer shared with MPU and DSP has to be aligned on both cache line
>> > size to avoid memory corrupton with some DSP cache operations. Since
>> > there's no way for dspbridge to know how the shared buffer will be
>> > used like: "read-only", "write-only", "rw" through its life span, any
>> > shared buffer passed to DSP should be on this alignment. This patch
>> > adds checking those shared buffer alignement in bridgedriver cache
>> > operations and prevents userland applications from causing the above
>> > memory corruption.
>> >
>>
>> -- It looks like the buffer that are passed to the Bridge are not necessarily 128 byte aligned.
>>
>> This is the comment I received from Nikhil Mande (MM Engineer).
>>
>> [Nikhil Mande] "They are not necessarily "aligned" all the time.
>> Sometimes they just have 128 byte padding at the start & end of the buffer and the buffer pointer passed to bridge is not guaranteed to be 128 aligned.
>> So if you are adding such a check, it will require modifications OMX
>> components & test apps."
>
> The above means that passing unaligned address to dsp can cause memory
> corruption in kernel and this problem can be avoided only in the case
> where OMX(userland) is always supposed to pass aligned address.  The
> above assumption cannot be accepted because kernel should always be
> robust against any incorrect behaviour of userland application. For
> example, even if an userland application passes any incorrect
> parameters to kernel through ioctl(), kernel shouldn't crash, but just
> returns -EINVAL.

Yes, but flush and invalidate are not the right places to do that. An
application in user-space might be buggy and decide not to do any
flush or invalidation, therefore the checks won't happen. A more
proper use-case could be to flush only parts of a big buffer.

Also, you are not checking for the upper limit, which also should be
128-byte aligned.

A more correct place to do this would be on PROC_Map, which user-space
cannot avoid in any way, and also you have the upper limit too.
Unfortunately TI's OpenMAX IL is sending a fake upper limit (page
aligned).

IMHO the only sensible way to approach this is to create a new ioctl
for a special restrictive mapping where user-space specifies if the
memory area is read-only or write-only and the size must be the real
size. This also has advantage that it does not break legacy
applications. While we are at it, this new mapping could do
PROC_ReserveMemory at the same time so that the user-space application
doesn't get a chance to modify the pa.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux