*/
#include <linux/uaccess.h>
-#include <linux/vmalloc.h>
#include <gears/env_inject.h>
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]);
}
}
}
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;
}
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;
}
}
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;
}
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;
}