VirtualBox

Changeset 7153 in vbox


Ignore:
Timestamp:
Feb 26, 2008 5:19:39 PM (17 years ago)
Author:
vboxsync
Message:

XPCOM/IPC/DConnect: Check for client ID when checking instance wrapper validity (to properly ignore requests from disconnected clients to release/invoke methods on wrappers whose addresses have been reused by newer clients).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.cpp

    r6999 r7153  
    16131613    DConnectInstance *wrapper = (DConnectInstance *) bits;
    16141614    // make sure we've been sent a valid wrapper
    1615     if (!CheckInstanceAndAddRef(wrapper))
     1615    if (!CheckInstanceAndAddRef(wrapper, peer))
    16161616    {
    16171617      NS_NOTREACHED("instance wrapper not found");
     
    20592059    // the real instance.
    20602060    DConnectInstance *wrapper = (DConnectInstance *) bits;
    2061     if (CheckInstanceAndAddRef(wrapper))
     2061    if (CheckInstanceAndAddRef(wrapper, peer))
    20622062    {
    20632063      *xcpt = (nsIException *) wrapper->RealInstance();
     
    30693069
    30703070PRBool
    3071 ipcDConnectService::CheckInstanceAndAddRef(DConnectInstance *wrapper)
     3071ipcDConnectService::CheckInstanceAndAddRef(DConnectInstance *wrapper, PRUint32 peer)
    30723072{
    30733073  nsAutoLock lock (mLock);
    30743074
    3075   PRBool result = mInstanceSet.Contains(wrapper);
    3076   if (result)
     3075  if (mInstanceSet.Contains(wrapper) && wrapper->Peer() == peer)
     3076  {
    30773077    wrapper->AddRef();
    3078   return result;
     3078    return PR_TRUE;
     3079  }
     3080  return PR_FALSE;
    30793081}
    30803082
     
    34403442
    34413443      // make sure we've been sent a valid wrapper
    3442       if (!CheckInstanceAndAddRef(setupQI->instance))
     3444      if (!CheckInstanceAndAddRef(setupQI->instance, peer))
    34433445      {
    34443446        NS_NOTREACHED("instance wrapper not found");
     
    35933595  nsAutoLock lock (mLock);
    35943596
    3595   // make sure we've been sent a valid wrapper
    3596   if (mInstanceSet.Contains(wrapper))
     3597  // make sure we've been sent a valid wrapper from the same peer we created
     3598  // this wrapper for
     3599  if (mInstanceSet.Contains(wrapper) && wrapper->Peer() == peer)
    35973600  {
    35983601    // release the IPC reference from under the lock to ensure atomicity of
     
    36133616    // a debug warning
    36143617    LOG(("ipcDConnectService::OnRelease: WARNING: "
    3615          "instance wrapper %p not found", wrapper));
     3618         "instance wrapper %p for peer %d not found", wrapper, peer));
    36163619  }
    36173620}
     
    36373640
    36383641  // make sure we've been sent a valid wrapper
    3639   if (!CheckInstanceAndAddRef(wrapper))
     3642  if (!CheckInstanceAndAddRef(wrapper, peer))
    36403643  {
    36413644    NS_NOTREACHED("instance wrapper not found");
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