mcexec_create_per_process_data: use copy_from_user

Refs: #1205
Change-Id: Idced73a7f88aada5fc2462b490d56603f8fe2472
This commit is contained in:
Tomoki Shirasawa
2018-09-26 05:34:55 +09:00
committed by Dominique Martinet
parent e803698618
commit daa234d8b9

View File

@ -1755,11 +1755,18 @@ mcexec_getcredv(int __user *virt)
return 0;
}
int mcexec_create_per_process_data(ihk_os_t os, struct rpgtable_desc *rpt)
int mcexec_create_per_process_data(ihk_os_t os,
struct rpgtable_desc * __user rpt)
{
struct mcctrl_usrdata *usrdata = ihk_host_os_get_usrdata(os);
struct mcctrl_per_proc_data *ppd = NULL;
int i;
struct rpgtable_desc krpt;
if (rpt &&
copy_from_user(&krpt, rpt, sizeof(krpt))) {
return -EFAULT;
}
ppd = mcctrl_get_per_proc_data(usrdata, task_tgid_vnr(current));
if (ppd) {
@ -1813,8 +1820,8 @@ int mcexec_create_per_process_data(ihk_os_t os, struct rpgtable_desc *rpt)
__FUNCTION__, ppd->pid, atomic_read(&ppd->refcount));
if (rpt) {
ppd->rpgtable = rpt->rpgtable;
return mcctrl_clear_pte_range(rpt->start, rpt->len);
ppd->rpgtable = krpt.rpgtable;
return mcctrl_clear_pte_range(krpt.start, krpt.len);
}
return 0;
@ -3164,7 +3171,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 *)arg);
(struct rpgtable_desc * __user)arg);
case MCEXEC_UP_GET_NODES:
return mcexec_get_nodes(os);