On Mon, Mar 2, 2020 at 9:37 AM Joel Sherrill <j...@rtems.org> wrote: > > > > On Mon, Mar 2, 2020 at 10:12 AM Gedare Bloom <ged...@rtems.org> wrote: >> >> On Mon, Mar 2, 2020 at 9:05 AM Joel Sherrill <j...@rtems.org> wrote: >> > >> > >> > >> > On Mon, Mar 2, 2020 at 9:33 AM Gedare Bloom <ged...@rtems.org> wrote: >> >> >> >> On Sat, Feb 29, 2020 at 2:58 PM Utkarsh Rai <utkarsh.ra...@gmail.com> >> >> wrote: >> >> > >> >> > I have gone through the details of the project adding memory protection >> >> > using MMU and have a few questions and observations regarding the same- >> >> > >> >> > 1. Is this a project for which someone from the community would be >> >> > willing to mentor for GSoC? >> >> >> >> Yes, Peter Dufault has expressed interest. There are also several >> >> generally interested parties that may like to stay in the loop. >> >> >> >> > 2. As far I could understand by looking into the rtems tree ARM uses >> >> > static initialization wherein it first invalidates the cache and TLB >> >> > blocks and then performs initialization by setting up a 1 to 1 mapping >> >> > of the parts of address space. According to me, static initialization >> >> > of the mmu is a generic enough method that can be utilized in most of >> >> > the architectures. >> >> >> >> Yes, it should be. That is how most architectures will do it, if they >> >> need to. Some might disable the MMU/MPU and not bother, then there is >> >> some work to do to figure out how to enable the static/init-time >> >> memory map. >> >> >> >> > 3. For the thread stack protection, I believe either of the stack guard >> >> > protection approach or by verification of stack canaries whereby the OS >> >> > on each context switch would check whether the numbers associated with >> >> > the canaries are still intact or not are worth considering. Although I >> >> > still only have a high-level idea of both of these approaches and will >> >> > be looking into their implementation details, I would request your kind >> >> > feedback on it. >> >> > >> >> >> >> Thread stack protection is different from stack overflow protection. >> >> We do have some stack overflow checking that can be enabled. The >> >> thread stack protection means you would have separate MMU/MPU region >> >> for each thread's stack, so on context switch you would enable the >> >> heir thread's stack region and disable the executing thread's region. >> >> This way, different threads can't access each other's stacks directly. >> > >> > >> > FWIW the thread stack allocator/deallocator plugin support was originally >> > added for a user who allocated fixed size stacks to all threads and used >> > the MMU to invalidate the addresses immediately before and after each >> > stack area. >> > >> > Another thing to consider is the semantics of protecting a thread. Since >> > RTEMS is POSIX single process, multi-threaded, there is an assumption >> > that all data, bss, heap, and stack memory is accessible by all threads. >> > This means you can protect for out of area writes/reads but can't generally >> > protect from one thread accessing another thread's memory. This may >> >> Right: thread stack protection must be application-configurable. >> >> > sound like it doesn't happen often but anytime data is returned from a >> > blocking call, the contents are copied from one thread's address space >> > to another. Message queue receives are one example. I suspect all >> > blocking reads do this (sockets, files, etc) >> > >> It should not happen inside rtems unless the user sends thread-stack >> pointers via API calls, so the documentation must make it clear: user >> beware! > > > Yep. Pushing this to the limit could break code in weird, hard > to understand ways. The fault handler may have to give a hint. :) > >> >> It may eventually be worth considering (performance-degrading) >> extensions to the API that copy buffers between thread contexts. > > > This might be challenging to support everywhere. Say you have mmu_memcpy() > or whatever. It has to be used inside code RTEMS owns as well as code that > RTEMS is leveraging from third party sources. Hopefully you would at least > know the source thread (running) and destination thread easily. >
This brings up the interesting design point, which may have been mentioned elsewhere, that is to group/pool threads together in the same protection domain. This way the application designer can control the sharing between threads that should share, while restricting others. > >> >> But >> yes, we are operating outside of POSIX. > > > And likely the C Standard as of C11 with threads. > >> >> >> > --joel >> >> >> >> >> >> Gedare >> >> >> >> > Regards, >> >> > Utkarsh Rai. >> >> > >> >> > On Fri, Feb 21, 2020 at 10:28 PM Utkarsh Rai <utkarsh.ra...@gmail.com> >> >> > wrote: >> >> >> >> >> >> Thanks, I will check it out. >> >> >> >> >> >> On Fri, Feb 21, 2020 at 12:56 AM Gedare Bloom <ged...@rtems.org> wrote: >> >> >>> >> >> >>> On Tue, Feb 18, 2020 at 12:45 PM Utkarsh Rai >> >> >>> <utkarsh.ra...@gmail.com> wrote: >> >> >>> > >> >> >>> > Based on your feedback, adding memory protection or enhancing >> >> >>> > Wi-fi Support in libbsd are two projects that I would like to work >> >> >>> > upon. >> >> >>> > >> >> >>> > For MMU support I think a lot unmerged PowerPC code is already >> >> >>> > present, but since I would be using BBB I would only be able to >> >> >>> > use that as a reference. Is it feasible to start it from scratch? >> >> >>> > >> >> >>> The state-of-the-art has advanced in the rtems.git tree since these >> >> >>> projects happened, and it is not all documented. The ARM in particular >> >> >>> generally uses a static initialization or boot-time initialization of >> >> >>> the MMU. You should study how the ARM approach works in the RTEMS >> >> >>> main repo, and consider whether that approach can be adopted by other >> >> >>> architectures/BSPs, how to improve that approach, and how to build >> >> >>> higher-level services on top of the low-level BSP support that exists. >> >> >>> >> >> >>> One of the main interesting applications is to provide thread stack >> >> >>> protection. >> >> >>> >> >> >>> > For Wi-Fi support, I would require an RTL8188 USB dongle along with >> >> >>> > JTAG for debugging purposes. I am not quite sure about how to >> >> >>> > handle the 'hot-plugging' case in this project it would be very >> >> >>> > helpful if someone could point me in the right direction. >> >> >>> > >> >> >>> I can't speak to the WiFi support, maybe others know. But to get >> >> >>> started you would need to at least demonstrate that you have the >> >> >>> necessary hardware to succeed and that you can at a minimum boot/run >> >> >>> BBB with libbsd, and probably we should like you to show that you can >> >> >>> generate patches for libbsd. >> >> >>> >> >> >>> Gedare >> >> >>> >> >> >>> > >> >> >>> > On Tue, Feb 18, 2020 at 1:21 AM Gedare Bloom <ged...@rtems.org> >> >> >>> > wrote: >> >> >>> >> >> >> >>> >> >> >> >>> >> On Mon, Feb 17, 2020 at 9:42 AM Utkarsh Rai >> >> >>> >> <utkarsh.ra...@gmail.com> wrote: >> >> >>> >>> >> >> >>> >>> Hello everyone, >> >> >>> >> >> >> >>> >> Hello Utkarsh Rai, >> >> >>> >> >> >> >>> >>> >> >> >>> >>> I would like to contribute to the Beagleboard BSP project, in >> >> >>> >>> particular towards the improvement of the peripheral support. I >> >> >>> >>> have a few questions pertaining to the same:- >> >> >>> >>> >> >> >>> >>> 1. Is adding support for Ethernet and USB a reasonable goal for >> >> >>> >>> the duration of the GSOC? >> >> >>> >>> >> >> >>> >>> 2. FreeBSD has support for Ethernet and USB can we port that to >> >> >>> >>> libbsd? >> >> >>> >>> >> >> >>> >>> 3. What are the deliverables for this project, for instance, >> >> >>> >>> would I be required to add shell support for these peripherals or >> >> >>> >>> maybe an example app? >> >> >>> >>> >> >> >>> >>> I have also attached a screenshot of the changed 'hello world' >> >> >>> >>> program along with this email >> >> >>> >> >> >> >>> >> Thanks. It is nice to see that you already ran it successfully on >> >> >>> >> the BBB. >> >> >>> >> >> >> >>> >> As of now, the BBB has quite mature support including Ethernet and >> >> >>> >> USB. There is another student actively working on a proposal to >> >> >>> >> expand our BBB support a bit further. I'm not certain if there is >> >> >>> >> sufficient work/interest/mentoring available to support multiple >> >> >>> >> BBB projects. You might consider what specific projects would >> >> >>> >> interest you though. You should take a look at past years' GSoC >> >> >>> >> projects documented on our wiki, they are linked from our main >> >> >>> >> 'GSoC' page. >> >> >>> >> >> >> >>> >> There are also lots of interesting projects that can be done in a >> >> >>> >> BSP-agnostic way, but still could be valuable to test with the >> >> >>> >> BBB. The most important aspect about doing development with a BBB >> >> >>> >> is that you can use the JTAG, which requires some soldering and >> >> >>> >> additional effort to work with a standalone JTAG debugger. If you >> >> >>> >> don't have that, and want to work with the BBB, it is highly >> >> >>> >> recommended. >> >> >>> >> >> >> >>> >> >> >> >>> >>> >> >> >>> >>> _______________________________________________ >> >> >>> >>> devel mailing list >> >> >>> >>> devel@rtems.org >> >> >>> >>> http://lists.rtems.org/mailman/listinfo/devel >> >> _______________________________________________ >> >> devel mailing list >> >> devel@rtems.org >> >> http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel