提交 0e173b24 编写于 作者: H Harmandeep Kaur 提交者: Riku Voipio

linux-user/syscall.c: malloc()/calloc() to g_malloc()/g_try_malloc()/g_new0()

Convert malloc()/ calloc() calls to g_malloc()/ g_try_malloc()/ g_new0()

All heap memory allocation should go through glib so that we can take
advantage of a single memory allocator and its debugging/tracing features.
Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: NHarmandeep Kaur <write.harmandeep@gmail.com>
Signed-off-by: NRiku Voipio <riku.voipio@linaro.org>
上级 3e24bb3f
...@@ -1608,7 +1608,7 @@ set_timeout: ...@@ -1608,7 +1608,7 @@ set_timeout:
} }
fprog.len = tswap16(tfprog->len); fprog.len = tswap16(tfprog->len);
filter = malloc(fprog.len * sizeof(*filter)); filter = g_try_new(struct sock_filter, fprog.len);
if (filter == NULL) { if (filter == NULL) {
unlock_user_struct(tfilter, tfprog->filter, 1); unlock_user_struct(tfilter, tfprog->filter, 1);
unlock_user_struct(tfprog, optval_addr, 1); unlock_user_struct(tfprog, optval_addr, 1);
...@@ -1624,7 +1624,7 @@ set_timeout: ...@@ -1624,7 +1624,7 @@ set_timeout:
ret = get_errno(setsockopt(sockfd, SOL_SOCKET, ret = get_errno(setsockopt(sockfd, SOL_SOCKET,
SO_ATTACH_FILTER, &fprog, sizeof(fprog))); SO_ATTACH_FILTER, &fprog, sizeof(fprog)));
free(filter); g_free(filter);
unlock_user_struct(tfilter, tfprog->filter, 1); unlock_user_struct(tfilter, tfprog->filter, 1);
unlock_user_struct(tfprog, optval_addr, 1); unlock_user_struct(tfprog, optval_addr, 1);
...@@ -1935,7 +1935,7 @@ static struct iovec *lock_iovec(int type, abi_ulong target_addr, ...@@ -1935,7 +1935,7 @@ static struct iovec *lock_iovec(int type, abi_ulong target_addr,
return NULL; return NULL;
} }
vec = calloc(count, sizeof(struct iovec)); vec = g_try_new0(struct iovec, count);
if (vec == NULL) { if (vec == NULL) {
errno = ENOMEM; errno = ENOMEM;
return NULL; return NULL;
...@@ -1999,7 +1999,7 @@ static struct iovec *lock_iovec(int type, abi_ulong target_addr, ...@@ -1999,7 +1999,7 @@ static struct iovec *lock_iovec(int type, abi_ulong target_addr,
} }
unlock_user(target_vec, target_addr, 0); unlock_user(target_vec, target_addr, 0);
fail2: fail2:
free(vec); g_free(vec);
errno = err; errno = err;
return NULL; return NULL;
} }
...@@ -2024,7 +2024,7 @@ static void unlock_iovec(struct iovec *vec, abi_ulong target_addr, ...@@ -2024,7 +2024,7 @@ static void unlock_iovec(struct iovec *vec, abi_ulong target_addr,
unlock_user(target_vec, target_addr, 0); unlock_user(target_vec, target_addr, 0);
} }
free(vec); g_free(vec);
} }
static inline int target_to_host_sock_type(int *type) static inline int target_to_host_sock_type(int *type)
...@@ -2726,14 +2726,14 @@ static inline abi_long target_to_host_semarray(int semid, unsigned short **host_ ...@@ -2726,14 +2726,14 @@ static inline abi_long target_to_host_semarray(int semid, unsigned short **host_
nsems = semid_ds.sem_nsems; nsems = semid_ds.sem_nsems;
*host_array = malloc(nsems*sizeof(unsigned short)); *host_array = g_try_new(unsigned short, nsems);
if (!*host_array) { if (!*host_array) {
return -TARGET_ENOMEM; return -TARGET_ENOMEM;
} }
array = lock_user(VERIFY_READ, target_addr, array = lock_user(VERIFY_READ, target_addr,
nsems*sizeof(unsigned short), 1); nsems*sizeof(unsigned short), 1);
if (!array) { if (!array) {
free(*host_array); g_free(*host_array);
return -TARGET_EFAULT; return -TARGET_EFAULT;
} }
...@@ -2770,7 +2770,7 @@ static inline abi_long host_to_target_semarray(int semid, abi_ulong target_addr, ...@@ -2770,7 +2770,7 @@ static inline abi_long host_to_target_semarray(int semid, abi_ulong target_addr,
for(i=0; i<nsems; i++) { for(i=0; i<nsems; i++) {
__put_user((*host_array)[i], &array[i]); __put_user((*host_array)[i], &array[i]);
} }
free(*host_array); g_free(*host_array);
unlock_user(array, target_addr, 1); unlock_user(array, target_addr, 1);
return 0; return 0;
...@@ -3030,7 +3030,7 @@ static inline abi_long do_msgsnd(int msqid, abi_long msgp, ...@@ -3030,7 +3030,7 @@ static inline abi_long do_msgsnd(int msqid, abi_long msgp,
if (!lock_user_struct(VERIFY_READ, target_mb, msgp, 0)) if (!lock_user_struct(VERIFY_READ, target_mb, msgp, 0))
return -TARGET_EFAULT; return -TARGET_EFAULT;
host_mb = malloc(msgsz+sizeof(long)); host_mb = g_try_malloc(msgsz + sizeof(long));
if (!host_mb) { if (!host_mb) {
unlock_user_struct(target_mb, msgp, 0); unlock_user_struct(target_mb, msgp, 0);
return -TARGET_ENOMEM; return -TARGET_ENOMEM;
...@@ -3038,7 +3038,7 @@ static inline abi_long do_msgsnd(int msqid, abi_long msgp, ...@@ -3038,7 +3038,7 @@ static inline abi_long do_msgsnd(int msqid, abi_long msgp,
host_mb->mtype = (abi_long) tswapal(target_mb->mtype); host_mb->mtype = (abi_long) tswapal(target_mb->mtype);
memcpy(host_mb->mtext, target_mb->mtext, msgsz); memcpy(host_mb->mtext, target_mb->mtext, msgsz);
ret = get_errno(msgsnd(msqid, host_mb, msgsz, msgflg)); ret = get_errno(msgsnd(msqid, host_mb, msgsz, msgflg));
free(host_mb); g_free(host_mb);
unlock_user_struct(target_mb, msgp, 0); unlock_user_struct(target_mb, msgp, 0);
return ret; return ret;
...@@ -3465,7 +3465,7 @@ static abi_long do_ioctl_fs_ioc_fiemap(const IOCTLEntry *ie, uint8_t *buf_temp, ...@@ -3465,7 +3465,7 @@ static abi_long do_ioctl_fs_ioc_fiemap(const IOCTLEntry *ie, uint8_t *buf_temp,
/* We can't fit all the extents into the fixed size buffer. /* We can't fit all the extents into the fixed size buffer.
* Allocate one that is large enough and use it instead. * Allocate one that is large enough and use it instead.
*/ */
fm = malloc(outbufsz); fm = g_try_malloc(outbufsz);
if (!fm) { if (!fm) {
return -TARGET_ENOMEM; return -TARGET_ENOMEM;
} }
...@@ -3500,7 +3500,7 @@ static abi_long do_ioctl_fs_ioc_fiemap(const IOCTLEntry *ie, uint8_t *buf_temp, ...@@ -3500,7 +3500,7 @@ static abi_long do_ioctl_fs_ioc_fiemap(const IOCTLEntry *ie, uint8_t *buf_temp,
} }
} }
if (free_fm) { if (free_fm) {
free(fm); g_free(fm);
} }
return ret; return ret;
} }
...@@ -7876,8 +7876,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, ...@@ -7876,8 +7876,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
struct linux_dirent *dirp; struct linux_dirent *dirp;
abi_long count = arg3; abi_long count = arg3;
dirp = malloc(count); dirp = g_try_malloc(count);
if (!dirp) { if (!dirp) {
ret = -TARGET_ENOMEM; ret = -TARGET_ENOMEM;
goto fail; goto fail;
} }
...@@ -7913,7 +7913,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, ...@@ -7913,7 +7913,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
ret = count1; ret = count1;
unlock_user(target_dirp, arg2, ret); unlock_user(target_dirp, arg2, ret);
} }
free(dirp); g_free(dirp);
} }
#else #else
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册