From: Vlastimil Babka <vbabka-AlSwsSmVLrQ@public.gmane.org>
To: Yisheng Xie <xieyisheng1-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>,
akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org,
mhocko-IBi9RG/b67k@public.gmane.org,
mingo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
n-horiguchi-PaJj6Psr51x8UrSeD/g0lQ@public.gmane.org,
salls-b3bnyZ7c9ISVc3sceRu5cw@public.gmane.org
Cc: linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
tanxiaojun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Andi Kleen <ak-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Christoph Lameter <cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org>
Subject: Re: [PATCH RFC v2 4/4] mm/mempolicy: add nodes_empty check in SYSC_migrate_pages
Date: Mon, 6 Nov 2017 08:39:06 +0100 [thread overview]
Message-ID: <d774ecf6-5e7b-e185-85a0-27bf2bcacfb4@suse.cz> (raw)
In-Reply-To: <bc57f574-92f2-0b69-4717-a1ec7170387c-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
On 11/06/2017 02:31 AM, Yisheng Xie wrote:
> Hi Vlastimil,
>
> On 2017/10/31 17:46, Vlastimil Babka wrote:
>> +CC Andi and Christoph
>>
>> On 10/27/2017 12:14 PM, Yisheng Xie wrote:
>>> As manpage of migrate_pages, the errno should be set to EINVAL when none
>>> of the specified nodes contain memory. However, when new_nodes is null,
>>> i.e. the specified nodes also do not have memory, as the following case:
>>>
>>> new_nodes = 0;
>>> old_nodes = 0xf;
>>> ret = migrate_pages(pid, old_nodes, new_nodes, MAX);
>>>
>>> The ret will be 0 and no errno is set.
>>>
>>> This patch is to add nodes_empty check to fix above case.
>>
>> Hmm, I think we have a bigger problem than "empty set is a subset of
>> anything" here.
>>
>> The existing checks are:
>>
>> task_nodes = cpuset_mems_allowed(task);
>> if (!nodes_subset(*new, task_nodes) && !capable(CAP_SYS_NICE)) {
>> err = -EPERM;
>> goto out_put;
>> }
>>
>> if (!nodes_subset(*new, node_states[N_MEMORY])) {
>> err = -EINVAL;
>> goto out_put;
>> }
>>
>>
>> And manpage says:
>>
>> EINVAL The value specified by maxnode exceeds a kernel-imposed
>> limit. Or, old_nodes or new_nodes specifies one or more node IDs that
>> are greater than the maximum supported node
>> ID. *Or, none of the node IDs specified by new_nodes are
>> on-line and allowed by the process's current cpuset context, or none of
>> the specified nodes contain memory.*
>>
>> EPERM Insufficient privilege (CAP_SYS_NICE) to move pages of the
>> process specified by pid, or insufficient privilege (CAP_SYS_NICE) to
>> access the specified target nodes.
>>
>> - it says "none ... are allowed", but checking for subset means we check
>> if "all ... are allowed". Shouldn't we be checking for a non-empty
>> intersection?
>
> You are absolutely right. To follow the manpage, we should check non-empty
> of intersection instead of subset. I mean:
> nodes_and(*new, *new, task_nodes);
> if (!node_empty(*new) && !capable(CAP_SYS_NICE)) {
> err = -EPERM;
> goto out_put;
> }
>
> nodes_and(*new, *new, node_states[N_MEMORY]);
> if (!node_empty(*new)) {
> err = -EINVAL;
> goto out_put;
> }
Maybe not exactly like this, see below.
> So finally, we should only migrate the smallest intersection of all the node
> set, right?
That's right.
So if new_nodes AND task_nodes AND node_states[N_MEMORY] is empty, then
EINVAL.
I'm not sure what exactly is the EPERM intention. Should really the
capability of THIS process override the cpuset restriction of the TARGET
process? Maybe yes. Then, does "insufficient privilege (CAP_SYS_NICE) to
access the specified target nodes." mean that at least some nodes must
be allowed, or all of them? Maybe the subset check is after all OK for
the EPERM check, but still wrong for the EINVAL check.
>> - there doesn't seem to be any EINVAL check for "process's current
>> cpuset context", there's just an EPERM check for "target process's
>> cpuset context".
>
> This also need to be checked as manpage.
>
> Thanks
> Yisheng Xie
>
next prev parent reply other threads:[~2017-11-06 7:39 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-27 10:14 [PATCH RFC v2 0/4] some fixes and clean up for mempolicy Yisheng Xie
[not found] ` <1509099265-30868-1-git-send-email-xieyisheng1-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2017-10-27 10:14 ` [PATCH RFC v2 1/4] mm/mempolicy: Fix get_nodes() mask miscalculation Yisheng Xie
2017-10-31 8:34 ` Vlastimil Babka
[not found] ` <922a4767-9eed-40aa-c437-6f6fcdcab150-AlSwsSmVLrQ@public.gmane.org>
2017-11-01 9:37 ` Yisheng Xie
2017-10-27 10:14 ` [PATCH RFC v2 2/4] mm/mempolicy: remove redundant check in get_nodes Yisheng Xie
2017-10-31 8:55 ` Vlastimil Babka
2017-10-27 10:14 ` [PATCH RFC v2 3/4] mm/mempolicy: fix the check of nodemask from user Yisheng Xie
2017-10-31 9:30 ` Vlastimil Babka
2017-10-31 11:01 ` Yisheng Xie
[not found] ` <65c0e6cb-28b4-f202-1d7f-278b5dfc3440-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2017-10-31 11:28 ` Vlastimil Babka
2017-10-27 10:14 ` [PATCH RFC v2 4/4] mm/mempolicy: add nodes_empty check in SYSC_migrate_pages Yisheng Xie
[not found] ` <1509099265-30868-5-git-send-email-xieyisheng1-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2017-10-31 9:46 ` Vlastimil Babka
[not found] ` <dccbeccc-4155-94a8-0e67-b7c28238896d-AlSwsSmVLrQ@public.gmane.org>
2017-11-06 1:31 ` Yisheng Xie
[not found] ` <bc57f574-92f2-0b69-4717-a1ec7170387c-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2017-11-06 7:39 ` Vlastimil Babka [this message]
[not found] ` <d774ecf6-5e7b-e185-85a0-27bf2bcacfb4-AlSwsSmVLrQ@public.gmane.org>
2017-11-06 15:29 ` Christopher Lameter
2017-11-07 11:23 ` Yisheng Xie
[not found] ` <a4f1212f-3903-abbc-772a-1ddee6f7f98b-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2017-11-07 14:54 ` Christopher Lameter
2017-11-07 15:05 ` Vlastimil Babka
2017-11-07 15:55 ` Christopher Lameter
2017-11-08 1:38 ` Yisheng Xie
[not found] ` <4b08f1e9-5449-6ea2-e7da-65fe5f678683-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2017-11-08 15:02 ` Christopher Lameter
2017-11-09 10:54 ` Yisheng Xie
[not found] ` <9991dd10-8883-7c82-bb4e-8145ea2b7299-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2017-11-09 15:46 ` Christopher Lameter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d774ecf6-5e7b-e185-85a0-27bf2bcacfb4@suse.cz \
--to=vbabka-alswssmvlrq@public.gmane.org \
--cc=ak-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=cl-vYTEC60ixJUAvxtiuMwx3w@public.gmane.org \
--cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
--cc=mhocko-IBi9RG/b67k@public.gmane.org \
--cc=mingo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=n-horiguchi-PaJj6Psr51x8UrSeD/g0lQ@public.gmane.org \
--cc=rientjes-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=salls-b3bnyZ7c9ISVc3sceRu5cw@public.gmane.org \
--cc=tanxiaojun-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=xieyisheng1-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).