X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fmain.c;h=c432e3ce1a86897a71b6b52e44b54722a4f3a472;hb=b7093fd3602ef2c796a1f8a0daded9d6aad0b756;hp=b7fecea7324436fe15316de83d178cb62b462990;hpb=a3534432fa8e7a9fe4730c151ca52350ca0a2faf;p=palacios.git diff --git a/linux_module/main.c b/linux_module/main.c index b7fecea..c432e3c 100644 --- a/linux_module/main.c +++ b/linux_module/main.c @@ -44,7 +44,7 @@ int mod_frees = 0; static int v3_major_num = 0; static struct v3_guest * guest_map[MAX_VMS] = {[0 ... MAX_VMS - 1] = 0}; -static struct proc_dir_entry *dir; +static struct proc_dir_entry *dir = 0; struct class * v3_class = NULL; static struct cdev ctrl_dev; @@ -74,7 +74,7 @@ static long v3_dev_ioctl(struct file * filp, case V3_CREATE_GUEST:{ int vm_minor = 0; struct v3_guest_img user_image; - struct v3_guest * guest = kmalloc(sizeof(struct v3_guest), GFP_KERNEL); + struct v3_guest * guest = palacios_alloc(sizeof(struct v3_guest)); if (IS_ERR(guest)) { ERROR("Palacios: Error allocating Kernel guest_image\n"); @@ -89,6 +89,7 @@ static long v3_dev_ioctl(struct file * filp, if (vm_minor == -1) { ERROR("Palacios Error: Too many VMs are currently running\n"); + palacios_free(guest); return -EFAULT; } @@ -96,6 +97,7 @@ static long v3_dev_ioctl(struct file * filp, if (copy_from_user(&user_image, argp, sizeof(struct v3_guest_img))) { ERROR("Palacios Error: copy from user error getting guest image...\n"); + palacios_free(guest); return -EFAULT; } @@ -106,11 +108,13 @@ static long v3_dev_ioctl(struct file * filp, if (IS_ERR(guest->img)) { ERROR("Palacios Error: Could not allocate space for guest image\n"); + palacios_free(guest); return -EFAULT; } if (copy_from_user(guest->img, user_image.guest_data, guest->img_size)) { ERROR("Palacios: Error loading guest data\n"); + palacios_free(guest); return -EFAULT; } @@ -120,6 +124,8 @@ static long v3_dev_ioctl(struct file * filp, if (create_palacios_vm(guest) == -1) { ERROR("Palacios: Error creating guest\n"); + vfree(guest->img); + palacios_free(guest); return -EFAULT; } @@ -174,6 +180,11 @@ static struct file_operations v3_ctrl_fops = { +struct proc_dir_entry *palacios_get_procdir(void) +{ + return dir; +} + static int read_guests(char * buf, char ** start, off_t off, int count, int * eof, void * data) {