[LTP] [PATCH] open_posix_testsuite/mmap24-2: Support mips
Hongzhi, Song
hongzhi.song@windriver.com
Fri Jul 19 03:38:58 CEST 2019
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