do_alloc_pidmap must not return 0 if it failed to find a pid.
Without this patch, doing eclone and choosing a pid which is in
use results in a massive chain of oopses.

(This applies on top of the v13 eclone patchset)

Signed-off-by: Serge E. Hallyn <[email protected]>
---
 kernel/pid.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/kernel/pid.c b/kernel/pid.c
index 3ee52cd..8ad7b04 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -164,6 +164,7 @@ static int do_alloc_pidmap(struct pid_namespace *pid_ns, 
int last, int min,
                rc = alloc_pidmap_page(map);
                if (rc)
                        break;
+               rc = -EAGAIN;
 
                if (likely(atomic_read(&map->nr_free))) {
                        do {
@@ -189,10 +190,8 @@ static int do_alloc_pidmap(struct pid_namespace *pid_ns, 
int last, int min,
                } else {
                        map = &pid_ns->pidmap[0];
                        offset = min;
-                       if (unlikely(last == offset)) {
-                               rc = -EAGAIN;
+                       if (unlikely(last == offset))
                                break;
-                       }
                }
                pid = mk_pid(pid_ns, map, offset);
        }
-- 
1.6.1

_______________________________________________
Containers mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
[email protected]
https://openvz.org/mailman/listinfo/devel

Reply via email to