Messages in this thread | | | Date | Sat, 18 Mar 2006 20:24:51 +0300 | From | Oleg Nesterov <> | Subject | Re: [PATCH] unshare: Use rcu_assign_pointer when setting sighand |
| |
Janak Desai wrote: > > Oleg Nesterov wrote: > > > >Btw, copy_process() forbids CLONE_SIGHAND without CLONE_VM (is there a > >good reason for that?), but one can do unshare(CLONE_VM). This is odd. > > > > > Yes, copy_process forbids cloning of signal handlers without cloning of vm. > However, it does allow cloning of vm without cloning of signal handlers. For > those processes, that are sharing vm but not signal handlers, unsharing > of vm > is allowed.
Yes, I was wrong, I missed check_unshare_flags(),
/* * If unsharing vm, must also unshare signal handlers. */ if (*flags_ptr & CLONE_VM) *flags_ptr |= CLONE_SIGHAND;
Looking below,
/* * If unsharing signal handlers and the task was created * using CLONE_THREAD, then must unshare the thread */ if ((*flags_ptr & CLONE_SIGHAND) && (atomic_read(¤t->signal->count) > 1)) *flags_ptr |= CLONE_THREAD;
Shouldn't this be:
*flags_ptr |= (CLONE_THREAD | CLONE_VM)
? Currently it doesn't matter, but still.
However, I stronly beleive unshare(CLONE_VM) is buggy.
sys_unshare:
if (new_mm) { ... new_mm = mm; }
...
bad_unshare_cleanup_vm: if (new_mm) mmput(new_mm);
mmput() ignores mm->core_waiters.
No?
Oleg. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |