Changeset 44605 in vbox for trunk/src/VBox/Devices/EFI
- Timestamp:
- Feb 8, 2013 3:20:52 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 83690
- Location:
- trunk/src/VBox/Devices/EFI
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/DevEFI.cpp
r44603 r44605 412 412 pThis->NVRAM.pCurVar = pEfiVar; 413 413 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)); 416 417 } 417 418 else … … 773 774 case EFI_VM_VARIABLE_OP_NAME_UTF16: 774 775 /* 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) 776 777 { 777 778 char const *psz1 = &pThis->NVRAM.VarOpBuf.szName[pThis->NVRAM.offOpBuffer]; 778 char const *psz2 = psz 2;779 char const *psz2 = psz1; 779 780 RTUNICP Cp; 780 781 RTStrGetCpEx(&psz2, &Cp); 781 782 *pu32 = Cp; 783 Log2(("EFI_VM_VARIABLE_OP_NAME_UTF16[%u] => %#x (+%d)\n", pThis->NVRAM.offOpBuffer, *pu32, psz2 - psz1)); 782 784 pThis->NVRAM.offOpBuffer += psz2 - psz1; 783 785 } 784 else if (pThis->NVRAM.offOpBuffer == pThis->NVRAM.VarOpBuf.cchName)785 {786 *pu32 = 0;787 pThis->NVRAM.offOpBuffer++;788 }789 786 else 790 787 { 791 if (cb == 1)788 if (cb == 2) 792 789 LogRel(("EFI: Out of bounds EFI_VM_VARIABLE_OP_NAME_UTF16 read.\n")); 793 790 else -
trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVariable/InitVariable.c
r44604 r44605 148 148 * Tell DevEFI to look for the specified variable. 149 149 */ 150 ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_GUID);151 150 VBoxWriteNVRAMGuidParam(VendorGuid); 152 151 VBoxWriteNVRAMNameParam(VariableName); 153 154 152 u32Rc = VBoxWriteNVRAMDoOp(EFI_VARIABLE_OP_QUERY); 155 153 if (u32Rc == EFI_VARIABLE_OP_STATUS_OK) … … 232 230 LogFlowFuncEnter(); 233 231 232 if (!VariableNameSize || !VariableName || !VendorGuid) 233 { 234 LogFlowFuncLeaveRC(EFI_INVALID_PARAMETER); 235 return EFI_INVALID_PARAMETER; 236 } 237 234 238 /* 235 239 * Tell DevEFI which the current variable is, then ask for the next one. … … 245 249 if (u32Rc == EFI_VARIABLE_OP_STATUS_OK) 246 250 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... */ 247 254 248 255 if (u32Rc == EFI_VARIABLE_OP_STATUS_OK) … … 254 261 ASMOutU32(EFI_VARIABLE_OP, EFI_VM_VARIABLE_OP_NAME_LENGTH_UTF16); 255 262 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 */ 257 264 { 258 265 UINT32 i; … … 269 276 VariableName[i] = '\0'; 270 277 271 *VariableNameSize = cwcName * 2;272 278 rc = EFI_SUCCESS; 273 279 } 274 280 else 275 {276 281 rc = EFI_BUFFER_TOO_SMALL; 277 *VariableNameSize = (cwcName + 1) * 2; 278 } 282 *VariableNameSize = (cwcName + 1) * 2; 279 283 } 280 284 else … … 282 286 283 287 LogFlowFuncLeaveRC(rc); 288 // Temporary - start 289 DebugPrint("GetNextVariableName: rc=%u cbName=%u Name=%s VendorGuid=%g\n", rc, *VariableNameSize, VariableName, VendorGuid); 290 // Temporary - end 284 291 return rc; 285 292 #endif
Note:
See TracChangeset
for help on using the changeset viewer.