[LTP] [PATCH] open_posix_testsuite/mmap24-2: Support mips

Hongzhi, Song hongzhi.song@windriver.com
Wed Jul 24 03:21:16 CEST 2019


ping

--Hongzhi


On 7/19/19 9:38 AM, Hongzhi, Song wrote:
> ping.
>
> There are some discussion for patch-v1 : 
> https://lists.linux.it/pipermail/ltp/2018-October/009624.html
>
> Thanks
>
> --Hongzhi
>
>
> On 11/5/18 9:15 AM, Hongzhi, Song wrote:
>> Kindly ping
>>
>> --Hongzhi
>>
>>
>> On 11/01/2018 09:49 AM, Hongzhi, Song wrote:
>>> Hi guys,
>>>
>>> Referring to POSIX spec, the return values, EINVAL and ENOMEM,
>>>
>>> are all right if MAP_FIXED is set. So I think Mips also keep to POSIX.
>>>
>>>
>>> Please review this patch.
>>>
>>>
>>> --Hongzhi
>>>
>>>
>>> On 10/24/2018 10:36 AM, Hongzhi.Song wrote:
>>>> Mips will return EINVAL instead of ENOMEM as expected
>>>> if MAP_FIXED is set and the range of [addr + len) exceeds
>>>> TASK_SIZE.
>>>>
>>>> Linux kernel code: arch/mips/mm/mmap.c
>>>> if (flags & MAP_FIXED) {
>>>>      /* Even MAP_FIXED mappings must reside within TASK_SIZE */
>>>>      if (TASK_SIZE - len < addr)
>>>>          return -EINVAL;
>>>>
>>>> The POSIX specification says:
>>>> "If MAP_FIXED is set, mmap() may return MAP_FAILED and set errno to
>>>> [EINVAL]."
>>>> [http://pubs.opengroup.org/onlinepubs/9699919799/functions/mmap.html]
>>>>
>>>> So I think the mips kernel remains POSIX compliant.
>>>>
>>>> Relax the condition and accept both ENOMEM and EINVAL
>>>> as expected outcome.
>>>>
>>>> Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com>
>>>> ---
>>>> .../open_posix_testsuite/conformance/interfaces/mmap/24-2.c | 10 
>>>> +++++-----
>>>>   1 file changed, 5 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git 
>>>> a/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-2.c 
>>>> b/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-2.c
>>>> index de51d43..810e5c8 100644
>>>> --- 
>>>> a/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-2.c
>>>> +++ 
>>>> b/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-2.c
>>>> @@ -7,7 +7,7 @@
>>>>    * source tree.
>>>>    *
>>>>    * The mmap() function shall fail if:
>>>> - * [ENOMEM] MAP_FIXED was specified,
>>>> + * [ENOMEM or EINVAL] MAP_FIXED was specified,
>>>>    * and the range [addr,addr+len) exceeds that allowed
>>>>    * for the address space of a process; or, if MAP_FIXED was not 
>>>> specified and
>>>>    * there is insufficient room in the address space to effect the 
>>>> mapping.
>>>> @@ -15,7 +15,7 @@
>>>>    * Test Step:
>>>>    * 1. Map a shared memory object, with size exceeding the value 
>>>> get from
>>>>    *    rlim_cur of resource RLIMIT_AS, setting MAP_FIXED;
>>>> - * 3. Should get ENOMEM.
>>>> + * 3. Should get ENOMEM or EINVAL.
>>>>    */
>>>>     #define _XOPEN_SOURCE 600
>>>> @@ -93,8 +93,8 @@ int main(void)
>>>>              (unsigned long)len);
>>>>       pa = mmap(addr, len, PROT_READ | PROT_WRITE, MAP_FIXED | 
>>>> MAP_SHARED, fd,
>>>>             0);
>>>> -    if (pa == MAP_FAILED && errno == ENOMEM) {
>>>> -        printf("Got ENOMEM: %s\nTest PASSED\n", strerror(errno));
>>>> +    if (pa == MAP_FAILED && (errno == ENOMEM || errno == EINVAL)) {
>>>> +        printf("Got ENOMEM or EINVAL: %s\nTest PASSED\n", 
>>>> strerror(errno));
>>>>           exit(PTS_PASS);
>>>>       }
>>>>   @@ -103,6 +103,6 @@ int main(void)
>>>>       else
>>>>           munmap(pa, len);
>>>>       close(fd);
>>>> -    printf("Test Fail: Did not get ENOMEM as expected\n");
>>>> +    printf("Test Failed: Did not get ENOMEM or EINVAL as 
>>>> expected\n");
>>>>       return PTS_FAIL;
>>>>   }
>>>
>>>
>>
>>
>


More information about the ltp mailing list