Changeset 90335 in vbox for trunk/src/VBox/Runtime/tools
- Timestamp:
- Jul 26, 2021 1:24:20 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 145898
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/tools/RTEfiSigDb.cpp
r90322 r90335 45 45 46 46 #include <iprt/formats/efi-signature.h> 47 #include <iprt/formats/efi-varstore.h> 47 48 48 49 … … 56 57 *********************************************************************************************************************************/ 57 58 /** Signature type identifier to internal type mapping. */ 58 struct 59 struct RTEFISIGDBID2TYPEENTRY 59 60 { 60 61 const char *pszId; … … 398 399 399 400 /** 401 * Sets the given attributes for the given EFI variable store variable. 402 * 403 * @returns IPRT status code. 404 * @param hVfsVarStore Handle of the EFI variable store VFS. 405 * @param pszVar The variable to set the attributes for. 406 * @param fAttr The attributes to set, see EFI_VAR_HEADER_ATTR_XXX. 407 */ 408 static int rtEfiSigDbSetVarAttr(RTVFS hVfsVarStore, const char *pszVar, uint32_t fAttr) 409 { 410 char szVarPath[_1K]; 411 ssize_t cch = RTStrPrintf2(szVarPath, sizeof(szVarPath), "/raw/%s/attr", pszVar); 412 Assert(cch > 0); 413 414 RTVFSFILE hVfsFileAttr = NIL_RTVFSFILE; 415 int rc = RTVfsFileOpen(hVfsVarStore, szVarPath, 416 RTFILE_O_READWRITE | RTFILE_O_DENY_NONE | RTFILE_O_OPEN, 417 &hVfsFileAttr); 418 if (RT_SUCCESS(rc)) 419 { 420 uint32_t fAttrLe = RT_H2LE_U32(fAttr); 421 rc = RTVfsFileWrite(hVfsFileAttr, &fAttrLe, sizeof(fAttrLe), NULL /*pcbWritten*/); 422 RTVfsFileRelease(hVfsFileAttr); 423 } 424 425 return rc; 426 } 427 428 429 /** 400 430 * Adds the given signature to the given signature database of the given EFI variable store. 401 431 * … … 423 453 RTFILE_O_READWRITE | RTFILE_O_DENY_NONE | RTFILE_O_OPEN, 424 454 &hVfsFileSigDb); 425 if (rc == VERR_PATH_NOT_FOUND) 455 if ( rc == VERR_PATH_NOT_FOUND 456 || rc == VERR_FILE_NOT_FOUND) 426 457 { 427 458 /* … … 441 472 if (RT_SUCCESS(rc)) 442 473 RTVfsDirRelease(hVfsDirGuid); 474 else if (rc == VERR_ALREADY_EXISTS) 475 rc = VINF_SUCCESS; 443 476 444 477 RTVfsDirRelease(hVfsDirRoot); … … 448 481 449 482 if (RT_SUCCESS(rc)) 483 { 450 484 rc = RTVfsFileOpen(hVfsVarStore, szDbPath, 451 485 RTFILE_O_READWRITE | RTFILE_O_DENY_NONE | RTFILE_O_CREATE, 452 486 &hVfsFileSigDb); 487 if (RT_SUCCESS(rc)) 488 rc = rtEfiSigDbSetVarAttr(hVfsVarStore, pszDb, 489 EFI_VAR_HEADER_ATTR_NON_VOLATILE 490 | EFI_VAR_HEADER_ATTR_BOOTSERVICE_ACCESS 491 | EFI_VAR_HEADER_ATTR_RUNTIME_ACCESS 492 | EFI_AUTH_VAR_HEADER_ATTR_TIME_BASED_AUTH_WRITE_ACCESS); 493 } 453 494 454 495 if (RT_FAILURE(rc))
Note:
See TracChangeset
for help on using the changeset viewer.