VirtualBox

Changeset 65808 in vbox


Ignore:
Timestamp:
Feb 20, 2017 11:41:59 AM (8 years ago)
Author:
vboxsync
Message:

Devices/Network/lwip-new: the mailbox uses pointers to the message. As we don't know when the message is consumed, don't pass a pointer to a local stack variable but always allocate a message. This could fix a potential crash of VBoxNetNAT during shutdown (when handling the a problem in our code for terminating the lwip stack. A mailbox is used to store the pointer to the TCPIP_MSG_CALLBACK_TERMINATE message).

Location:
trunk/src/VBox/Devices/Network/lwip-new
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/lwip-new/src/api/tcpip.c

    r50173 r65808  
    154154        msg->msg.cb.function(msg->msg.cb.ctx);
    155155      }
     156      memp_free(MEMP_TCPIP_MSG_API, msg);
    156157      goto terminate;
    157158#endif
  • trunk/src/VBox/Devices/Network/lwip-new/vbox/VBoxLwipCore.cpp

    r63562 r65808  
    133133            if (lwipRc != ERR_OK)
    134134            {
    135                 LogFlow(("%s: sys_sem_new error %d\n", __FUNCTION__, lwipRc));
     135                LogFlowFunc(("sys_sem_new error %d\n", lwipRc));
    136136                goto done;
    137137            }
     
    144144            if (lwipRc != ERR_OK)
    145145            {
    146                 LogFlow(("%s: tcpip_callback error %d\n", __FUNCTION__, lwipRc));
     146                LogFlowFunc(("tcpip_callback error %d\n", lwipRc));
    147147                goto done;
    148148            }
     
    191191             * gone in future versions of lwip.
    192192             */
    193             struct tcpip_msg msg;
    194             msg.type = TCPIP_MSG_CALLBACK_TERMINATE;
    195             msg.msg.cb.function = lwipCoreFiniDone;
    196             msg.msg.cb.ctx = &callback;
    197 
    198             lwipRc = tcpip_callbackmsg((struct tcpip_callback_msg *)&msg);
    199             if (lwipRc != ERR_OK)
     193            struct tcpip_msg *msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API);
     194            if (msg)
    200195            {
    201                 LogFlow(("%s: tcpip_callback_msg error %d\n", __FUNCTION__, lwipRc));
     196                msg->type = TCPIP_MSG_CALLBACK_TERMINATE;
     197                msg->msg.cb.function = lwipCoreFiniDone;
     198                msg->msg.cb.ctx = &callback;
     199
     200                lwipRc = tcpip_callbackmsg((struct tcpip_callback_msg *)msg);
     201                if (lwipRc != ERR_OK)
     202                    LogFlowFunc(("tcpip_callback_msg error %d\n", lwipRc));
    202203            }
     204            else
     205                LogFlowFunc(("memp_malloc no memory\n"));
    203206        }
    204207        else
     
    206209            lwipRc = tcpip_callback(lwipCoreUserCallback, &callback);
    207210            if (lwipRc != ERR_OK)
    208             {
    209                 LogFlow(("%s: tcpip_callback error %d\n", __FUNCTION__, lwipRc));
    210             }
     211                LogFlowFunc(("tcpip_callback error %d\n", lwipRc));
    211212        }
    212213
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette