Re: + fs-epoll-add-procfs-fdinfo-helper.patch added to -mm tree

From: Oleg Nesterov
Date: Tue Nov 13 2012 - 10:26:00 EST


> struct signalfd_ctx {
> + seqcount_t cnt;
> sigset_t sigmask;
> };
> ...
> @@ -278,7 +302,9 @@ SYSCALL_DEFINE4(signalfd4, int, ufd, sig
> return -EINVAL;
> }
> spin_lock_irq(&current->sighand->siglock);
> + write_seqcount_begin(&ctx->cnt);
> ctx->sigmask = sigmask;
> + write_seqcount_end(&ctx->cnt);
> spin_unlock_irq(&current->sighand->siglock);

This doesn't look right.

The problem is, the current locking is broken, ->siglock can not serialize
->sigmask changes. Just suppose the the child inherits sigfd from parent
and they both do sys_signalfd4() at the same time.

Nothing really bad can happen, that is why nobody bothers to fix this.
But this patch makes the thing worse, write_seqcount_begin() must be
serialized correctly.

Oleg.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/