void testOverlap(void) { char buf[20]; memset(buf, 12, sizeof(buf)); buf[12] = 13; ASSERT(!verifyBlock(buf, 12, sizeof(buf))); buf[12] = 12; ASSERT(verifyBlock(buf, 12, sizeof(buf))); }
void testBP(void) { char above[ABOVE_MEM_SIZE]; int f; char below[BELOW_MEM_SIZE]; memset(above, ABOVE_MEM_TEST_SIZE, sizeof(above)); memset(below, BELOW_MEM_TEST_SIZE, sizeof(below)); ASSERT(verifyBlock(above, ABOVE_MEM_TEST_SIZE, sizeof(above))); ASSERT(verifyBlock(below, BELOW_MEM_TEST_SIZE, sizeof(below))); f = spoil(-5); spoil(f); ASSERT(verifyBlock(above, ABOVE_MEM_TEST_SIZE, sizeof(above))); ASSERT(verifyBlock(below, BELOW_MEM_TEST_SIZE, sizeof(below))); }
static int DnD_TryInitVmblock(const char *vmbFsName, // IN const char *vmbMntPoint, // IN const char *vmbDevice, // IN mode_t vmbDeviceMode, // IN Bool (*verifyBlock)(int fd)) // IN { #if defined NO_SETMNTENT || defined NO_ENDMNTENT NOT_IMPLEMENTED(); errno = ENOSYS; return -1; #else Bool found = FALSE; int blockFd = -1; char *realMntPoint; MNTHANDLE fp; DECLARE_MNTINFO(mnt); ASSERT(vmbFsName); ASSERT(vmbMntPoint); ASSERT(vmbDevice); /* Resolve desired mount point in case it is symlinked somewhere */ realMntPoint = Posix_RealPath(vmbMntPoint); if (!realMntPoint) { /* * If resolve failed for some reason try to fall back to * original mount point specification. */ realMntPoint = Util_SafeStrdup(vmbMntPoint); } /* Make sure the vmblock file system is mounted. */ fp = OPEN_MNTFILE("r"); if (fp == NULL) { LOG(1, ("%s: could not open mount file\n", __func__)); goto out; } while (GETNEXT_MNTINFO(fp, mnt)) { /* * In the future we can publish the mount point in VMDB so that the UI * can use it rather than enforcing the VMBLOCK_MOUNT_POINT check here. */ if (strcmp(MNTINFO_FSTYPE(mnt), vmbFsName) == 0 && strcmp(MNTINFO_MNTPT(mnt), realMntPoint) == 0) { found = TRUE; break; } } (void) CLOSE_MNTFILE(fp); if (found) { /* Open device node for communication with vmblock. */ blockFd = Posix_Open(vmbDevice, vmbDeviceMode); if (blockFd < 0) { LOG(1, ("%s: Can not open blocker device (%s)\n", __func__, strerror(errno))); } else { LOG(4, ("%s: Opened blocker device at %s\n", __func__, VMBLOCK_DEVICE)); if (verifyBlock && !verifyBlock(blockFd)) { LOG(4, ("%s: Blocker device at %s did not pass checks, closing.\n", __func__, VMBLOCK_DEVICE)); close(blockFd); blockFd = -1; } } } out: free(realMntPoint); return blockFd; #endif }