Re: [RFC][PATCH 0/7 + tools] Checkpoint/restore mostly in the userspace

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

On Tue, Jul 26, 2011 at 11:11:28AM -0700, Matt Helsley wrote:
> No, you can't use the fd from the epoll item to look it up in the
> task's fd table. It may look trivially correct but it is not and that's
> why I mentioned it.
> 
> This is an example of where the information we already have in /proc
> looks like it should be re-used but should not.
> 
> EPOLL_CTL_ADD uses the fd to add it to the epoll items as an (fd,file)
> pair. Then another thread could change the fd table to close that fd.
> close does not update all the epoll sets the fd is a part of. So in order
> to remove the epoll item userspace must use the same "fd" it used during
> EPOLL_CTL_ADD -- even though that fd no longer refers to anything.
> That's why you can't just use the epoll item's fd to do a lookup in the
> fd table -- you'll get the wrong struct *file. Unfortunately, most of the
> time it will probably appear to work. You need a proper testcase to
> demonstrate it.
> 
> At least that's what I recall of the code.

Ummm... I'm a bit confused, are you saying that EPOLL_CTL_DEL may take
fd which is already closed?  I can't see how that would be possible.
epoll uses fget() for fd -> file mapping like everyone else.  If fd is
closed, the mapping doesn't exist.

I think what's confusing here is that, if multiple fd points to the
same file, epoll 'may' report events on an already closed or resued fd
because whole thing is anchored on struct file which doesn't go away
until the last fd is closed, but I don't think that's something we
need to worry about.  It's dangling events on dead fds which is
explicitly described as 'may' happen in the documentation.

Thanks.

-- 
tejun
_______________________________________________
Containers mailing list
Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/containers


[Index of Archives]     [Cgroups]     [Netdev]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux