VirtualBox

Changeset 90335 in vbox for trunk/src/VBox/Runtime/tools


Ignore:
Timestamp:
Jul 26, 2021 1:24:20 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
145898
Message:

Runtime/tools/RTEfiSigDb: Try to fix lin32 builds, bugref:9580

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/tools/RTEfiSigDb.cpp

    r90322 r90335  
    4545
    4646#include <iprt/formats/efi-signature.h>
     47#include <iprt/formats/efi-varstore.h>
    4748
    4849
     
    5657*********************************************************************************************************************************/
    5758/** Signature type identifier to internal type mapping. */
    58 struct
     59struct RTEFISIGDBID2TYPEENTRY
    5960{
    6061    const char   *pszId;
     
    398399
    399400/**
     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 */
     408static 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/**
    400430 * Adds the given signature to the given signature database of the given EFI variable store.
    401431 *
     
    423453                           RTFILE_O_READWRITE | RTFILE_O_DENY_NONE | RTFILE_O_OPEN,
    424454                           &hVfsFileSigDb);
    425     if (rc == VERR_PATH_NOT_FOUND)
     455    if (   rc == VERR_PATH_NOT_FOUND
     456        || rc == VERR_FILE_NOT_FOUND)
    426457    {
    427458        /*
     
    441472            if (RT_SUCCESS(rc))
    442473                RTVfsDirRelease(hVfsDirGuid);
     474            else if (rc == VERR_ALREADY_EXISTS)
     475                rc = VINF_SUCCESS;
    443476
    444477            RTVfsDirRelease(hVfsDirRoot);
     
    448481
    449482        if (RT_SUCCESS(rc))
     483        {
    450484            rc = RTVfsFileOpen(hVfsVarStore, szDbPath,
    451485                               RTFILE_O_READWRITE | RTFILE_O_DENY_NONE | RTFILE_O_CREATE,
    452486                               &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        }
    453494
    454495        if (RT_FAILURE(rc))
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