diff mbox series

[1/2] kselftests: mm: Fix wrong __NR_userfaultfd value

Message ID 20240912103151.1520254-1-usama.anjum@collabora.com
State Superseded
Headers show
Series [1/2] kselftests: mm: Fix wrong __NR_userfaultfd value | expand

Commit Message

Muhammad Usama Anjum Sept. 12, 2024, 10:31 a.m. UTC
The value of __NR_userfaultfd was changed to 282 when
asm-generic/unistd.h was included. It makes the test to fail every time
as the correct number of this syscall on x86_64 is 323. Fix the header
to asm/unistd.h.

Fixes: a5c6bc590094 ("selftests/mm: remove local __NR_* definitions")
Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
---
 tools/testing/selftests/mm/pagemap_ioctl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Muhammad Usama Anjum Sept. 16, 2024, 6:32 a.m. UTC | #1
On 9/12/24 8:44 PM, Shuah Khan wrote:
> On 9/12/24 04:31, Muhammad Usama Anjum wrote:
>> The value of __NR_userfaultfd was changed to 282 when
>> asm-generic/unistd.h was included. It makes the test to fail every time
>> as the correct number of this syscall on x86_64 is 323. Fix the header
>> to asm/unistd.h.
>>
> 
> "please elaborate every time" - I just built on my x86_64 and built
> just fine.
The build isn't broken.

> I am not saying this isn't a problem, it is good to
> understand why and how it is failing before making the change.
I mean to say that the test is failing at run time because the correct
userfaultfd syscall isn't being found with __NR_userfaultfd = 282.
_NR_userfaultfd's value depends on the header. When asm-generic/unistd.h
is included, its value (282) is wrong. I've tested on x86_64.

The fix is simple. Add the correct header which has _NR_userfaultfd = 323.

> 
>> Fixes: a5c6bc590094 ("selftests/mm: remove local __NR_* definitions")
>> Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
>> ---
>>   tools/testing/selftests/mm/pagemap_ioctl.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/tools/testing/selftests/mm/pagemap_ioctl.c
>> b/tools/testing/selftests/mm/pagemap_ioctl.c
>> index fc90af2a97b80..bcc73b4e805c6 100644
>> --- a/tools/testing/selftests/mm/pagemap_ioctl.c
>> +++ b/tools/testing/selftests/mm/pagemap_ioctl.c
>> @@ -15,7 +15,7 @@
>>   #include <sys/ioctl.h>
>>   #include <sys/stat.h>
>>   #include <math.h>
>> -#include <asm-generic/unistd.h>
>> +#include <asm/unistd.h>
>>   #include <pthread.h>
>>   #include <sys/resource.h>
>>   #include <assert.h>
> 
> Also please generate a series with these two patches with cover-letter.
> 
> thanks,
> -- Shuah
Shuah Khan Sept. 17, 2024, 1:56 a.m. UTC | #2
On 9/16/24 00:32, Muhammad Usama Anjum wrote:
> On 9/12/24 8:44 PM, Shuah Khan wrote:
>> On 9/12/24 04:31, Muhammad Usama Anjum wrote:
>>> The value of __NR_userfaultfd was changed to 282 when
>>> asm-generic/unistd.h was included. It makes the test to fail every time
>>> as the correct number of this syscall on x86_64 is 323. Fix the header
>>> to asm/unistd.h.
>>>
>>
>> "please elaborate every time" - I just built on my x86_64 and built
>> just fine.
> The build isn't broken.
> 
>> I am not saying this isn't a problem, it is good to
>> understand why and how it is failing before making the change.
> I mean to say that the test is failing at run time because the correct
> userfaultfd syscall isn't being found with __NR_userfaultfd = 282.
> _NR_userfaultfd's value depends on the header. When asm-generic/unistd.h
> is included, its value (282) is wrong. I've tested on x86_64.
> 

Okay - how do you know this is wrong? can you provide more details.

git grep _NR_userfaultfd
include/uapi/asm-generic/unistd.h:#define __NR_userfaultfd 282
include/uapi/asm-generic/unistd.h:__SYSCALL(__NR_userfaultfd, sys_userfaultfd)
tools/include/uapi/asm-generic/unistd.h:#define __NR_userfaultfd 282

> The fix is simple. Add the correct header which has _NR_userfaultfd = 323.

I need more details on this number.

