Exemple #1
0
/* active is set to 1 but addr is not valid.			*/
int setup_mmap(int which) {

	int i,prot,flags,size;

	i=find_empty_mmap();
	if (i<0) return -1;

	size=mmap_random_size(1);
	prot=mmap_random_prot();
	flags=mmap_random_flags();

	/* need locking? */
//	mmaps[i].active=1;
	mmaps[i].addr=MAP_FAILED;
	mmaps[i].prot=prot;
	mmaps[i].flags=flags;
	mmaps[i].size=size;
	mmaps[i].aux=0;

	if (!ignore_but_dont_skip.mmap) {

		stats.mmap_attempts++;
		mmaps[i].addr=mmap(NULL, size,
			prot, flags,
			event_data[which].fd, 0);

		/* If running as root, with MAP_FIXED, NULL is a valid addr */
//		if (mmaps[i].addr==NULL) {
//			printf("This can't happen???\n");
//		}

		if (mmaps[i].addr==MAP_FAILED) {
			mmaps[i].addr=MAP_FAILED;
#if LOG_FAILURES
			if (logging&TYPE_MMAP) {
				if (trigger_failure_logging) {
					sprintf(log_buffer,"# M %d %d %p\n",
						mmaps[i].size,
						event_data[which].fd,
						mmaps[i].addr);
					write(log_fd,log_buffer,
						strlen(log_buffer));
				}
			}
#endif
			return -1;
		}

		else {
			active_mmaps++;
			event_data[which].mmap=i;
			mmaps[i].fd=event_data[which].fd;
			mmaps[i].which_event=which;

			if (logging&TYPE_MMAP) {
				sprintf(log_buffer,"M %d %d %p\n",
					mmaps[i].size,
					event_data[which].fd,
					mmaps[i].addr);
				write(log_fd,log_buffer,strlen(log_buffer));
			}

			stats.mmap_successful++;
		}
	}

	mmaps[i].active=1;
//	if (mmaps[i].addr==NULL) printf("%d.active=1 %p\n",i,mmaps[i].addr);

	/* Randomly try to set up an aux mmap too */
	if (rand()%4==0) {
		setup_mmap_aux(which,i);
	}



	return 0;
}
Exemple #2
0
int setup_mmap(int which) {

	int i,prot,flags;

	i=find_empty_mmap();
	if (i<0) return -1;

	/* need locking? */
	mmaps[i].active=1;

	/* to be valid we really want to be 1+2^x pages */
	switch(rand()%3) {
		case 0: mmaps[i].size=(rand()%64)*getpagesize();
			break;
		case 1: mmaps[i].size=
				(1 + (1<<rand()%10) )*getpagesize();
			break;
		default: mmaps[i].size=rand()%65535;
	}

	mmaps[i].addr=NULL;

	prot=mmap_random_prot();
	flags=mmap_random_flags();
	mmaps[i].prot=prot;
	mmaps[i].flags=flags;
	mmaps[i].aux=0;

	if (!ignore_but_dont_skip.mmap) {

		stats.mmap_attempts++;
		mmaps[i].addr=mmap(NULL, mmaps[i].size,
			prot, flags,
			event_data[which].fd, 0);

		if (mmaps[i].addr==MAP_FAILED) {
			mmaps[i].addr=NULL;
			mmaps[i].active=0;
#if LOG_FAILURES
			if (logging&TYPE_MMAP) {
				if (trigger_failure_logging) {
					sprintf(log_buffer,"# M %d %d %p\n",
						mmaps[i].size,
						event_data[which].fd,
						mmaps[i].addr);
					write(log_fd,log_buffer,
						strlen(log_buffer));
				}
			}
#endif
		}

		else {
			active_mmaps++;
			event_data[which].mmap=i;
			mmaps[i].fd=event_data[which].fd;

			if (logging&TYPE_MMAP) {
				sprintf(log_buffer,"M %d %d %p\n",
					mmaps[i].size,
					event_data[which].fd,
					mmaps[i].addr);
				write(log_fd,log_buffer,strlen(log_buffer));
			}

			stats.mmap_successful++;
		}
	}

	/* Randomly try to set up an aux mmap too */
	if (rand()%4==0) {
		setup_mmap_aux(which,i);
	}

	return 0;
}