From: Szabolcs Nagy <Szabolcs.Nagy@arm.com>
To: ltp@lists.linux.it
Subject: [LTP] ? FAIL: Test report for kernel 5.4.0-rc2-d6c2c23.cki (stable-next)
Date: Wed, 16 Oct 2019 18:10:16 +0000 [thread overview]
Message-ID: <ecf22341-bad2-e20b-f12c-cc80ebafda2a@arm.com> (raw)
In-Reply-To: <20191016163528.GA27757@arm.com>
On 16/10/2019 17:35, Dave Martin wrote:
> On Wed, Oct 16, 2019 at 03:52:38PM +0100, Catalin Marinas wrote:
>> On Wed, Oct 16, 2019 at 03:44:25PM +0100, Dave P Martin wrote:
>>> On Wed, Oct 16, 2019 at 05:29:33AM +0100, Will Deacon wrote:
>>>> diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
>>>> index b61b50bf68b1..c23c47360664 100644
>>>> --- a/arch/arm64/include/asm/memory.h
>>>> +++ b/arch/arm64/include/asm/memory.h
>>>> @@ -215,12 +215,18 @@ static inline unsigned long kaslr_offset(void)
>>>> * up with a tagged userland pointer. Clear the tag to get a sane pointer to
>>>> * pass on to access_ok(), for instance.
>>>> */
>>>> -#define untagged_addr(addr) \
>>>> +#define __untagged_addr(addr) \
>>>> ((__force __typeof__(addr))sign_extend64((__force u64)(addr), 55))
>>>>
>>>> +#define untagged_addr(addr) ({ \
>>>
>>> Having the same informal name ("untagged") for two different address
>>> representations seems like a recipe for confusion. Can we rename one of
>>> them? (Say, untagged_address_if_user()?)
>>
>> I agree it's confusing. We can rename the __* one but the other is
>> spread around the kernel (it can be done, though as a subsequent
>> exercise; untagged_uaddr?).
>>
>>>> + __addr &= __untagged_addr(__addr); \
>>>> + (__force __typeof__(addr))__addr; \
>>>> +})
>>>
>>> Is there any reason why we can't just have
>>>
>>> #define untagged_addr ((__force __typeof__(addr))( \
>>> (__force u64)(addr) & GENMASK_ULL(63, 56)))
>>
>> I guess you meant ~GENMASK_ULL(63,56) or GENMASK_ULL(55,0).
>>
>> This changes the overflow case for mlock() which would return -ENOMEM
>> instead of -EINVAL (not sure we have a test for it though). Does it
>> matter?
>
> It looks like SUSv7 has m{,un}local() and mprotect() aligned with one
> another regarding ENOMEM versus EINVAL:
>
> https://pubs.opengroup.org/onlinepubs/9699919799/functions/mprotect.html
> https://pubs.opengroup.org/onlinepubs/9699919799/functions/mlock.html
>
> So whatever we do, it should probably have the same effect on both
> calls.
>
>
> There's another wrinkle that occurrs to me though. Rounding "kernel"
> addresses up can spuriously change ENOMEM to EINVAL -- but the fix for
> userspace addresses (i.e., rounding down) can likewise spuriously change
> EINVAL to ENOMEM.
well this was the point of the bit 55 check, to avoid both.
(with the assumption that getting EINVAL is not important if
overflow happens with len > 2^55 and 0 bit 55)
as far as i can tell the EINVAL for overflow is linux specific.
i think returning ENOMEM for invalid addr,len pairs should be
fine, i.e. zero extension is ok.
i think this is consistent with posix requirements, and arguably
even with current linux manual which documents EINVAL for overflow
in mlock, but also ENOMEM for unmapped pages in the range, so both
errors are ok on overflow.
so the bit 55 check only matters if something somewhere relies
on the error code in a significant way when calling syscalls with
nonsensical arguments.
> > Maybe this is OK -- the SUSv7 wording doesn't seem to call out address
> wraparound as a special case, and therefore supposedly doesn't require
> EINVAL to be returned for it.
>
> The asymmetry is concerning though, and a bit ugly.
>
> Cheers
> ---Dave
>
prev parent reply other threads:[~2019-10-16 18:10 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cki.B4A567748F.PFM8G4WKXI@redhat.com>
2019-10-14 7:28 ` [LTP] ❌ FAIL: Test report for kernel 5.4.0-rc2-d6c2c23.cki (stable-next) Jan Stancek
2019-10-14 12:54 ` Andrey Konovalov
2019-10-14 16:26 ` Catalin Marinas
2019-10-14 21:33 ` Will Deacon
2019-10-15 15:26 ` Catalin Marinas
2019-10-15 16:02 ` Vincenzo Frascino
2019-10-15 16:14 ` Will Deacon
2019-10-16 4:29 ` Will Deacon
2019-10-16 8:12 ` Catalin Marinas
2019-10-16 8:18 ` Vincenzo Frascino
2019-10-16 13:55 ` Andrey Konovalov
2019-10-16 14:38 ` Jan Stancek
2019-10-16 14:44 ` [LTP] ? " Dave Martin
2019-10-16 14:52 ` Catalin Marinas
2019-10-16 16:35 ` Dave Martin
2019-10-16 18:10 ` Szabolcs Nagy [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ecf22341-bad2-e20b-f12c-cc80ebafda2a@arm.com \
--to=szabolcs.nagy@arm.com \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox