Пример #1
0
int write_junk(const char *fname, int flags, int sync_options, uint64_t file_size)
{
	int fd, len;
	uint64_t offset, generation = 0;
	char *buf;

	len = posix_memalign((void **)&buf, bufsize, bufsize);
	if (len) {
		errno = len;
		perror("alloc");
		return 66;
	}

	fd = open(fname, flags | O_WRONLY);
	if (fd < 1) {
		perror(fname);
		return 64;
	}

	while (1) {
		len = snprintf(buf, bufsize - 1, "%d - %"PRIu64, getpid(), generation++);
		if (flags & O_DIRECT) {
			len = bufsize;
			offset = get_randnum_align(0, file_size - len, bufsize);
		} else {
			offset = get_randnum(0, file_size - len);
		}

		if (pwrite(fd, buf, len, offset) < 0) {
			perror("pwrite");
			close(fd);
			free(buf);
			return 65;
		}
		if ((sync_options & SYNC_RANGE) && sync_file_range(fd, offset, len, SYNC_FILE_RANGE_WAIT_BEFORE |
SYNC_FILE_RANGE_WRITE | SYNC_FILE_RANGE_WAIT_AFTER) < 0) {
			perror("sync_file_range");
			close(fd);
			free(buf);
			return 67;
		}
		if ((sync_options & SYNC_FILE) && fsync(fd)) {
			perror("fsync");
			close(fd);
			free(buf);
			return 68;
		}
	}

	return 0;
}
Пример #2
0
int main(int argc, char *argv[]) {
	int debug = 0;
	
	if (!seed_random()) {
		return 1;
	}

	if (argc > 1 && strcmp(argv[1], "-d") == 0) {
		debug = 1;
	}

	/*
	FILE *fp = fopen("/dev/tty", "w");
	fprintf(fp, "randasys process group is %d\n", getpgrp());
	fclose(fp);
	*/

	install_signal_handlers();

	while(1) {
		callnum = find_syscall();
		args[0] = get_randnum(0, ULONG_MAX);
		args[1] = get_randnum(0, ULONG_MAX);
		args[2] = get_randnum(0, ULONG_MAX);
		args[3] = get_randnum(0, ULONG_MAX);
		args[4] = get_randnum(0, ULONG_MAX);
		args[5] = get_randnum(0, ULONG_MAX);

		if (debug) {
			printf("syscall(%d, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X);       \r",
				callnum, args[0], args[1], args[2], args[3], args[4],
				args[5]);
			fflush(stdout);
		}

		syscall(callnum, args[0], args[1], args[2],
				args[3], args[4], args[5]);
		
	}

	return 0;
}
Пример #3
0
int find_syscall(void) {
	int x;

badcall:
	x = get_randnum(0, 384);

	/* poorly implemented blacklist */
	switch (x) {
		/* don't screw with signal handling */
#ifdef SYS_signal
		case SYS_signal:
#endif
#ifdef SYS_sigaction
		case SYS_sigaction:
#endif
#ifdef SYS_sigsuspend
		case SYS_sigsuspend:
#endif
#ifdef SYS_sigpending
		case SYS_sigpending:
#endif
#ifdef SYS_sigreturn
		case SYS_sigreturn:
#endif
#ifdef SYS_sigprocmask
		case SYS_sigprocmask:
#endif
#ifdef SYS_rt_sigreturn
		case SYS_rt_sigreturn:
#endif
#ifdef SYS_rt_sigaction
		case SYS_rt_sigaction:
#endif
#ifdef SYS_rt_sigprocmask
		case SYS_rt_sigprocmask:
#endif
#ifdef SYS_rt_sigpending
		case SYS_rt_sigpending:
#endif
#ifdef SYS_rt_sigtimedwait
		case SYS_rt_sigtimedwait:
#endif
#ifdef SYS_rt_sigqueueinfo
		case SYS_rt_sigqueueinfo:
#endif
#ifdef SYS_rt_sigsuspend
		case SYS_rt_sigsuspend:
#endif
#ifdef SYS_sigaltstack
		case SYS_sigaltstack:
#endif
#ifdef SYS_settimeofday
		case SYS_settimeofday:
#endif

		/* don't exit the program :P */
#ifdef SYS_exit
		case SYS_exit:
#endif
#ifdef SYS_exit_group
		case SYS_exit_group:
#endif

		/* don't put it to sleep either */
#ifdef SYS_pause
		case SYS_pause:
#endif
#ifdef SYS_select
		case SYS_select:
#endif
#ifdef SYS_read
		case SYS_read:
#endif
#ifdef SYS_write
		case SYS_write:
#endif

		/* these can fill the process table */
#ifdef SYS_fork
		case SYS_fork:
#endif
#ifdef SYS_vfork
		case SYS_vfork:
#endif
#ifdef SYS_clone
		case SYS_clone:
#endif

		/* This causes OOM conditions */
#if 1
#ifdef SYS_brk
		case SYS_brk:
#endif
#endif

		/* these get our program killed */
#ifdef SYS_vm86
		case SYS_vm86:
#endif
#ifdef SYS_vm86old
		case SYS_vm86old:
#endif
			goto badcall;
	}

	return x;
}
Пример #4
0
int mmap_junk(const char *fname, int flags, int sync_options, uint64_t file_size)
{
	int fd, len;
	uint64_t offset, generation = 0;
	char *buf, *map;
	long page_size;

	page_size = sysconf(_SC_PAGESIZE);
	if (page_size < 0) {
		perror("_SC_PAGESIZE");
		return 101;
	}

	fd = open(fname, flags | O_RDWR);
	if (fd < 1) {
		perror(fname);
		return 96;
	}

	len = posix_memalign((void **)&buf, bufsize, bufsize);
	if (len) {
		errno = len;
		perror("alloc");
		return 102;
	}

	map = mmap(NULL, file_size, PROT_WRITE, MAP_SHARED, fd, 0);
	if (map == MAP_FAILED) {
		perror(fname);
		return 97;
	}

	while (1) {
		len = snprintf(buf, bufsize - 1, "%d - %"PRIu64, getpid(), generation++);
		if (flags & O_DIRECT) {
			len = bufsize;
			offset = get_randnum_align(0, file_size - len, bufsize);
		} else {
			offset = get_randnum(0, file_size - len);
		}

		memcpy(map + offset, buf, len);
		len += offset & (page_size - 1);
		offset &= ~(page_size - 1);
		if ((sync_options & SYNC_RANGE) && msync(map + offset, len, MS_SYNC | MS_INVALIDATE)) {
			perror("msync");
			munmap(map, file_size);
			close(fd);
			free(buf);
			return 99;
		}
		if ((sync_options & SYNC_FILE) && fsync(fd)) {
			perror("fsync");
			munmap(map, file_size);
			close(fd);
			free(buf);
			return 100;
		}
	}

	return 0;
}