thanks,
-- Shuah
Muhammad Usama Anjum Sept. 18, 2024, 5:46 a.m. UTC | #3
On 9/17/24 6:56 AM, Shuah Khan wrote:
> On 9/16/24 00:32, Muhammad Usama Anjum wrote:
>> On 9/12/24 8:44 PM, Shuah Khan wrote:
>>> On 9/12/24 04:31, Muhammad Usama Anjum wrote:
>>>> The value of __NR_userfaultfd was changed to 282 when
>>>> asm-generic/unistd.h was included. It makes the test to fail every time
>>>> as the correct number of this syscall on x86_64 is 323. Fix the header
>>>> to asm/unistd.h.
>>>>
>>>
>>> "please elaborate every time" - I just built on my x86_64 and built
>>> just fine.
>> The build isn't broken.
>>
>>> I am not saying this isn't a problem, it is good to
>>> understand why and how it is failing before making the change.
>> I mean to say that the test is failing at run time because the correct
>> userfaultfd syscall isn't being found with __NR_userfaultfd = 282.
>> _NR_userfaultfd's value depends on the header. When asm-generic/unistd.h
>> is included, its value (282) is wrong. I've tested on x86_64.
>>
> 
> Okay - how do you know this is wrong? can you provide more details.
> 
> git grep _NR_userfaultfd
> include/uapi/asm-generic/unistd.h:#define __NR_userfaultfd 282
> include/uapi/asm-generic/unistd.h:__SYSCALL(__NR_userfaultfd,
> sys_userfaultfd)
> tools/include/uapi/asm-generic/unistd.h:#define __NR_userfaultfd 282
> 
>> The fix is simple. Add the correct header which has _NR_userfaultfd =
>> 323.

grep -rnIF "#define __NR_userfaultfd"
tools/include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
arch/x86/include/generated/uapi/asm/unistd_32.h:374:#define
__NR_userfaultfd 374
arch/x86/include/generated/uapi/asm/unistd_64.h:327:#define
__NR_userfaultfd 323
arch/x86/include/generated/uapi/asm/unistd_x32.h:282:#define
__NR_userfaultfd (__X32_SYSCALL_BIT + 323)
arch/arm/include/generated/uapi/asm/unistd-eabi.h:347:#define
__NR_userfaultfd (__NR_SYSCALL_BASE + 388)
arch/arm/include/generated/uapi/asm/unistd-oabi.h:359:#define
__NR_userfaultfd (__NR_SYSCALL_BASE + 388)
include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282

The number is dependent on the architecture. The above data shows that:
x86	374
x86_64	323

I'm unable to find the history of why it is set to 282 in unistd.h and
when this problem happened.

> 
> I need more details on this number.
> 
> thanks,
> -- Shuah
Muhammad Usama Anjum Sept. 18, 2024, 5:46 a.m. UTC | #4
On 9/18/24 10:46 AM, Muhammad Usama Anjum wrote:
> On 9/17/24 6:56 AM, Shuah Khan wrote:
>> On 9/16/24 00:32, Muhammad Usama Anjum wrote:
>>> On 9/12/24 8:44 PM, Shuah Khan wrote:
>>>> On 9/12/24 04:31, Muhammad Usama Anjum wrote:
>>>>> The value of __NR_userfaultfd was changed to 282 when
>>>>> asm-generic/unistd.h was included. It makes the test to fail every time
>>>>> as the correct number of this syscall on x86_64 is 323. Fix the header
>>>>> to asm/unistd.h.
>>>>>
>>>>
>>>> "please elaborate every time" - I just built on my x86_64 and built
>>>> just fine.
>>> The build isn't broken.
>>>
>>>> I am not saying this isn't a problem, it is good to
>>>> understand why and how it is failing before making the change.
>>> I mean to say that the test is failing at run time because the correct
>>> userfaultfd syscall isn't being found with __NR_userfaultfd = 282.
>>> _NR_userfaultfd's value depends on the header. When asm-generic/unistd.h
>>> is included, its value (282) is wrong. I've tested on x86_64.
>>>
>>
>> Okay - how do you know this is wrong? can you provide more details.
>>
>> git grep _NR_userfaultfd
>> include/uapi/asm-generic/unistd.h:#define __NR_userfaultfd 282
>> include/uapi/asm-generic/unistd.h:__SYSCALL(__NR_userfaultfd,
>> sys_userfaultfd)
>> tools/include/uapi/asm-generic/unistd.h:#define __NR_userfaultfd 282
>>
>>> The fix is simple. Add the correct header which has _NR_userfaultfd =
>>> 323.
> 
> grep -rnIF "#define __NR_userfaultfd"
> tools/include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
> arch/x86/include/generated/uapi/asm/unistd_32.h:374:#define
> __NR_userfaultfd 374
> arch/x86/include/generated/uapi/asm/unistd_64.h:327:#define
> __NR_userfaultfd 323
> arch/x86/include/generated/uapi/asm/unistd_x32.h:282:#define
> __NR_userfaultfd (__X32_SYSCALL_BIT + 323)
> arch/arm/include/generated/uapi/asm/unistd-eabi.h:347:#define
> __NR_userfaultfd (__NR_SYSCALL_BASE + 388)
> arch/arm/include/generated/uapi/asm/unistd-oabi.h:359:#define
> __NR_userfaultfd (__NR_SYSCALL_BASE + 388)
> include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
> 
> The number is dependent on the architecture. The above data shows that:
> x86	374
> x86_64	323
> 
> I'm unable to find the history of why it is set to 282 in unistd.h and
> when this problem happened.
Does anybody has understanding of this?

