unsigned long ret_size = 0; 
unsigned long im_free(void * addr){	struct vm_struct **p, *tmp;	unsigned long ret_size = 0;  	if (!addr)		return ret_size;	if ((PAGE_SIZE-1) & (unsigned long) addr) {		printk(KERN_ERR "Trying to %s bad address (%p)\n", __FUNCTION__,			addr);		return ret_size;	}	down(&imlist_sem);	for (p = &imlist ; (tmp = *p) ; p = &tmp->next) {		if (tmp->addr == addr) {			ret_size = tmp->size;			*p = tmp->next;			kfree(tmp);			up(&imlist_sem);			return ret_size;		}	}	up(&imlist_sem);	printk(KERN_ERR "Trying to %s nonexistent area (%p)\n", __FUNCTION__,			addr);	return ret_size;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/20cee16ced631f70a62c97bdebae08a1c9470448/imalloc.c/buggy/arch/ppc64/mm/imalloc.c