Thread (17 messages) flat view 17 messages, 5 authors, 2018-06-29

Re: [RFC PATCH for 4.18 1/2] rseq: validate rseq_cs fields are < TASK_SIZE

From: Linus Torvalds <torvalds@linux-foundation.org>
Date: 2018-06-29 14:02:20
Also in: lkml

On Thu, Jun 28, 2018 at 6:08 PM Andy Lutomirski [off-list ref] wrote:
quoted
On Jun 28, 2018, at 5:18 PM, Linus Torvalds [off-list ref] wrote:


Make it do

       if (rseq_cs->abort_ip != (unsigned long)rseq_cs->abort_ip)
               return -EINVAL;

at abort time.
You sure?  Because, unless I remember wrong, a 32-bit user program on a 64-bit kernel will actually work at least most of the time even if high bits are set.
Sure.

If you run a 32-bit binary on a 64-bit kernel,. you will have access
to the 0xc0000000 - 0xffffffff area that you wouldn't have had access
to if it ran on a 32-bit kernel.

But exactly *because* you have access to that area, those addresses
are actually valid addresses for the 32-bit case, so they shouldn't be
considered bad. They can't happen on a native 32-bit kerne, but a
32-bit program doesn't even care. If it has user memory mapped in that
area, it should work.

And if it *doesn't* have user memory mapped in that area, then it will
fail when the trying to execute the (non-existent) abort sequence.

After all, depending on configuration, a native 32-bit kernel might
limit user space even more (ie some vendors had a 2G:2G split instead
of the traditional 3G:1G split.

Was that the case you were thinking of, or was it something else?

              Linus
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help