> 
>>
>> I need more details on this number.
>>
>> thanks,
>> -- Shuah
>
Shuah Khan Sept. 20, 2024, 2:59 p.m. UTC | #5
On 9/17/24 23:46, Muhammad Usama Anjum wrote:
> On 9/17/24 6:56 AM, Shuah Khan wrote:
>> On 9/16/24 00:32, Muhammad Usama Anjum wrote:
>>> On 9/12/24 8:44 PM, Shuah Khan wrote:
>>>> On 9/12/24 04:31, Muhammad Usama Anjum wrote:
>>>>> The value of __NR_userfaultfd was changed to 282 when
>>>>> asm-generic/unistd.h was included. It makes the test to fail every time
>>>>> as the correct number of this syscall on x86_64 is 323. Fix the header
>>>>> to asm/unistd.h.
>>>>>
>>>>
>>>> "please elaborate every time" - I just built on my x86_64 and built
>>>> just fine.
>>> The build isn't broken.
>>>
>>>> I am not saying this isn't a problem, it is good to
>>>> understand why and how it is failing before making the change.
>>> I mean to say that the test is failing at run time because the correct
>>> userfaultfd syscall isn't being found with __NR_userfaultfd = 282.
>>> _NR_userfaultfd's value depends on the header. When asm-generic/unistd.h
>>> is included, its value (282) is wrong. I've tested on x86_64.
>>>
>>
>> Okay - how do you know this is wrong? can you provide more details.
>>
>> git grep _NR_userfaultfd
>> include/uapi/asm-generic/unistd.h:#define __NR_userfaultfd 282
>> include/uapi/asm-generic/unistd.h:__SYSCALL(__NR_userfaultfd,
>> sys_userfaultfd)
>> tools/include/uapi/asm-generic/unistd.h:#define __NR_userfaultfd 282
>>
>>> The fix is simple. Add the correct header which has _NR_userfaultfd =
>>> 323.
> 
> grep -rnIF "#define __NR_userfaultfd"
> tools/include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
> arch/x86/include/generated/uapi/asm/unistd_32.h:374:#define
> __NR_userfaultfd 374
> arch/x86/include/generated/uapi/asm/unistd_64.h:327:#define
> __NR_userfaultfd 323
> arch/x86/include/generated/uapi/asm/unistd_x32.h:282:#define
> __NR_userfaultfd (__X32_SYSCALL_BIT + 323)
> arch/arm/include/generated/uapi/asm/unistd-eabi.h:347:#define
> __NR_userfaultfd (__NR_SYSCALL_BASE + 388)
> arch/arm/include/generated/uapi/asm/unistd-oabi.h:359:#define
> __NR_userfaultfd (__NR_SYSCALL_BASE + 388)
> include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
> 
> The number is dependent on the architecture. The above data shows that:
> x86	374
> x86_64	323

Correct and the generated header files do the right thing and it is good to
include them as this patch does.

This is a good find and fix. I wish you explained this in your changelog.
Please add more details when you send v2.

There could be other issues lurking based on what I found.

The other two files are the problem where they hard code it to 282 without
taking the __NR_SYSCALL_BASE for the arch into consideration:

tools/include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282

> 
> I'm unable to find the history of why it is set to 282 in unistd.h and
> when this problem happened.

According to git history it is added in the following commit to
include/uapi/asm-generic/unistd.h:

09f7298100ea9767324298ab0c7979f6d7463183
Subject: [PATCH] userfaultfd: register uapi generic syscall (aarch64)

and it is added in the following commit to tools/include/uapi/asm-generic/unistd.h
34b009cfde2b8ce20a69c7bfd6bad4ce0e7cd970
Subject: [PATCH] tools include: Grab copies of arm64 dependent unistd.h files

I think, the above defines from include/uapi/asm-generic/unistd.h and
tools/include/uapi/asm-generic/unistd.h should be removed.

Maybe others familiar with userfaultfd can determine the best course of action.
We might have other NR_ defines in these two files that are causing problems
for tests and tools that we haven't uncovered yet.

