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=7fcc6521e1e84045b6cfc20ef6282cdda15d89d2;hpb=791ea2f3e21cfbc9c47341efbb98995c33d86fcb;p=palacios.git diff --git a/linux_module/iface-env-inject.c b/linux_module/iface-env-inject.c index 7fcc652..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]); } } } @@ -59,8 +58,8 @@ static int vm_env_inject (struct v3_guest * guest, unsigned int cmd, unsigned lo return -EFAULT; } - env = kmalloc(sizeof(struct env_data), GFP_KERNEL); - if (IS_ERR(env)) { + env = palacios_alloc(sizeof(struct env_data)); + if (!env) { ERROR("Palacios Error: could not allocate space for environment data\n"); return -EFAULT; } @@ -69,12 +68,13 @@ 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); + 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 = kmalloc(env->num_strings*sizeof(char*), GFP_KERNEL); - if (IS_ERR(env->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; } @@ -87,8 +87,8 @@ static int vm_env_inject (struct v3_guest * guest, unsigned int cmd, unsigned lo } for (i = 0; i < env->num_strings; i++) { - char * tmp = kmalloc(MAX_STRING_LEN, GFP_KERNEL); - if (IS_ERR(tmp)) { + 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; } @@ -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; }