Register PPD and release_handler at the same time.
Fix that process will remain even if signal is received between PPD registration and release_handler registration. Refs: #1201 Fujitsu: POSTK_DEBUG_TEMP_FIX_64 Change-Id: I571781963578df8cedb327f19298f595cfb137a3
This commit is contained in:
@ -389,21 +389,15 @@ static void release_handler(ihk_os_t os, void *param)
|
||||
__FUNCTION__, info);
|
||||
}
|
||||
|
||||
static long mcexec_newprocess(ihk_os_t os,
|
||||
struct newprocess_desc *__user udesc,
|
||||
struct file *file)
|
||||
static long mcexec_newprocess(ihk_os_t os, struct file *file)
|
||||
{
|
||||
struct newprocess_desc desc;
|
||||
struct mcos_handler_info *info;
|
||||
|
||||
if (copy_from_user(&desc, udesc, sizeof(struct newprocess_desc))) {
|
||||
return -EFAULT;
|
||||
}
|
||||
info = new_mcos_handler_info(os, file);
|
||||
if (info == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
info->pid = desc.pid;
|
||||
info->pid = task_tgid_vnr(current);
|
||||
ihk_os_register_release_handler(file, release_handler, info);
|
||||
ihk_os_set_mcos_private_data(file, info);
|
||||
return 0;
|
||||
@ -1720,12 +1714,14 @@ mcexec_getcredv(int __user *virt)
|
||||
}
|
||||
|
||||
int mcexec_create_per_process_data(ihk_os_t os,
|
||||
struct rpgtable_desc * __user rpt)
|
||||
struct rpgtable_desc * __user rpt,
|
||||
struct file *file)
|
||||
{
|
||||
struct mcctrl_usrdata *usrdata = ihk_host_os_get_usrdata(os);
|
||||
struct mcctrl_per_proc_data *ppd = NULL;
|
||||
int i;
|
||||
struct rpgtable_desc krpt;
|
||||
long ret;
|
||||
|
||||
if (rpt &&
|
||||
copy_from_user(&krpt, rpt, sizeof(krpt))) {
|
||||
@ -1745,6 +1741,10 @@ int mcexec_create_per_process_data(ihk_os_t os,
|
||||
printk("%s: ERROR: allocating per-process data\n", __FUNCTION__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
if ((ret = mcexec_newprocess(os, file))) {
|
||||
kfree(ppd);
|
||||
return ret;
|
||||
}
|
||||
memset(ppd, 0, sizeof(struct mcctrl_per_proc_data)); /* debug */
|
||||
|
||||
ppd->ud = usrdata;
|
||||
@ -3159,7 +3159,7 @@ long __mcctrl_control(ihk_os_t os, unsigned int req, unsigned long arg,
|
||||
|
||||
case MCEXEC_UP_CREATE_PPD:
|
||||
return mcexec_create_per_process_data(os,
|
||||
(struct rpgtable_desc * __user)arg);
|
||||
(struct rpgtable_desc * __user)arg, file);
|
||||
|
||||
case MCEXEC_UP_GET_NODES:
|
||||
return mcexec_get_nodes(os);
|
||||
@ -3171,10 +3171,6 @@ long __mcctrl_control(ihk_os_t os, unsigned int req, unsigned long arg,
|
||||
return mcexec_strncpy_from_user(os,
|
||||
(struct strncpy_from_user_desc *)arg);
|
||||
|
||||
case MCEXEC_UP_NEW_PROCESS:
|
||||
return mcexec_newprocess(os, (struct newprocess_desc *)arg,
|
||||
file);
|
||||
|
||||
case MCEXEC_UP_OPEN_EXEC:
|
||||
return mcexec_open_exec(os, (char *)arg);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user