2010-04-23 15:40:19

by Jerome Marchand

[permalink] [raw]
Subject: [PATCH] procfs: fix tid fdinfo

Correct the file_operations struct in fdinfo entry of tid_base_stuff[].

Signed-off-by: Jerome Marchand <[email protected]>
---
base.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/proc/base.c b/fs/proc/base.c
index 7621db8..8418fcc 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -2909,7 +2909,7 @@ out_no_task:
*/
static const struct pid_entry tid_base_stuff[] = {
DIR("fd", S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations),
- DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fd_operations),
+ DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),
REG("environ", S_IRUSR, proc_environ_operations),
INF("auxv", S_IRUSR, proc_pid_auxv),
ONE("status", S_IRUGO, proc_pid_status),


2010-04-23 16:27:48

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: [PATCH] procfs: fix tid fdinfo

On Fri, Apr 23, 2010 at 05:40:07PM +0200, Jerome Marchand wrote:
> - DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fd_operations),
> + DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),

Ick.

this is for stable@ as well

Cc: [email protected]

2010-04-23 18:17:18

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] procfs: fix tid fdinfo

On Fri, 23 Apr 2010 17:40:07 +0200
Jerome Marchand <[email protected]> wrote:

> Correct the file_operations struct in fdinfo entry of tid_base_stuff[].
>
> Signed-off-by: Jerome Marchand <[email protected]>
> ---
> base.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/proc/base.c b/fs/proc/base.c
> index 7621db8..8418fcc 100644
> --- a/fs/proc/base.c
> +++ b/fs/proc/base.c
> @@ -2909,7 +2909,7 @@ out_no_task:
> */
> static const struct pid_entry tid_base_stuff[] = {
> DIR("fd", S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations),
> - DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fd_operations),
> + DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),
> REG("environ", S_IRUSR, proc_environ_operations),
> INF("auxv", S_IRUSR, proc_pid_auxv),
> ONE("status", S_IRUGO, proc_pid_status),

hm, the code's been like that for over a year. What are the
user-visible effects of the bug, and of this change?

2010-04-23 19:26:26

by Alexey Dobriyan

[permalink] [raw]
Subject: Re: [PATCH] procfs: fix tid fdinfo

On Fri, Apr 23, 2010 at 11:16:20AM -0700, Andrew Morton wrote:
> On Fri, 23 Apr 2010 17:40:07 +0200
> > - DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fd_operations),
> > + DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),

> hm, the code's been like that for over a year. What are the
> user-visible effects of the bug, and of this change?

/proc/*/task/*/fdinfo contains symlinks to opened files like /proc/*/fd/
which is cool bug :-)

2010-04-24 08:30:24

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [PATCH] procfs: fix tid fdinfo

On Sat, 2010-04-24 at 22:27 +0300, Alexey Dobriyan wrote:
> On Fri, Apr 23, 2010 at 11:16:20AM -0700, Andrew Morton wrote:
> > On Fri, 23 Apr 2010 17:40:07 +0200
> > > - DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fd_operations),
> > > + DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),
>
> > hm, the code's been like that for over a year. What are the
> > user-visible effects of the bug, and of this change?
>
> /proc/*/task/*/fdinfo contains symlinks to opened files like /proc/*/fd/
> which is cool bug :-)

Yeah, at least now we can see that someone has started using this
interface ;)

Jerome, thanks for spotting this!

Miklos

2010-04-26 07:49:26

by Jerome Marchand

[permalink] [raw]
Subject: Re: [PATCH] procfs: fix tid fdinfo

On 04/23/2010 10:07 PM, Miklos Szeredi wrote:
> On Sat, 2010-04-24 at 22:27 +0300, Alexey Dobriyan wrote:
>> On Fri, Apr 23, 2010 at 11:16:20AM -0700, Andrew Morton wrote:
>>> On Fri, 23 Apr 2010 17:40:07 +0200
>>>> - DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fd_operations),
>>>> + DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),
>>
>>> hm, the code's been like that for over a year. What are the
>>> user-visible effects of the bug, and of this change?
>>
>> /proc/*/task/*/fdinfo contains symlinks to opened files like /proc/*/fd/
>> which is cool bug :-)
>
> Yeah, at least now we can see that someone has started using this
> interface ;)

AFAIK there is still nobody using it, but lsof should use it, and
/proc/<pid>/task/<tid>/fd/ too. I haven't checked the code, but as it is
now, it doesn't spot files open by a thread which does share its father's
file descriptor table.

>
> Jerome, thanks for spotting this!
>
> Miklos
>
>

2010-04-26 10:25:44

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [PATCH] procfs: fix tid fdinfo

On Mon, 2010-04-26 at 09:49 +0200, Jerome Marchand wrote:
> On 04/23/2010 10:07 PM, Miklos Szeredi wrote:
> > On Sat, 2010-04-24 at 22:27 +0300, Alexey Dobriyan wrote:
> >> On Fri, Apr 23, 2010 at 11:16:20AM -0700, Andrew Morton wrote:
> >>> On Fri, 23 Apr 2010 17:40:07 +0200
> >>>> - DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fd_operations),
> >>>> + DIR("fdinfo", S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),
> >>
> >>> hm, the code's been like that for over a year. What are the
> >>> user-visible effects of the bug, and of this change?
> >>
> >> /proc/*/task/*/fdinfo contains symlinks to opened files like /proc/*/fd/
> >> which is cool bug :-)
> >
> > Yeah, at least now we can see that someone has started using this
> > interface ;)
>
> AFAIK there is still nobody using it, but lsof should use it, and
> /proc/<pid>/task/<tid>/fd/ too. I haven't checked the code, but as it is
> now, it doesn't spot files open by a thread which does share its father's
> file descriptor table.

Yes, apparently "lsof" doesn't care about contents of /proc/$PID/task.
Well, tasks with separate file descriptor tables are rare, POSIX threads
share their descriptor tables. But it would be nice if this were fixed.

Thanks,
Miklos