VirtualBox

Changeset 90315 in vbox for trunk/src/VBox/Runtime/common


Ignore:
Timestamp:
Jul 23, 2021 3:48:37 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
145872
Message:

Runtime/efisignaturedb.cpp: Fix writing X.509 type signature lists, bugref:9580

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/efi/efisignaturedb.cpp

    r90287 r90315  
    273273    {
    274274        EFI_SIGNATURE_LIST LstHdr;
     275        EFI_SIGNATURE_DATA SigData;
    275276        LstHdr.GuidSigType = pDesc->GuidSignatureType;
    276         LstHdr.cbSigLst    = RT_H2LE_U32(sizeof(LstHdr) + pDesc->cbSigHdr + pIt->cbSignature);
     277        LstHdr.cbSigLst    = RT_H2LE_U32(sizeof(LstHdr) + sizeof(SigData) + pDesc->cbSigHdr + pIt->cbSignature);
    277278        LstHdr.cbSigHdr    = RT_H2LE_U32(pDesc->cbSigHdr);
    278         LstHdr.cbSig       = RT_H2LE_U32(pIt->cbSignature);
    279 
    280         rc = RTVfsFileWrite(hVfsFileOut, &LstHdr, sizeof(LstHdr), NULL /*pcbWritten*/);
    281         if (RT_SUCCESS(rc))
    282         {
    283             RTSGSEG aSegs[2];
    284             RTSGBUF SgBuf;
    285             EFI_SIGNATURE_DATA SigData;
    286             RTEfiGuidFromUuid(&SigData.GuidOwner, &pIt->UuidOwner);
    287 
    288             Assert(pDesc->cbSig == pIt->cbSignature);
    289             aSegs[0].pvSeg = &SigData;
    290             aSegs[0].cbSeg = sizeof(SigData);
    291             aSegs[1].pvSeg = &pIt->abSignature[0];
    292             aSegs[1].cbSeg = pIt->cbSignature;
    293             RTSgBufInit(&SgBuf, &aSegs[0], RT_ELEMENTS(aSegs));
    294             rc = RTVfsFileSgWrite(hVfsFileOut, -1, &SgBuf, true /*fBlocking*/, NULL /*pcbWritten*/);
    295         }
    296 
     279        LstHdr.cbSig       = RT_H2LE_U32(pIt->cbSignature + sizeof(SigData));
     280        RTEfiGuidFromUuid(&SigData.GuidOwner, &pIt->UuidOwner);
     281
     282        RTSGSEG aSegs[3];
     283        RTSGBUF SgBuf;
     284
     285        Assert(!pDesc->cbSigHdr);
     286        aSegs[0].pvSeg = &LstHdr;
     287        aSegs[0].cbSeg = sizeof(LstHdr);
     288        aSegs[1].pvSeg = &SigData;
     289        aSegs[1].cbSeg = sizeof(SigData);
     290        aSegs[2].pvSeg = &pIt->abSignature[0];
     291        aSegs[2].cbSeg = pIt->cbSignature;
     292        RTSgBufInit(&SgBuf, &aSegs[0], RT_ELEMENTS(aSegs));
     293        rc = RTVfsFileSgWrite(hVfsFileOut, -1, &SgBuf, true /*fBlocking*/, NULL /*pcbWritten*/);
    297294        if (RT_FAILURE(rc))
    298295            break;
    299296
    300         cbWritten += sizeof(LstHdr) + pDesc->cbSigHdr + pIt->cbSignature;
     297        cbWritten += sizeof(LstHdr) + sizeof(SigData) + pDesc->cbSigHdr + pIt->cbSignature;
    301298    }
    302299
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