Пример #1
0
/*Moves a process from the input queue into the in memory queue*/
void input_to_mem(MANAGER* mm, PROCESS* p) {
    if (p->prev == NULL) {
        mm->input_q = p->next;
        if (p->next != NULL) {
            p->next->prev = NULL;
        }
    } else {
        p->prev->next = p->next;
        if (p->next != NULL) {
            p->next->prev = p->prev;
        }
    }
    p->next = NULL;
    p->prev = NULL;
    add_mem(mm, p);
}
Пример #2
0
/*
 * read /proc/dma
 */
void read_dmas(misc_t *m)
{
  char buf[100];
  misc_dma_t *d;
  unsigned u;
  str_list_t *sl;

  if(!(m->proc_dma = read_file(PROC_DMA, 0, 0))) return;

  for(sl = m->proc_dma; sl; sl = sl->next) {
    if(sscanf(sl->str, " %u : %99[^\n]", &u, buf) == 2) {
      m->dma = add_mem(m->dma, sizeof *m->dma, m->dma_len);
      d = m->dma + m->dma_len++;
      d->channel = u;
      d->dev = new_str(buf);
    }
  }
}
Пример #3
0
/*
 * read /proc/ioports
 */
void read_ioports(misc_t *m)
{
  char buf[100];
  misc_io_t *r;
  uint64_t u, v;
  str_list_t *sl;

  if(!(m->proc_io = read_file(PROC_IOPORTS, 0, 0))) return;

  for(sl = m->proc_io; sl; sl = sl->next) {
    if(sscanf(sl->str, " %"PRIx64" - %"PRIx64" : %99[^\n]", &u, &v, buf) == 3) {
      m->io = add_mem(m->io, sizeof *m->io, m->io_len);
      r = m->io + m->io_len++;
      r->addr = u;
      r->size = v >= u ? v - u + 1 : 0;
      r->dev = new_str(buf);
    }
  }
}
Пример #4
0
Файл: mm.c Проект: deadbok/aMOS
int init_mem_list(void)
{
	mem_block_ptr		mem_block;

	alloc_list=add_mem(alloc_list, 0x00, 0x0500, LOW_MEM, SYSTEM_MEM);

	mem_block=add_mem(alloc_list, 0x0a0000, 0x0c0000-0x0a0000, LOW_MEM, SYSTEM_MEM);

	mem_block=add_mem(mem_block, 0x0c0000, 0x00100000-0x0c0000, LOW_MEM, SYSTEM_MEM);

	mem_block=add_mem(mem_block, 0x00100000, 0x00200000-0x00100000, HIGH_MEM, KERNEL_MEM);

	mem_block=add_mem(mem_block, 0x00200000, 0x00300000-0x00200000, HIGH_MEM, KERNEL_MEM);

	free_list=add_mem(free_list, 0x0500, 0x0a0000-0x0500, LOW_MEM, 0);

	mem_block=add_mem(free_list, 0x00300000, physical_mem_size-0x00300000, HIGH_MEM, 0);

	return(0);
}
Пример #5
0
state_t* eval_stmts(ast_t *p, state_t *state)
{
    ast_list_t *stmts;
    ast_list_t *ip;
    ast_t *t1, *t2;
    ast_t *s;
    value_t v;
    int just_tainted = 0;
    int i;
    assert(p != NULL);
    assert(p->info.node.tag == SEQ);
    ip = p->info.node.arguments;
    while(ip != NULL)
    {
	s = ip->elem;

	switch(s->info.node.tag){
	case ASSIGN:
            printf("\nthis is ASSIGN\n");
	    /* the lhs */
	    t1 = s->info.node.arguments->elem;
	    /* the rhs */
	    t2 = s->info.node.arguments->next->elem;
	    v = eval_exp(t2, state->tbl, state->mem);
	    switch(t1->tag){
	    case var_ast:
                printf("\n var ast horela.");
		state->tbl = update_var(t1->info.string, v, state->tbl);// check is tf == 1=>add tbl->name & reset tf= 0
                printf("\n var ast ke baad tbl name : %s",state->tbl->name); 
                if(tf==1){
                         printf("\nVal od type = %d",type);
                         printf("\nTainted. Adding this up! : %s\n",state->tbl->name);
                         add_var(state->tbl->name);
                         printf("\nAdded Taint! %s \n",state->tbl->name);
                         tf = 0;
                         just_tainted = 1;
                         tvar_index = 0;
                         type = 0;
                }
               


                if(constant_check == 1 && just_tainted == 0){
                printf("\n constant present...\n");
                printf("\nvariable name is ..%s\n",state->tbl->name);
                if(check_tain_var(state->tbl->name)){
                       printf("\n removing taint!\n\n");
                       remove_taint_var(state->tbl->name);
                       printf("\nremoved!\n");
                       constant_check = 0;
                      type = 0;
                }
            
                }
                just_tainted = 0;


		break;
	    case node_ast:
                 
                printf("\nMemo horela. ");
               
		assert(t1->info.node.tag == MEM);
		state->mem = store(eval_exp(t1->info.node.arguments->elem,
					  state->tbl, 
					  state->mem), v, state->mem);//same here. 

               
               

                if(tf == 1){
                            printf("\ntaint detected. Adding address %u up\n",state->mem->addr);
                            add_mem(state->mem->addr);
                            printf("\nMemory tainted! Addr : %u \n",state->mem->addr);
                             
                            tf = 0;
                            tmem_index = 0;
                            type = 0;
                            memo = 0;
                }
                     

                printf("\nafter nost ast..mem val is : %u",state->mem->addr);
                if(cc_mem == 2){
                printf("\n constant present...\n");
                if(check_tain_mem(state->mem->addr)){
                       printf("\n removing taint!\n\n");
                       remove_taint_mem(state->mem->addr);
                       printf("\nremoved!\n");
                       cc_mem = 0;
                }
            
                }

      



		break;
	    default:
		assert(0);
	    }
	  break;
	case PRINT:
            printf("\n this is printttt\n");
	    switch(s->info.node.arguments->elem->tag){
	    case str_ast:
                printf("\nin str-ast");
		printf("str asgn %s\n", s->info.node.arguments->elem->info.string);
                fprintf(stderr,"Tainted variable: None\n");
		break;
	    default:
                printf("\n default.\n");
                printf("\n Memory addrs now : %u \n",state->mem->addr);
                printf("\n var name now :%s\n",state->tbl->name);
                coming_from_print =1;
                
		printf("def %u\n", eval_exp(s->info.node.arguments->elem, 
					state->tbl,
	        				state->mem));  
                if (tf==0)
                 fprintf(stderr,"Tainted variable: None\n");
                    

                 
	         if(tf == 1){
                    
                    printf("\nTaint detected!! with type %d and tvar_index %d\n",type,tvar_index);
                    fprintf(stderr,"Tainted variable: ");
                    /*switch(type){
                    case 1 : printf("\nIts a variable!\n"); 
                             %s\n",tvar_arr[tvar_index]);
                             break;
                    case 2 : printf("\nIts a memory!\n");
                             fprintf(stderr,"Tainted variable: mem[%u]\n",tmem_arr[tmem_index]);
                             break;
                   case 3 : printf("\nIts kinda both.\n");
                             fprintf(stderr,"Tainted variable: %s, mem[%u]\n",tvar_arr[tvar_index],tmem_arr[tmem_index]); 
                             break;  
                    case 4 : printf("\nIts direct!\n");
                             fprintf(stderr," direct");
                             break;      
 
                    }
                    fprintf(stderr,"Tainted variable: ");*/
                                                
                    for (i=0;i<=tvar_index; i++)
                      {  if (tvar_arr[i][1] == 2)
                            {
         		   // printf("\nIts direct!\n");
        		    fprintf(stderr,"direct"); 
                        
                               
                            }

                         else if (tvar_arr[i][1] == 1)
                            {
         		   // printf("\nIts a variable!\n");
        		    fprintf(stderr,"mem[%d]",tvar_arr[i][0]); 
                            }

                          else 
                            {
         		   // printf("\nIts a variable!\n");
        		    fprintf(stderr,"%s",tvar_arr[i]); 
                            }
 
                          if (i>0 && i<tvar_index)
                          fprintf(stderr,", ");
       
                      }
                       fprintf(stderr,"\n");
                     
                 }

                 type = 0;
                 tf = 0;
                 tvar_index = 0;
                 tmem_index = 0;
                 coming_from_print = 0;
		break;
	    }

	  break;
	case IF:
            printf("\nthis is IFFF\n");
	    if(eval_exp(s->info.node.arguments->elem, state->tbl, state->mem)){
		state = eval_stmts(s->info.node.arguments->next->elem, state);
	    } else {
		state = eval_stmts(s->info.node.arguments->next->next->elem, state);
            } 
	  break;
	case SEQ:
            printf("\n this is SEQQQ\n");
	    state = eval_stmts(s->info.node.arguments->next->elem, state);
	  break;
	case ASSERT:
	    if(eval_exp(s->info.node.arguments->elem, state->tbl,state->mem) ==0){
		printf("Assert failed!\n");
	    }
	  break;
	default:
	  printf("Unknown statement type\n");
	  assert(0);
	  break;
	}
	ip = ip->next;
    }
    return state;
}
bool CTempMemory_list::add_tmp_allocate(const CEE_handle_def* call_id,void*ptr)
{
	return add_mem( call_id, ptr );
}
Пример #7
0
/*
 * read /proc/interrupts
 *
 * This is somewhat more tricky, as the irq event counts are done separately
 * per cpu *and* there may be irq sharing.
 */