thanks,
-- Shuah
Muhammad Usama Anjum Sept. 23, 2024, 5:35 a.m. UTC | #6
...

>> grep -rnIF "#define __NR_userfaultfd"
>> tools/include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
>> arch/x86/include/generated/uapi/asm/unistd_32.h:374:#define
>> __NR_userfaultfd 374
>> arch/x86/include/generated/uapi/asm/unistd_64.h:327:#define
>> __NR_userfaultfd 323
>> arch/x86/include/generated/uapi/asm/unistd_x32.h:282:#define
>> __NR_userfaultfd (__X32_SYSCALL_BIT + 323)
>> arch/arm/include/generated/uapi/asm/unistd-eabi.h:347:#define
>> __NR_userfaultfd (__NR_SYSCALL_BASE + 388)
>> arch/arm/include/generated/uapi/asm/unistd-oabi.h:359:#define
>> __NR_userfaultfd (__NR_SYSCALL_BASE + 388)
>> include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
>>
>> The number is dependent on the architecture. The above data shows that:
>> x86    374
>> x86_64    323
> 
> Correct and the generated header files do the right thing and it is good to
> include them as this patch does.
> 
> This is a good find and fix. I wish you explained this in your changelog.
> Please add more details when you send v2.
I'm sending v2

> 
> There could be other issues lurking based on what I found.
> 
> The other two files are the problem where they hard code it to 282 without
> taking the __NR_SYSCALL_BASE for the arch into consideration:
> 
> tools/include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
> include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
> 
>>
>> I'm unable to find the history of why it is set to 282 in unistd.h and
>> when this problem happened.
> 
> According to git history it is added in the following commit to
> include/uapi/asm-generic/unistd.h:
> 
> 09f7298100ea9767324298ab0c7979f6d7463183
> Subject: [PATCH] userfaultfd: register uapi generic syscall (aarch64)
> 
> and it is added in the following commit to
> tools/include/uapi/asm-generic/unistd.h
> 34b009cfde2b8ce20a69c7bfd6bad4ce0e7cd970
> Subject: [PATCH] tools include: Grab copies of arm64 dependent unistd.h
> files
> 
> I think, the above defines from include/uapi/asm-generic/unistd.h and
> tools/include/uapi/asm-generic/unistd.h should be removed.
> 
> Maybe others familiar with userfaultfd can determine the best course of
> action.
> We might have other NR_ defines in these two files that are causing
> problems
> for tests and tools that we haven't uncovered yet.
Added authors of these patches.

> 
> thanks,
> -- Shuah
Shuah Khan Sept. 23, 2024, 4:02 p.m. UTC | #7
On 9/22/24 23:35, Muhammad Usama Anjum wrote:
> ...
> 
>>> grep -rnIF "#define __NR_userfaultfd"
>>> tools/include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
>>> arch/x86/include/generated/uapi/asm/unistd_32.h:374:#define
>>> __NR_userfaultfd 374
>>> arch/x86/include/generated/uapi/asm/unistd_64.h:327:#define
>>> __NR_userfaultfd 323
>>> arch/x86/include/generated/uapi/asm/unistd_x32.h:282:#define
>>> __NR_userfaultfd (__X32_SYSCALL_BIT + 323)
>>> arch/arm/include/generated/uapi/asm/unistd-eabi.h:347:#define
>>> __NR_userfaultfd (__NR_SYSCALL_BASE + 388)
>>> arch/arm/include/generated/uapi/asm/unistd-oabi.h:359:#define
>>> __NR_userfaultfd (__NR_SYSCALL_BASE + 388)
>>> include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
>>>
>>> The number is dependent on the architecture. The above data shows that:
>>> x86    374
>>> x86_64    323
>>
>> Correct and the generated header files do the right thing and it is good to
>> include them as this patch does.
>>
>> This is a good find and fix. I wish you explained this in your changelog.
>> Please add more details when you send v2.
> I'm sending v2
> 
>>
>> There could be other issues lurking based on what I found.
>>
>> The other two files are the problem where they hard code it to 282 without
>> taking the __NR_SYSCALL_BASE for the arch into consideration:
>>
>> tools/include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
>> include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
>>
>>>
>>> I'm unable to find the history of why it is set to 282 in unistd.h and
>>> when this problem happened.
>>
>> According to git history it is added in the following commit to
>> include/uapi/asm-generic/unistd.h:
>>
>> 09f7298100ea9767324298ab0c7979f6d7463183
>> Subject: [PATCH] userfaultfd: register uapi generic syscall (aarch64)
>>
>> and it is added in the following commit to
>> tools/include/uapi/asm-generic/unistd.h
>> 34b009cfde2b8ce20a69c7bfd6bad4ce0e7cd970
>> Subject: [PATCH] tools include: Grab copies of arm64 dependent unistd.h
>> files
>>
>> I think, the above defines from include/uapi/asm-generic/unistd.h and
>> tools/include/uapi/asm-generic/unistd.h should be removed.
>>
>> Maybe others familiar with userfaultfd can determine the best course of
>> action.
>> We might have other NR_ defines in these two files that are causing
>> problems
>> for tests and tools that we haven't uncovered yet.
> Added authors of these patches.
> 

