Re: [PATCH 1/1 v2] inotify.7: Bug 77111 - watch descriptor reuse

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

 



On Mon, Jun 23, 2014 at 11:45 AM, Heinrich Schuchardt
<xypron.glpk@xxxxxx> wrote:
> Hello Michael,
>
> the further descripton is fine for me. Please, integrate it into the inotify(7) page.

Thanks, Heinrich. Done.

Cheers,

Michael


> Heinrich Schuchardt
>
> Am 23.06.14 um 10:21 schrieb Michael Kerrisk (man-pages)
>
>> On 06/22/2014 04:45 PM, Heinrich Schuchardt wrote:
>>
>> > The revised patch below uses the wording suggested by Michael Kerrisk.
>>
>> >
>>
>> > ***
>>
>> >
>>
>> > Watch descriptor IDs are returned by inotify_add_watch.
>>
>> > When calling inotify_rm_watch an IN_IGNORE is placed on the inotify queue
>>
>> > pointing to the ID of the removed watch.
>>
>> >
>>
>> > inotify_add_watch should not return a watch descriptor ID for which events are
>>
>> > still on the queue but should return an unused ID.
>>
>> >
>>
>> > Unfortunately the existing Kernel code does not provide such a guarantee.
>>
>> >
>>
>> > Actually in rare cases watch descriptor IDs are returned by inotify_add_watch
>>
>> > for which events are still on the inotify queue.
>>
>> >
>>
>> > cf. https://bugzilla.kernel.org/show_bug.cgi?id=77111
>>
>> >
>>
>> > Signed-off-by: Heinrich Schuchardt <xypron.glpk@xxxxxx>
>>
>> > ---
>>
>> >  man7/inotify.7 | 18 ++++++++++++++++++
>>
>> >  1 file changed, 18 insertions(+)
>>
>> >
>>
>> > diff --git a/man7/inotify.7 b/man7/inotify.7
>>
>> > index 1fc83f8..d64523f 100644
>>
>> > --- a/man7/inotify.7
>>
>> > +++ b/man7/inotify.7
>>
>> > @@ -754,6 +754,24 @@ if the older had not yet been read)
>>
>> >  instead checked if the most recent event could be coalesced with the
>>
>> >  .I oldest
>>
>> >  unread event.
>>
>> > +
>>
>> > +As of Linux 3.15.1, the following bug exists:
>>
>> > +.\" FIXME https://bugzilla.kernel.org/show_bug.cgi?id=77111
>>
>> > +When a watch descriptor is removed by calling
>>
>> > +.BR inotify_rm_watch (2),
>>
>> > +any pending unread events for that watch descriptor remain available to read.
>>
>> > +As watch descriptors are subsequently allocated with
>>
>> > +.BR inotify_add_watch (2),
>>
>> > +the kernel cycles through the range of possible watch descriptors (0 to
>>
>> > +.BR INT_MAX )
>>
>> > +incrementally.
>>
>> > +When allocating a free watch descriptor, no check is made to see whether that
>>
>> > +watch descriptor number has any pending unread events in the inotify queue.
>>
>> > +Thus, it can happen that a watch descriptor is reallocated even
>>
>> > +when pending unread events exist for a previous incarnation of
>>
>> > +that watch descriptor number, with the result that the application
>>
>> > +might then read those events and interpret them as belonging to
>>
>> > +the file associated with the newly recycled watch descriptor.
>>
>> >  .SH EXAMPLE
>>
>> >  The following program demonstrates the usage of the inotify API.
>>
>> >  It marks the directories passed as a command-line arguments
>>
>>
>>
>> Thanks, Heinrich. Applied with some minor tweaks, and pushed to
>>
>> kernel.org Git.
>>
>>
>>
>> I also added this piece:
>>
>>
>>
>> [[
>>
>> In practice, the likelihood of hitting this bug may be extremely low,
>>
>> since it requires that an application cycle through
>>
>> .B INT_MAX
>>
>> watch descriptors,
>>
>> release a watch descriptor while leaving unread events for that
>>
>> watch descriptor in the queue in the queue,
>>
>> and then recycle that watch descriptor.
>>
>> For this reason, and because there have been no reports
>>
>> of the bug occurring in real-world applications,
>>
>> as of Linux 3.15,
>>
>> .\" FIXME https://bugzilla.kernel.org/show_bug.cgi?id=77111
>>
>> no kernel changes have yet been made to eliminate this possible bug.
>>
>> ]]
>>
>>
>>
>> Okay?
>>
>>
>>
>> Cheers,
>>
>>
>>
>> Michael
>>
>>
>>
>>
>>
>> --
>>
>> Michael Kerrisk
>>
>> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
>>
>> Linux/UNIX System Programming Training: http://man7.org/training/



-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux