VirtualBox

Changeset 44605 in vbox for trunk/src/VBox/Devices/EFI


Ignore:
Timestamp:
Feb 8, 2013 3:20:52 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
83690
Message:

Some fixes and instrumentation

Location:
trunk/src/VBox/Devices/EFI
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/DevEFI.cpp

    r44603 r44605  
    412412        pThis->NVRAM.pCurVar              = pEfiVar;
    413413        pThis->NVRAM.u32Status            = EFI_VARIABLE_OP_STATUS_OK;
    414         LogFlow(("EFI: Variable query -> %RTuuid::'%s' abValue=%.*Rhxs\n", &pThis->NVRAM.VarOpBuf.uuid,
    415                  pThis->NVRAM.VarOpBuf.szName, pThis->NVRAM.VarOpBuf.cbValue, pThis->NVRAM.VarOpBuf.abValue));
     414        LogFlow(("EFI: Variable query -> %RTuuid::'%s' (%d) abValue=%.*Rhxs\n", &pThis->NVRAM.VarOpBuf.uuid,
     415                 pThis->NVRAM.VarOpBuf.szName, pThis->NVRAM.VarOpBuf.cchName,
     416                 pThis->NVRAM.VarOpBuf.cbValue, pThis->NVRAM.VarOpBuf.abValue));
    416417    }
    417418    else
     
    773774        case EFI_VM_VARIABLE_OP_NAME_UTF16:
    774775            /* Lazy bird: ASSUME no surrogate pairs. */
    775             if (pThis->NVRAM.offOpBuffer < pThis->NVRAM.VarOpBuf.cchName)
     776            if (pThis->NVRAM.offOpBuffer <= pThis->NVRAM.VarOpBuf.cchName && cb == 2)
    776777            {
    777778                char const *psz1 = &pThis->NVRAM.VarOpBuf.szName[pThis->NVRAM.offOpBuffer];
    778                 char const *psz2 = psz2;
     779                char const *psz2 = psz1;
    779780                RTUNICP Cp;
    780781                RTStrGetCpEx(&psz2, &Cp);
    781782                *pu32 = Cp;
     783                Log2(("EFI_VM_VARIABLE_OP_NAME_UTF16[%u] => %#x (+%d)\n", pThis->NVRAM.offOpBuffer, *pu32, psz2 - psz1));
    782784                pThis->NVRAM.offOpBuffer += psz2 - psz1;
    783785            }
    784             else if (pThis->NVRAM.offOpBuffer == pThis->NVRAM.VarOpBuf.cchName)
    785             {
    786                 *pu32 = 0;
    787                 pThis->NVRAM.offOpBuffer++;
    788             }
    789786            else
    790787            {
    791                 if (cb == 1)
     788                if (cb == 2)
    792789                    LogRel(("EFI: Out of bounds EFI_VM_VARIABLE_OP_NAME_UTF16 read.\n"));
    793790                else
  • trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVariable/InitVariable.c

    r44604 r44605  
    148148     * Tell DevEFI to look for the specified variable.
    149149     */
    150     ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_GUID);
    151150    VBoxWriteNVRAMGuidParam(VendorGuid);
    152151    VBoxWriteNVRAMNameParam(VariableName);
    153 
    154152    u32Rc = VBoxWriteNVRAMDoOp(EFI_VARIABLE_OP_QUERY);
    155153    if (u32Rc == EFI_VARIABLE_OP_STATUS_OK)
     
    232230    LogFlowFuncEnter();
    233231
     232    if (!VariableNameSize || !VariableName || !VendorGuid)
     233    {
     234        LogFlowFuncLeaveRC(EFI_INVALID_PARAMETER);
     235        return EFI_INVALID_PARAMETER;
     236    }
     237
    234238    /*
    235239     * Tell DevEFI which the current variable is, then ask for the next one.
     
    245249    if (u32Rc == EFI_VARIABLE_OP_STATUS_OK)
    246250        u32Rc = VBoxWriteNVRAMDoOp(EFI_VARIABLE_OP_QUERY_NEXT);
     251    /** @todo We're supposed to skip stuff depending on attributes and
     252     *        runtime/boottime, at least if EmuGetNextVariableName is something
     253     *        to go by... */
    247254
    248255    if (u32Rc == EFI_VARIABLE_OP_STATUS_OK)
     
    254261        ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_LENGTH_UTF16);
    255262        cwcName = ASMInU32(EFI_VARIABLE_OP);
    256         if (cwcName * 2 < *VariableNameSize) /* ASSUMES byte size is specified */
     263        if ((cwcName + 1) * 2 <= *VariableNameSize) /* ASSUMES byte size is specified */
    257264        {
    258265            UINT32 i;
     
    269276            VariableName[i] = '\0';
    270277
    271             *VariableNameSize = cwcName * 2;
    272278            rc = EFI_SUCCESS;
    273279        }
    274280        else
    275         {
    276281            rc = EFI_BUFFER_TOO_SMALL;
    277             *VariableNameSize = (cwcName + 1) * 2;
    278         }
     282        *VariableNameSize = (cwcName + 1) * 2;
    279283    }
    280284    else
     
    282286
    283287    LogFlowFuncLeaveRC(rc);
     288    // Temporary - start
     289    DebugPrint("GetNextVariableName: rc=%u cbName=%u Name=%s VendorGuid=%g\n", rc, *VariableNameSize, VariableName, VendorGuid);
     290    // Temporary - end
    284291    return rc;
    285292#endif
Note: See TracChangeset for help on using the changeset viewer.

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