VirtualBox

Changeset 82690 in vbox for trunk/src/VBox/Devices/Storage


Ignore:
Timestamp:
Jan 9, 2020 12:01:58 PM (5 years ago)
Author:
vboxsync
Message:

DrvVD: Workaround to make encrypted VMs with snapshots work again

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DrvVD.cpp

    r82130 r82690  
    50805080
    50815081            /* Check VDConfig for encryption config. */
    5082             if (pCfgVDConfig)
    5083                 pThis->pCfgCrypto = CFGMR3GetChild(pCfgVDConfig, "CRYPT");
    5084 
    5085             if (pThis->pCfgCrypto)
    5086             {
    5087                 /* Setup VDConfig interface for disk encryption support. */
    5088                 pThis->VDIfCfg.pfnAreKeysValid  = drvvdCfgAreKeysValid;
    5089                 pThis->VDIfCfg.pfnQuerySize     = drvvdCfgQuerySize;
    5090                 pThis->VDIfCfg.pfnQuery         = drvvdCfgQuery;
    5091                 pThis->VDIfCfg.pfnQueryBytes    = NULL;
    5092 
    5093                 pThis->VDIfCrypto.pfnKeyRetain               = drvvdCryptoKeyRetain;
    5094                 pThis->VDIfCrypto.pfnKeyRelease              = drvvdCryptoKeyRelease;
    5095                 pThis->VDIfCrypto.pfnKeyStorePasswordRetain  = drvvdCryptoKeyStorePasswordRetain;
    5096                 pThis->VDIfCrypto.pfnKeyStorePasswordRelease = drvvdCryptoKeyStorePasswordRelease;
     5082            /** @todo This makes sure that the crypto config is not cleared accidentally
     5083             * when it was set because there are multiple VDConfig entries for a snapshot chain
     5084             * but only one contains the crypto config.
     5085             *
     5086             * This needs to be properly fixed by specifying which part of the image should contain the
     5087             * crypto stuff.
     5088             */
     5089            if (!pThis->pCfgCrypto)
     5090            {
     5091                if (pCfgVDConfig)
     5092                    pThis->pCfgCrypto = CFGMR3GetChild(pCfgVDConfig, "CRYPT");
     5093
     5094                if (pThis->pCfgCrypto)
     5095                {
     5096                    /* Setup VDConfig interface for disk encryption support. */
     5097                    pThis->VDIfCfg.pfnAreKeysValid  = drvvdCfgAreKeysValid;
     5098                    pThis->VDIfCfg.pfnQuerySize     = drvvdCfgQuerySize;
     5099                    pThis->VDIfCfg.pfnQuery         = drvvdCfgQuery;
     5100                    pThis->VDIfCfg.pfnQueryBytes    = NULL;
     5101
     5102                    pThis->VDIfCrypto.pfnKeyRetain               = drvvdCryptoKeyRetain;
     5103                    pThis->VDIfCrypto.pfnKeyRelease              = drvvdCryptoKeyRelease;
     5104                    pThis->VDIfCrypto.pfnKeyStorePasswordRetain  = drvvdCryptoKeyStorePasswordRetain;
     5105                    pThis->VDIfCrypto.pfnKeyStorePasswordRelease = drvvdCryptoKeyStorePasswordRelease;
     5106                }
    50975107            }
    50985108
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