X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fiface-env-inject.c;h=af60915b86d30e11915c104d170111ba4215143a;hb=d22c11cec4e8c3390bfe6bf16ed07f5d073f0d4a;hp=1719abbff58122c53ae64fffda04f04abe1e2489;hpb=5aa80b40b7bd2ab3e2de1f9cb6851cdec6963f79;p=palacios.git diff --git a/linux_module/iface-env-inject.c b/linux_module/iface-env-inject.c index 1719abb..af60915 100644 --- a/linux_module/iface-env-inject.c +++ b/linux_module/iface-env-inject.c @@ -6,7 +6,6 @@ */ #include -#include #include @@ -37,11 +36,11 @@ static void free_inject_data (void) { for(i = 0; i < MAX_ENV_INJECT; i++) { if (env_map[i]) { - for (j = 0; j < env_map[i]->num_strings; j++) - kfree(env_map[i]->strings[j]); - - kfree(env_map[i]->strings); - kfree(env_map[i]); + for (j = 0; j < env_map[i]->num_strings; j++) { + palacios_free(env_map[i]->strings[j]); + } + palacios_free(env_map[i]->strings); + palacios_free(env_map[i]); } } } @@ -53,15 +52,15 @@ static int vm_env_inject (struct v3_guest * guest, unsigned int cmd, unsigned lo struct env_data * env; int i; - printk("Palacios: Loading environment data...\n"); + INFO("Palacios: Loading environment data...\n"); if (copy_from_user(&env_arg, (void __user *)arg, sizeof(struct env_data))) { - printk("palacios: error copying environment data from userspace\n"); + ERROR("palacios: error copying environment data from userspace\n"); return -EFAULT; } - env = kmalloc(sizeof(struct env_data), GFP_KERNEL); - if (IS_ERR(env)) { - printk("Palacios Error: could not allocate space for environment data\n"); + env = palacios_alloc(sizeof(struct env_data)); + if (!env) { + ERROR("Palacios Error: could not allocate space for environment data\n"); return -EFAULT; } @@ -69,48 +68,49 @@ static int vm_env_inject (struct v3_guest * guest, unsigned int cmd, unsigned lo env->num_strings = env_arg.num_strings; - strcpy(env->bin_name, env_arg.bin_name); - printk("Binary hooked on: %s\n", env->bin_name); - - //printk("Palacios: Allocating space for %u env var string ptrs...\n", env->num_strings); - env->strings = kmalloc(env->num_strings*sizeof(char*), GFP_KERNEL); - if (IS_ERR(env->strings)) { - printk("Palacios Error: could not allocate space for env var strings\n"); + strncpy(env->bin_name, env_arg.bin_name, MAX_STRING_LEN); + env->bin_name[MAX_STRING_LEN-1] = 0; + DEBUG("Binary hooked on: %s\n", env->bin_name); + + //DEBUG("Palacios: Allocating space for %u env var string ptrs...\n", env->num_strings); + env->strings = palacios_alloc(env->num_strings*sizeof(char*)); + if (!(env->strings)) { + ERROR("Palacios Error: could not allocate space for env var strings\n"); return -EFAULT; } memset(env->strings, 0, env->num_strings*sizeof(char*)); - //printk("Palacios: copying env var string pointers\n"); + //INFO("Palacios: copying env var string pointers\n"); if (copy_from_user(env->strings, (void __user *)env_arg.strings, env->num_strings*sizeof(char*))) { - printk("Palacios: Error copying string pointers\n"); + ERROR("Palacios: Error copying string pointers\n"); return -EFAULT; } for (i = 0; i < env->num_strings; i++) { - char * tmp = kmalloc(MAX_STRING_LEN, GFP_KERNEL); - if (IS_ERR(tmp)) { - printk("Palacios Error: could not allocate space for env var string #%d\n", i); + char * tmp = palacios_alloc(MAX_STRING_LEN); + if (!(tmp)) { + ERROR("Palacios Error: could not allocate space for env var string #%d\n", i); return -EFAULT; } if (copy_from_user(tmp, (void __user *)env->strings[i], MAX_STRING_LEN)) { - printk("Palacios: Error copying string #%d\n", i); + ERROR("Palacios: Error copying string #%d\n", i); return -EFAULT; } env->strings[i] = tmp; } - printk("Palacios: registering environment data...\n"); + INFO("Palacios: registering environment data...\n"); if (register_env(env) < 0) return -1; - printk("Palacios: passing data off to palacios...\n"); + DEBUG("Palacios: passing data off to palacios...\n"); if (v3_insert_env_inject(guest->v3_ctx, env->strings, env->num_strings, env->bin_name) < 0) { - printk("Palacios: Error passing off environment data\n"); + ERROR("Palacios: Error passing off environment data\n"); return -1; } - printk("Palacios: environment injection registration complete\n"); + INFO("Palacios: environment injection registration complete\n"); return 0; } @@ -133,6 +133,7 @@ static int guest_init_env_inject (struct v3_guest * guest, void ** vm_data) { static int guest_deinit_env_inject (struct v3_guest * guest, void * vm_data) { free_inject_data(); + remove_guest_ctrl(guest, V3_VM_ENV_INJECT); return 0; }