2014-11-18 13:14:14

by David Drysdale

[permalink] [raw]
Subject: sparc: Clashing values for O_PATH and FMODE_NONOTIFY?

Hi folks,

It looks like the value for O_PATH on sparc:

arch/sparc/include/uapi/asm/fcntl.h:37:#define O_PATH 0x1000000

clashes with the arch-independent value for __FMODE_NONOTIFY:

include/linux/fs.h:137:#define FMODE_NONOTIFY ((__force fmode_t)0x1000000)
include/linux/fs.h:2764:#define __FMODE_NONOTIFY ((__force int)
FMODE_NONOTIFY)

and they are both in the same numbering space, as indicated by the
comment at the top of include/uapi/asm-generic/fcntl.h and the use in
fs/notify/fanotify/fanotify_user.c:715.

Presumably this could theoretically cause problems (no notifications for
O_PATH files on SPARC?), so would it be a good idea to renumber
FMODE_NONOTIFY? (I *think* that value is entirely kernel-internal.)

Given that this has happened before (12ed2e36c98aec6c4155 "fanotify:
FMODE_NONOTIFY and __O_SYNC in sparc conflict") it would probably
also be a good idea to add __FMODE_NOTIFY to the uniqueness check in
fs/fcntl.c:fcntl_init().

Thoughts?

(I can generate a speculative patch if this is wrong and needs fixing, but I
won't be able to do much about testing it.)

David


2014-11-19 20:30:07

by David Miller

[permalink] [raw]
Subject: Re: sparc: Clashing values for O_PATH and FMODE_NONOTIFY?

From: David Drysdale <[email protected]>
Date: Tue, 18 Nov 2014 13:13:51 +0000

> Hi folks,
>
> It looks like the value for O_PATH on sparc:
>
> arch/sparc/include/uapi/asm/fcntl.h:37:#define O_PATH 0x1000000
>
> clashes with the arch-independent value for __FMODE_NONOTIFY:
>
> include/linux/fs.h:137:#define FMODE_NONOTIFY ((__force fmode_t)0x1000000)
> include/linux/fs.h:2764:#define __FMODE_NONOTIFY ((__force int)
> FMODE_NONOTIFY)
>
> and they are both in the same numbering space, as indicated by the
> comment at the top of include/uapi/asm-generic/fcntl.h and the use in
> fs/notify/fanotify/fanotify_user.c:715.
>
> Presumably this could theoretically cause problems (no notifications for
> O_PATH files on SPARC?), so would it be a good idea to renumber
> FMODE_NONOTIFY? (I *think* that value is entirely kernel-internal.)
>
> Given that this has happened before (12ed2e36c98aec6c4155 "fanotify:
> FMODE_NONOTIFY and __O_SYNC in sparc conflict") it would probably
> also be a good idea to add __FMODE_NOTIFY to the uniqueness check in
> fs/fcntl.c:fcntl_init().
>
> Thoughts?

I think you will need to change the internal value, to not clash with
the sparc exported one, for sure.

2014-11-20 12:12:46

by David Drysdale

[permalink] [raw]
Subject: Re: sparc: Clashing values for O_PATH and FMODE_NONOTIFY?

[+linux-fsdevel, without the typo this time]

On Wed, Nov 19, 2014 at 8:30 PM, David Miller <[email protected]> wrote:
> From: David Drysdale <[email protected]>
> Date: Tue, 18 Nov 2014 13:13:51 +0000
>
>> Hi folks,
>>
>> It looks like the value for O_PATH on sparc:
>>
>> arch/sparc/include/uapi/asm/fcntl.h:37:#define O_PATH 0x1000000
>>
>> clashes with the arch-independent value for __FMODE_NONOTIFY:
>>
>> include/linux/fs.h:137:#define FMODE_NONOTIFY ((__force fmode_t)0x1000000)
>> include/linux/fs.h:2764:#define __FMODE_NONOTIFY ((__force int)
>> FMODE_NONOTIFY)
>>
>> and they are both in the same numbering space, as indicated by the
>> comment at the top of include/uapi/asm-generic/fcntl.h and the use in
>> fs/notify/fanotify/fanotify_user.c:715.
>>
>> Presumably this could theoretically cause problems (no notifications for
>> O_PATH files on SPARC?), so would it be a good idea to renumber
>> FMODE_NONOTIFY? (I *think* that value is entirely kernel-internal.)
>>
>> Given that this has happened before (12ed2e36c98aec6c4155 "fanotify:
>> FMODE_NONOTIFY and __O_SYNC in sparc conflict") it would probably
>> also be a good idea to add __FMODE_NOTIFY to the uniqueness check in
>> fs/fcntl.c:fcntl_init().
>>
>> Thoughts?
>
> I think you will need to change the internal value, to not clash with
> the sparc exported one, for sure.

Well, I was sort of hoping someone else might volunteer to make the
change :-) -- I don't use fanotify (or sparc for that matter), I just
happened to notice the clash in passing.

But I'm happy to have a go, although I can't test much. It would be
good to hear from the fanotify maintainers first, though -- Eric?

Thanks,
David

2014-11-20 19:12:37

by Eric Paris

[permalink] [raw]
Subject: Re: sparc: Clashing values for O_PATH and FMODE_NONOTIFY?

On Thu, 2014-11-20 at 12:12 +0000, David Drysdale wrote:
> [+linux-fsdevel, without the typo this time]
>
> On Wed, Nov 19, 2014 at 8:30 PM, David Miller <[email protected]> wrote:
> > From: David Drysdale <[email protected]>
> > Date: Tue, 18 Nov 2014 13:13:51 +0000
> >
> >> Hi folks,
> >>
> >> It looks like the value for O_PATH on sparc:
> >>
> >> arch/sparc/include/uapi/asm/fcntl.h:37:#define O_PATH 0x1000000
> >>
> >> clashes with the arch-independent value for __FMODE_NONOTIFY:
> >>
> >> include/linux/fs.h:137:#define FMODE_NONOTIFY ((__force fmode_t)0x1000000)
> >> include/linux/fs.h:2764:#define __FMODE_NONOTIFY ((__force int)
> >> FMODE_NONOTIFY)
> >>
> >> and they are both in the same numbering space, as indicated by the
> >> comment at the top of include/uapi/asm-generic/fcntl.h and the use in
> >> fs/notify/fanotify/fanotify_user.c:715.
> >>
> >> Presumably this could theoretically cause problems (no notifications for
> >> O_PATH files on SPARC?), so would it be a good idea to renumber
> >> FMODE_NONOTIFY? (I *think* that value is entirely kernel-internal.)
> >>
> >> Given that this has happened before (12ed2e36c98aec6c4155 "fanotify:
> >> FMODE_NONOTIFY and __O_SYNC in sparc conflict") it would probably
> >> also be a good idea to add __FMODE_NOTIFY to the uniqueness check in
> >> fs/fcntl.c:fcntl_init().
> >>
> >> Thoughts?
> >
> > I think you will need to change the internal value, to not clash with
> > the sparc exported one, for sure.
>
> Well, I was sort of hoping someone else might volunteer to make the
> change :-) -- I don't use fanotify (or sparc for that matter), I just
> happened to notice the clash in passing.
>
> But I'm happy to have a go, although I can't test much. It would be
> good to hear from the fanotify maintainers first, though -- Eric?