void read_irqs(misc_t *m)
{
  char buf[100], buf2[100], *s;
  misc_irq_t *ir;
  int i, j;
  unsigned u, v, k;
  str_list_t *sl;

  if(!(m->proc_irq = read_file(PROC_INTERRUPTS, 1, 0))) return;

  for(sl = m->proc_irq; sl; sl = sl->next) {
    /* irq */
    i = 0;
    if(sscanf(sl->str, " %u: %n", &u, &i) < 1) continue;
    v = 0;
    j = i;
    /* add up all event counters */
    while(j < (int) strlen(sl->str) && sscanf(sl->str + j, " %u %n", &k, &i) >= 1) {
      if(!i) break;
      v += k;
      j += i;
    }
    /* device driver name string */
#if defined(__PPC__)
    if(
      sscanf(sl->str + j, " %*s Edge %99[^\n]", buf) == 1 ||
      sscanf(sl->str + j, " %*s Level %99[^\n]", buf) == 1 ||
      sscanf(sl->str + j, " %*s %99[^\n]", buf) == 1
    ) {
#else
#if defined(__alpha__) || defined(__sparc__)
    if(sscanf(sl->str + j, " %99[^\n]", buf) == 1) {
#else	/* __i386__ || __x86_64__ || __ia64__ */
    if(sscanf(sl->str + j, " %*s %99[^\n]", buf) == 1) {
#endif
#endif
      m->irq = add_mem(m->irq, sizeof *m->irq, m->irq_len);
      ir = m->irq + m->irq_len++;
      ir->irq = u;
      ir->events = v;

      /* split device driver names (separated by ',') */
      s = buf;
      while(*s && sscanf(s, " %99[^,] %n", buf2, &j) >= 1) {
        ir->dev = add_mem(ir->dev, sizeof *ir->dev, ir->devs);
        ir->dev[ir->devs++] = new_str(buf2);
        s += j;
        if(*s) s++;	/* skip ',' */
      }
    }
  }
}

void gather_resources(misc_t *m, hd_res_t **r, char *name, unsigned which)
{
  int i, j;
  hd_res_t *res;

  if(!m) return;

  if(!which) which = W_IO | W_DMA | W_IRQ;

  if((which & W_IO)) for(i = 0; (unsigned) i < m->io_len; i++) {
    if(!strcmp(name, m->io[i].dev)) {
      res = add_res_entry(r, new_mem(sizeof **r));
      res->io.type = res_io;
      res->io.enabled = 1;
      res->io.base = m->io[i].addr;
      res->io.range = m->io[i].size;
      res->io.access = acc_rw;
      m->io[i].tag++;
    }
  }

  if((which & W_DMA)) for(i = 0; (unsigned) i < m->dma_len; i++) {
    if(!strcmp(name, m->dma[i].dev)) {
      res = add_res_entry(r, new_mem(sizeof **r));
      res->dma.type = res_dma;
      res->dma.enabled = 1;
      res->dma.base = m->dma[i].channel;
      m->dma[i].tag++;
    }
  }

  if((which & W_IRQ)) for(i = 0; (unsigned) i < m->irq_len; i++) {
    for(j = 0; j <  m->irq[i].devs; j++) {
      if(!strcmp(name, m->irq[i].dev[j])) {
        res = add_res_entry(r, new_mem(sizeof **r));
        res->irq.type = res_irq;
        res->irq.enabled = 1;
        res->irq.base = m->irq[i].irq;
        res->irq.triggered = m->irq[i].events;
        m->irq[i].tag++;
      }
    }
  }
}


int active_vga_card(hd_t *hd)
{
  hd_res_t *res;

  if(hd->bus.id != bus_pci) return 1;

  for(res = hd->res; res; res = res->next) {
    if(
      (res->mem.type == res_mem && res->mem.enabled) ||
      (res->io.type == res_io && res->io.enabled)
    ) return 1;
  }

  return 0;
}