Thank you. Would you be able top follow up on this and send patches
to remove these defines if it deemed to be the correct solution?

thanks,
-- Shuah
Muhammad Usama Anjum Sept. 24, 2024, 6:21 a.m. UTC | #8
On 9/23/24 9:02 PM, Shuah Khan wrote:
> On 9/22/24 23:35, Muhammad Usama Anjum wrote:
>> ...
>>
>>>> grep -rnIF "#define __NR_userfaultfd"
>>>> tools/include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd
>>>> 282
>>>> arch/x86/include/generated/uapi/asm/unistd_32.h:374:#define
>>>> __NR_userfaultfd 374
>>>> arch/x86/include/generated/uapi/asm/unistd_64.h:327:#define
>>>> __NR_userfaultfd 323
>>>> arch/x86/include/generated/uapi/asm/unistd_x32.h:282:#define
>>>> __NR_userfaultfd (__X32_SYSCALL_BIT + 323)
>>>> arch/arm/include/generated/uapi/asm/unistd-eabi.h:347:#define
>>>> __NR_userfaultfd (__NR_SYSCALL_BASE + 388)
>>>> arch/arm/include/generated/uapi/asm/unistd-oabi.h:359:#define
>>>> __NR_userfaultfd (__NR_SYSCALL_BASE + 388)
>>>> include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
>>>>
>>>> The number is dependent on the architecture. The above data shows that:
>>>> x86    374
>>>> x86_64    323
>>>
>>> Correct and the generated header files do the right thing and it is
>>> good to
>>> include them as this patch does.
>>>
>>> This is a good find and fix. I wish you explained this in your
>>> changelog.
>>> Please add more details when you send v2.
>> I'm sending v2
>>
>>>
>>> There could be other issues lurking based on what I found.
>>>
>>> The other two files are the problem where they hard code it to 282
>>> without
>>> taking the __NR_SYSCALL_BASE for the arch into consideration:
>>>
>>> tools/include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
>>> include/uapi/asm-generic/unistd.h:681:#define __NR_userfaultfd 282
>>>
>>>>
>>>> I'm unable to find the history of why it is set to 282 in unistd.h and
>>>> when this problem happened.
>>>
>>> According to git history it is added in the following commit to
>>> include/uapi/asm-generic/unistd.h:
>>>
>>> 09f7298100ea9767324298ab0c7979f6d7463183
>>> Subject: [PATCH] userfaultfd: register uapi generic syscall (aarch64)
>>>
>>> and it is added in the following commit to
>>> tools/include/uapi/asm-generic/unistd.h
>>> 34b009cfde2b8ce20a69c7bfd6bad4ce0e7cd970
>>> Subject: [PATCH] tools include: Grab copies of arm64 dependent unistd.h
>>> files
>>>
>>> I think, the above defines from include/uapi/asm-generic/unistd.h and
>>> tools/include/uapi/asm-generic/unistd.h should be removed.
>>>
>>> Maybe others familiar with userfaultfd can determine the best course of
>>> action.
>>> We might have other NR_ defines in these two files that are causing
>>> problems
>>> for tests and tools that we haven't uncovered yet.
>> Added authors of these patches.
>>
> 
> Thank you. Would you be able top follow up on this and send patches
> to remove these defines if it deemed to be the correct solution?
Yeah, sure. I'll follow up and fix the issue.

> 
> thanks,
> -- Shuah
> 
>
diff mbox series

Patch

diff --git a/tools/testing/selftests/mm/pagemap_ioctl.c b/tools/testing/selftests/mm/pagemap_ioctl.c
index fc90af2a97b80..bcc73b4e805c6 100644
--- a/tools/testing/selftests/mm/pagemap_ioctl.c
+++ b/tools/testing/selftests/mm/pagemap_ioctl.c
@@ -15,7 +15,7 @@ 
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 #include <math.h>
-#include <asm-generic/unistd.h>
+#include <asm/unistd.h>
 #include <pthread.h>
 #include <sys/resource.h>
 #include <assert.h>