Messages in this thread | | | Date | Thu, 2 May 2019 17:24:52 -0400 | From | Rafael Aquini <> | Subject | Re: [PATCH v2 1/2] kernel/sys: add PR_GET_TASK_SIZE option to prctl(2) |
| |
On Thu, May 02, 2019 at 04:52:21PM -0400, Joel Savitz wrote: > When PR_GET_TASK_SIZE is passed to prctl, the kernel will attempt to > copy the value of TASK_SIZE to the userspace address in arg2. > > Suggested-by: Alexey Dobriyan <adobriyan@gmail.com> > Signed-off-by: Joel Savitz <jsavitz@redhat.com> > --- > include/uapi/linux/prctl.h | 3 +++ > kernel/sys.c | 10 ++++++++++ > 2 files changed, 13 insertions(+) > > diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h > index 094bb03b9cc2..2335fe0a8db8 100644 > --- a/include/uapi/linux/prctl.h > +++ b/include/uapi/linux/prctl.h > @@ -229,4 +229,7 @@ struct prctl_mm_map { > # define PR_PAC_APDBKEY (1UL << 3) > # define PR_PAC_APGAKEY (1UL << 4) > > +/* Get the process virtual memory size */ > +#define PR_GET_TASK_SIZE 55 > + > #endif /* _LINUX_PRCTL_H */ > diff --git a/kernel/sys.c b/kernel/sys.c > index 12df0e5434b8..7ced7dbd035d 100644 > --- a/kernel/sys.c > +++ b/kernel/sys.c > @@ -2252,6 +2252,13 @@ static int propagate_has_child_subreaper(struct task_struct *p, void *data) > return 1; > } > > +static int prctl_get_tasksize(void __user * uaddr) > +{ > + unsigned long task_size = TASK_SIZE; > + return copy_to_user(uaddr, &task_size, sizeof(unsigned long)) > + ? -EFAULT : 0;
Minor pick: I would keep the all of the ternary statement above in the same line, to help on improving readability (even though it bursts a little longer than 80 columns of text)
> +} > + > int __weak arch_prctl_spec_ctrl_get(struct task_struct *t, unsigned long which) > { > return -EINVAL; > @@ -2486,6 +2493,9 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, > return -EINVAL; > error = PAC_RESET_KEYS(me, arg2); > break; > + case PR_GET_TASK_SIZE: > + error = prctl_get_tasksize((void *)arg2) ; > + break; > default: > error = -EINVAL; > break; > -- > 2.18.1 >
| |