Changeset 21787 in vbox
- Timestamp:
- Jul 24, 2009 12:51:44 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/ssm.h
r21217 r21787 436 436 VMMR3DECL(int) SSMR3Save(PVM pVM, const char *pszFilename, SSMAFTER enmAfter, PFNVMPROGRESS pfnProgress, void *pvUser); 437 437 VMMR3DECL(int) SSMR3Load(PVM pVM, const char *pszFilename, SSMAFTER enmAfter, PFNVMPROGRESS pfnProgress, void *pvUser); 438 VMMR3DECL(int) SSMR3ValidateFile(const char *pszFilename );438 VMMR3DECL(int) SSMR3ValidateFile(const char *pszFilename, bool fChecksumIt); 439 439 VMMR3DECL(int) SSMR3Open(const char *pszFilename, unsigned fFlags, PSSMHANDLE *ppSSM); 440 440 VMMR3DECL(int) SSMR3Close(PSSMHANDLE pSSM); -
trunk/src/VBox/Main/ConsoleImpl.cpp
r21779 r21787 4728 4728 4729 4729 /* 4730 * Saved VMs will have to prove that their saved states arekosher.4730 * Saved VMs will have to prove that their saved states seem kosher. 4731 4731 */ 4732 4732 if (mMachineState == MachineState_Saved) … … 4735 4735 CheckComRCReturnRC (rc); 4736 4736 ComAssertRet (!!savedStateFile, E_FAIL); 4737 int vrc = SSMR3ValidateFile (Utf8Str (savedStateFile) );4737 int vrc = SSMR3ValidateFile (Utf8Str (savedStateFile), false /* fChecksumIt */); 4738 4738 if (VBOX_FAILURE (vrc)) 4739 4739 return setError (VBOX_E_FILE_ERROR, -
trunk/src/VBox/VMM/SSM.cpp
r21773 r21787 375 375 static int ssmR3CalcChecksum(RTFILE File, uint64_t cbFile, uint32_t *pu32CRC); 376 376 static void ssmR3Progress(PSSMHANDLE pSSM, uint64_t cbAdvance); 377 static int ssmR3Validate (RTFILE File, PSSMFILEHDR pHdr, size_t *pcbFileHdr);377 static int ssmR3ValidateFile(RTFILE File, bool fChecksumIt, PSSMFILEHDR pHdr, size_t *pcbFileHdr); 378 378 static PSSMUNIT ssmR3Find(PVM pVM, const char *pszName, uint32_t u32Instance); 379 379 static int ssmR3WriteFinish(PSSMHANDLE pSSM); … … 1425 1425 * @param File File to validate. 1426 1426 * The file position is undefined on return. 1427 * @param fChecksumIt Whether to checksum the file or not. 1427 1428 * @param pHdr Where to store the file header. 1428 1429 * @param pcbFileHdr Where to store the file header size. 1429 1430 */ 1430 static int ssmR3Validate (RTFILE File, PSSMFILEHDR pHdr, size_t *pcbFileHdr)1431 static int ssmR3ValidateFile(RTFILE File, bool fChecksumIt, PSSMFILEHDR pHdr, size_t *pcbFileHdr) 1431 1432 { 1432 1433 /* … … 1552 1553 1553 1554 /* 1554 * Verify the checksum. 1555 */ 1556 rc = RTFileSeek(File, offCrc32, RTFILE_SEEK_BEGIN, NULL); 1557 if (RT_FAILURE(rc)) 1558 { 1559 Log(("SSM: Failed to seek to crc start. rc=%Rrc\n", rc)); 1560 return rc; 1561 } 1562 uint32_t u32CRC; 1563 rc = ssmR3CalcChecksum(File, pHdr->cbFile - *pcbFileHdr, &u32CRC); 1564 if (RT_FAILURE(rc)) 1565 return rc; 1566 if (u32CRC != pHdr->u32CRC) 1567 { 1568 Log(("SSM: Invalid CRC! Calculated %#08x, in header %#08x\n", u32CRC, pHdr->u32CRC)); 1569 return VERR_SSM_INTEGRITY_CRC; 1555 * Verify the checksum if requested. 1556 */ 1557 if (fChecksumIt) 1558 { 1559 rc = RTFileSeek(File, offCrc32, RTFILE_SEEK_BEGIN, NULL); 1560 if (RT_FAILURE(rc)) 1561 { 1562 Log(("SSM: Failed to seek to crc start. rc=%Rrc\n", rc)); 1563 return rc; 1564 } 1565 uint32_t u32CRC; 1566 rc = ssmR3CalcChecksum(File, pHdr->cbFile - *pcbFileHdr, &u32CRC); 1567 if (RT_FAILURE(rc)) 1568 return rc; 1569 if (u32CRC != pHdr->u32CRC) 1570 { 1571 Log(("SSM: Invalid CRC! Calculated %#08x, in header %#08x\n", u32CRC, pHdr->u32CRC)); 1572 return VERR_SSM_INTEGRITY_CRC; 1573 } 1570 1574 } 1571 1575 … … 1679 1683 */ 1680 1684 SSMFILEHDR Hdr; 1681 rc = ssmR3Validate (Handle.File, &Hdr, &Handle.cbFileHdr);1685 rc = ssmR3ValidateFile(Handle.File, true /* fChecksumIt */, &Hdr, &Handle.cbFileHdr); 1682 1686 if (RT_SUCCESS(rc)) 1683 1687 { … … 2052 2056 * 2053 2057 * @param pszFilename The path to the file to validate. 2058 * @param fChecksumIt Whether to checksum the file or not. 2054 2059 * 2055 2060 * @thread Any. 2056 2061 */ 2057 VMMR3DECL(int) SSMR3ValidateFile(const char *pszFilename )2058 { 2059 LogFlow(("SSMR3ValidateFile: pszFilename=%p:{%s} \n", pszFilename, pszFilename));2062 VMMR3DECL(int) SSMR3ValidateFile(const char *pszFilename, bool fChecksumIt) 2063 { 2064 LogFlow(("SSMR3ValidateFile: pszFilename=%p:{%s} fChecksumIt=%RTbool\n", pszFilename, pszFilename, fChecksumIt)); 2060 2065 2061 2066 /* … … 2068 2073 size_t cbFileHdr; 2069 2074 SSMFILEHDR Hdr; 2070 rc = ssmR3Validate (File, &Hdr, &cbFileHdr);2075 rc = ssmR3ValidateFile(File, fChecksumIt, &Hdr, &cbFileHdr); 2071 2076 RTFileClose(File); 2072 2077 } … … 2113 2118 SSMFILEHDR Hdr; 2114 2119 size_t cbFileHdr; 2115 rc = ssmR3Validate (pSSM->File, &Hdr, &cbFileHdr);2120 rc = ssmR3ValidateFile(pSSM->File, true /* fChecksumIt */, &Hdr, &cbFileHdr); 2116 2121 if (RT_SUCCESS(rc)) 2117 2122 { -
trunk/src/VBox/VMM/testcase/tstSSM.cpp
r20864 r21787 154 154 155 155 uint64_t u64Elapsed = RTTimeNanoTS() - u64Start; 156 RTPrintf("tstSSM: Saved 1st item in % RI64 ns\n", u64Elapsed);156 RTPrintf("tstSSM: Saved 1st item in %'RI64 ns\n", u64Elapsed); 157 157 return 0; 158 158 } … … 302 302 303 303 uint64_t u64Elapsed = RTTimeNanoTS() - u64Start; 304 RTPrintf("tstSSM: Saved 2nd item in % RI64 ns\n", u64Elapsed);304 RTPrintf("tstSSM: Saved 2nd item in %'RI64 ns\n", u64Elapsed); 305 305 return 0; 306 306 } … … 408 408 409 409 uint64_t u64Elapsed = RTTimeNanoTS() - u64Start; 410 RTPrintf("tstSSM: Saved 3rd item in % RI64 ns\n", u64Elapsed);410 RTPrintf("tstSSM: Saved 3rd item in %'RI64 ns\n", u64Elapsed); 411 411 return 0; 412 412 } … … 506 506 507 507 uint64_t u64Elapsed = RTTimeNanoTS() - u64Start; 508 RTPrintf("tstSSM: Saved 4th item in % RI64 ns\n", u64Elapsed);508 RTPrintf("tstSSM: Saved 4th item in %'RI64 ns\n", u64Elapsed); 509 509 return 0; 510 510 } … … 698 698 } 699 699 uint64_t u64Elapsed = RTTimeNanoTS() - u64Start; 700 RTPrintf("tstSSM: Saved in % RI64 ns\n", u64Elapsed);700 RTPrintf("tstSSM: Saved in %'RI64 ns\n", u64Elapsed); 701 701 702 702 RTFSOBJINFO Info; … … 720 720 } 721 721 u64Elapsed = RTTimeNanoTS() - u64Start; 722 RTPrintf("tstSSM: Loaded in % RI64 ns\n", u64Elapsed);722 RTPrintf("tstSSM: Loaded in %'RI64 ns\n", u64Elapsed); 723 723 724 724 /* … … 726 726 */ 727 727 u64Start = RTTimeNanoTS(); 728 rc = SSMR3ValidateFile(pszFilename );728 rc = SSMR3ValidateFile(pszFilename, false /* fChecksumIt*/ ); 729 729 if (RT_FAILURE(rc)) 730 730 { … … 733 733 } 734 734 u64Elapsed = RTTimeNanoTS() - u64Start; 735 RTPrintf("tstSSM: Validated in %RI64 ns\n", u64Elapsed); 735 RTPrintf("tstSSM: Validated without checksumming in %'RI64 ns\n", u64Elapsed); 736 737 u64Start = RTTimeNanoTS(); 738 rc = SSMR3ValidateFile(pszFilename, true /* fChecksumIt */); 739 if (RT_FAILURE(rc)) 740 { 741 RTPrintf("SSMR3ValidateFile #1 -> %Rrc\n", rc); 742 return 1; 743 } 744 u64Elapsed = RTTimeNanoTS() - u64Start; 745 RTPrintf("tstSSM: Validated and checksummed in %'RI64 ns\n", u64Elapsed); 736 746 737 747 /* … … 747 757 } 748 758 u64Elapsed = RTTimeNanoTS() - u64Start; 749 RTPrintf("tstSSM: Opened in % RI64 ns\n", u64Elapsed);759 RTPrintf("tstSSM: Opened in %'RI64 ns\n", u64Elapsed); 750 760 751 761 /* negative */ … … 758 768 } 759 769 u64Elapsed = RTTimeNanoTS() - u64Start; 760 RTPrintf("tstSSM: Failed seek in % RI64 ns\n", u64Elapsed);770 RTPrintf("tstSSM: Failed seek in %'RI64 ns\n", u64Elapsed); 761 771 762 772 /* 2nd unit */ … … 782 792 } 783 793 u64Elapsed = RTTimeNanoTS() - u64Start; 784 RTPrintf("tstSSM: Loaded 2nd item in % RI64 ns\n", u64Elapsed);794 RTPrintf("tstSSM: Loaded 2nd item in %'RI64 ns\n", u64Elapsed); 785 795 786 796 /* 1st unit */ … … 800 810 } 801 811 u64Elapsed = RTTimeNanoTS() - u64Start; 802 RTPrintf("tstSSM: Loaded 1st item in % RI64 ns\n", u64Elapsed);812 RTPrintf("tstSSM: Loaded 1st item in %'RI64 ns\n", u64Elapsed); 803 813 804 814 /* 3st unit */ … … 818 828 } 819 829 u64Elapsed = RTTimeNanoTS() - u64Start; 820 RTPrintf("tstSSM: Loaded 3rd item in % RI64 ns\n", u64Elapsed);830 RTPrintf("tstSSM: Loaded 3rd item in %'RI64 ns\n", u64Elapsed); 821 831 822 832 /* close */
Note:
See TracChangeset
for help on using the changeset viewer.