Hi Simon,

Okay, thank you for the suggestion. Just to be clear are you suggesting
modifying lwip_select() to allocate select_cb from a pool & free prior
to return?

I will have to investigate the speed impact of this, as I have
MEM_LIBC_MALLOC and MAEP_MEM_MALLOC both defined as 1.

David



On 07/09/17 13:12, goldsimon wrote:
Looks correct. I guess mpu mode is not used too often. My suggestion
would probably be to get select_cb from a Memo pool...

Simon


Am 6. September 2017 16:12:47 MESZ schrieb David Lockyer
<david.lock...@chronos.co.uk>:

    Hi,

    I have a project that uses an STM32F MCU running FreeRTOS (cortex
    mpu port) & lwip, with the MPU enabled.

    I'm upgrading to lwip 2.0.2 from lwip 1.4.1, that I had to
    customize to be compatible with the MPU, in particular in
    lwip_select().

    The motivation was to use the LWIP_MPU_COMPATIBLE define, so a
    direct modification of the stack source was not required.  However
    for me it still appears to try to access another threads memory,
    triggering an exception.

    The changes I had to make were:

    Index: lib/lwip-2.0.2/src/api/sockets.c
    ===================================================================
    --- lib/lwip-2.0.2/src/api/sockets.c    (revision xxxxx)
    +++ lib/lwip-2.0.2/src/api/sockets.c    (working copy)
    @@ -1428,7 +1428,9 @@
         /* Put this select_cb on top of list */
         select_cb.next = select_cb_list;
         if (select_cb_list != NULL) {
    +      RAISE_PRIVILEGE();
           select_cb_list->prev = &select_cb;
    +      RESET_PRIVILEGE();
         }
         select_cb_list = &select_cb;
         /* Increasing this counter tells event_callback that the list
    has changed. */
    @@ -1508,7 +1510,9 @@
         /* Take us off the list */
         SYS_ARCH_PROTECT(lev);
         if (select_cb.next != NULL) {
    +      RAISE_PRIVILEGE();
           select_cb.next->prev = select_cb.prev;
    +      RESET_PRIVILEGE();
         }
         if (select_cb_list == &select_cb) {
           LWIP_ASSERT("select_cb.prev == NULL", select_cb.prev == NULL);
    @@ -1515,7 +1519,9 @@
           select_cb_list = select_cb.next;
         } else {
           LWIP_ASSERT("select_cb.prev != NULL", select_cb.prev != NULL);
    +      RAISE_PRIVILEGE();
           select_cb.prev->next = select_cb.next;
    +      RESET_PRIVILEGE();
         }
         /* Increasing this counter tells event_callback that the list
    has changed. */
         select_cb_ctr++;

    Is there something else I missed here that would remove the need
    for this modification?


    Kind regards,

    David Lockyer


    ______________________________________________________________________
    This email has been scanned by the Symantec Email Security.cloud
    service.
    For more information please visit http://www.symanteccloud.com
    ______________________________________________________________________


--
Diese Nachricht wurde von meinem Android-Gerät mit K-9 Mail gesendet.
______________________________________________________________________
This email has been scanned by the Symantec Email Security.cloud service.
For more information please visit http://www.symanteccloud.com
______________________________________________________________________


_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users



______________________________________________________________________
This email has been scanned by the Symantec Email Security.cloud service.
For more information please visit http://www.symanteccloud.com
______________________________________________________________________
_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to