It's totally internal. And was picked to not clash with anyone. I
don't know how to keep it from happening in the future.....

2014-11-20 19:32:06

by David Drysdale

[permalink] [raw]
Subject: Re: sparc: Clashing values for O_PATH and FMODE_NONOTIFY?

On Thu, Nov 20, 2014 at 7:12 PM, Eric Paris <[email protected]> wrote:
> On Thu, 2014-11-20 at 12:12 +0000, David Drysdale wrote:
>> [+linux-fsdevel, without the typo this time]
>>
>> On Wed, Nov 19, 2014 at 8:30 PM, David Miller <[email protected]> wrote:
>> > From: David Drysdale <[email protected]>
>> > Date: Tue, 18 Nov 2014 13:13:51 +0000
>> >
>> >> Hi folks,
>> >>
>> >> It looks like the value for O_PATH on sparc:
>> >>
>> >> arch/sparc/include/uapi/asm/fcntl.h:37:#define O_PATH 0x1000000
>> >>
>> >> clashes with the arch-independent value for __FMODE_NONOTIFY:
>> >>
>> >> include/linux/fs.h:137:#define FMODE_NONOTIFY ((__force fmode_t)0x1000000)
>> >> include/linux/fs.h:2764:#define __FMODE_NONOTIFY ((__force int)
>> >> FMODE_NONOTIFY)
>> >>
>> >> and they are both in the same numbering space, as indicated by the
>> >> comment at the top of include/uapi/asm-generic/fcntl.h and the use in
>> >> fs/notify/fanotify/fanotify_user.c:715.
>> >>
>> >> Presumably this could theoretically cause problems (no notifications for
>> >> O_PATH files on SPARC?), so would it be a good idea to renumber
>> >> FMODE_NONOTIFY? (I *think* that value is entirely kernel-internal.)
>> >>
>> >> Given that this has happened before (12ed2e36c98aec6c4155 "fanotify:
>> >> FMODE_NONOTIFY and __O_SYNC in sparc conflict") it would probably
>> >> also be a good idea to add __FMODE_NOTIFY to the uniqueness check in
>> >> fs/fcntl.c:fcntl_init().
>> >>
>> >> Thoughts?
>> >
>> > I think you will need to change the internal value, to not clash with
>> > the sparc exported one, for sure.
>>
>> Well, I was sort of hoping someone else might volunteer to make the
>> change :-) -- I don't use fanotify (or sparc for that matter), I just
>> happened to notice the clash in passing.
>>
>> But I'm happy to have a go, although I can't test much. It would be
>> good to hear from the fanotify maintainers first, though -- Eric?
>
> It's totally internal.

OK, thanks, that makes me feel safer about changing its value.

(fatrace still seemed to work (and not report its own activity) after
I changed the value, which is also reassuring.)

> And was picked to not clash with anyone. I
> don't know how to keep it from happening in the future.....

There's a compile-time check on the number of distinct O_*
bits at the bottom of fs/fcntl.c -- if we update that to include
FMODE_NONOTIFY then any future clashes should trigger
a (cross-)compilation failure.

I'll send out a patch tomorrow.

Thanks,
David