Memory protection on RTEMS?
Hesham ALMatary
heshamelmatary at gmail.com
Thu Sep 10 13:49:57 UTC 2015
On Thu, Sep 10, 2015 at 12:02 AM, Joel Sherrill
<joel.sherrill at oarcorp.com> wrote:
>
>
> On 9/9/2015 5:27 PM, Daniel Gutson wrote:
>>
>>
>> El 9/9/2015 16:14, "Gedare Bloom" <gedare at rtems.org
>> <mailto:gedare at rtems.org>> escribió:
>> >
>> > On Wed, Sep 9, 2015 at 2:54 PM, Sebastian Huber
>> > <sebastian.huber at embedded-brains.de
>> <mailto:sebastian.huber at embedded-brains.de>> wrote:
>> > > Hello Martin,
>> > >
>> > > ----- Martin Galvan <martin.galvan at tallertechnologies.com
>> <mailto:martin.galvan at tallertechnologies.com>> schrieb:
>> > >> Hi there! We were looking at the RTEMS SMP support, and wondered
>> what
>> > >> would it take for the system to support some form of memory
>> protection
>> > >> (say, an MPU). Is it possible, and if so, how hard would it be?
>> > >
>> > > the question is, what is "some form of memory protection" for you?
>> > >
>> > +1. Requirements differ in this space. Note that we do not intend to
>> > have supervisor-privilege, so memory protection may be more applicable
>> > for safety features or debugging, rather than security. Security is
>> > guaranteed only if you can ensure no code injection and you have a
>> > trusted code base.
>> >
>> > > A process model for RTEMS makes no sense. For this you better use a
>> micro kernel or Linux.
>>
>> We want to protect a real time task's memory from being written or
>> generally accessed from another task. That smells like processes, but the
>> truth is we just need memory iisolation/protection meaning that a task
>> trying to access something marked as owned by another task is because there
>> is a bug and an action shall be taken (e.g. restart the offending task). Is
>> there already any kind of hardware support for this?
>
>
> Saying "task's memory" needs to be more specific. There are a fair
> number of different types of data including code, global data and BSS,
> stack, per thread data, etc.
>
> I assume the project Sebastian mentioned ended up with similar issues
> for the one we implemented MMU-based stack protection for. Once you
> define the "per task memory object" you want to protect, you have to
> allocate it on the correct alignment boundary to use the MMU. On that
> project, all task stacks were a fixed multiple of the page size and
> the mapped address space protected that.
>
+1
Another issue is when I was working on this project, there were some
trade-offs between implementing one or two level page tables. For
example, we ended up implementing 1MiB sections on ARM to avoid the
overhead of two-level translation (and to accommodate as much entries
as could be within the TLB). This was a problem specially in boards
with small memories, because clearly, 1MiB is quite big.
> Beyond the alignment issues, somehow you have to manage the sets of
> MMU data structures. Are there enough for the number of tasks and
> objects. But this is implementation.
>
> From a requirements view, let's drill down on what types of memory
> objects there are and what makes sense.
>
> + code
> + data/bss
> + read only data
> + per thread data
> + stacks
> + C program heap
> + RTEMS Workspace
> + ?
>
> As Sebastian mentioned if you make the task stack accessible by only
> a single stack, you have to be careful not to pass pointers to objects
> on the stack into paths where they will be used by another task.
>
> But in general terms, once we look at the various types of logical
> memory objects, we can decide what protection makes sense, alignment
> impacts, page table limitations, etc.
>
> --joel
>
>> Thanks,
>>
>> Daniel.
>>
>> > >
>> > > The ARMv7-A and some PowerPC BSPs have write protection for code and
>> read-only data. On some BSPs, read/write to the NULL pointer leads to an
>> exception. This is quite handy during development, but offers no real
>> benefit for a production system.
>> > >
>> > > For one customer we implemented a stack protection, a thread can only
>> access its own stack, but this is quite non-standard.
>> > >
>> > >>
>> > >> We also saw this:
>> > >>
>> > >> https://devel.rtems.org/wiki/Projects/MMU_Support
>> > >>
>> > >> What's the status of this project?
>> > >
>> > > I don't know. MMU support tends to be highly architecture specific,
>> so the development of a general purpose API is quite difficult.
>> > >
>> > I am (as we speak) working on a proposal to look in this direction.
>> > I'm happy to talk more or to consider how to align our efforts.
>> >
>> > >>
>> > >> On the other hand, we noticed that LEON3 IP Cores usually implement
>> an
>> > >> MMU instead of just an MPU. Would it be feasible to support that?
>> > >
>> > > The GR740 has an IOMMU (chapter 17).
>> > >
>> > > http://microelectronics.esa.int/ngmp/GR740-UM-DS-v1.pdf
>> > >
>> > > --
>> > > Sebastian Huber, embedded brains GmbH
>> > >
>> > > Address : Dornierstr. 4, D-82178 Puchheim, Germany
>> > > Phone : +49 89 189 47 41-16
>> > > Fax : +49 89 189 47 41-09
>> > > E-Mail : sebastian.huber at embedded-brains.de
>> <http://embedded-brains.de>
>> > > PGP : Public key available on request.
>> > >
>> > > Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
>>
>
> --
> Joel Sherrill, Ph.D. Director of Research & Development
> joel.sherrill at OARcorp.com On-Line Applications Research
> Ask me about RTEMS: a free RTOS Huntsville AL 35805
> Support Available (256) 722-9985
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
--
Hesham
More information about the devel
mailing list