linux-um archives
 help / color / mirror / Atom feed
From: Benjamin Berg <benjamin@sipsolutions.net>
To: linux-um@lists.infradead.org
Cc: Benjamin Berg <benjamin.berg@intel.com>
Subject: [PATCH v9 00/10] Increased address space for 64 bit
Date: Thu, 19 Sep 2024 14:45:01 +0200	[thread overview]
Message-ID: <20240919124511.282088-1-benjamin@sipsolutions.net> (raw)

From: Benjamin Berg <benjamin.berg@intel.com>

The new version of the patchset uses execveat on a memfd instead of
cloning twice to disable rseq. This should be much more robust going
forward as it will also avoid issues with other new features like mseal.

This patchset fixes a few bugs, adds a new method of discovering the
host task size and switches to four-level page tables on 64 bit. All of
this means the userspace TASK_SIZE is much larger and in turn permits
userspace applications that need a lot of virtual addresses to work
fine.

One such application is ASAN which uses a fixed address in memory that
would otherwise not be addressable.

v9:
* Drop support for 3-level page tables (on top of Tiwei Bie's patch)
* Add patches to set PR_SET_PDEATHSIG for more robust cleanup
* Cleanup top address calculation a bit more
* Use code address for stub data location

v8:
* Make changes suggested by Johannes Berg

v7:
* Plenty of changes to fix 32 bit and improve the logic

v6:
* Apply fixes pointed out by Tiwei Bie
* Add temporary file fallback as memfd is not always supported

v5:
* Use execveat with memfd instead of double clone

v4:
* Do not use WNOHANG in wait for CLONE_VFORK

v3:
* Undo incorrect change in child wait loop

v2:
* Improved double clone logic using CLONE_VFORK
* Kconfig fixes pointed out by Tiwei Bie

Benjamin Berg (10):
  um: Add generic stub_syscall1 function
  um: use execveat to create userspace MMs
  um: Set parent death signal for userspace process
  um: Set parent death signal for winch thread/process
  um: Add compile time assert that stub fits on a page
  um: Calculate stub data address relative to stub code
  um: Limit TASK_SIZE to the addressable range
  um: Discover host_task_size from envp
  um: clear all memory in new userspace processes
  um: Switch to 4 level page tables on 64 bit

 arch/um/Kconfig                               |   4 +-
 arch/um/Makefile                              |   3 +-
 arch/um/drivers/chan_user.c                   |   3 +
 arch/um/include/asm/page.h                    |  14 +-
 arch/um/include/asm/pgalloc.h                 |  11 +-
 .../{pgtable-3level.h => pgtable-4level.h}    |  40 +++-
 arch/um/include/asm/pgtable.h                 |   8 +-
 arch/um/include/shared/as-layout.h            |   2 +-
 arch/um/include/shared/os.h                   |   3 -
 arch/um/include/shared/skas/stub-data.h       |  11 ++
 arch/um/kernel/dyn.lds.S                      |   3 +
 arch/um/kernel/mem.c                          |  17 +-
 arch/um/kernel/skas/.gitignore                |   2 +
 arch/um/kernel/skas/Makefile                  |  33 +++-
 arch/um/kernel/skas/mmu.c                     |  25 +--
 arch/um/kernel/skas/stub_exe.c                |  91 +++++++++
 arch/um/kernel/skas/stub_exe_embed.S          |  11 ++
 arch/um/kernel/um_arch.c                      |  34 +++-
 arch/um/os-Linux/main.c                       |   9 +-
 arch/um/os-Linux/mem.c                        |   2 +-
 arch/um/os-Linux/skas/process.c               | 181 ++++++++++++------
 arch/x86/um/Kconfig                           |   3 -
 arch/x86/um/os-Linux/Makefile                 |   2 +-
 arch/x86/um/os-Linux/task_size.c              | 151 ---------------
 arch/x86/um/shared/sysdep/stub_32.h           |  10 +-
 arch/x86/um/shared/sysdep/stub_64.h           |  19 +-
 26 files changed, 420 insertions(+), 272 deletions(-)
 rename arch/um/include/asm/{pgtable-3level.h => pgtable-4level.h} (66%)
 create mode 100644 arch/um/kernel/skas/.gitignore
 create mode 100644 arch/um/kernel/skas/stub_exe.c
 create mode 100644 arch/um/kernel/skas/stub_exe_embed.S
 delete mode 100644 arch/x86/um/os-Linux/task_size.c

-- 
2.46.0



             reply	other threads:[~2024-09-19 12:45 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-19 12:45 Benjamin Berg [this message]
2024-09-19 12:45 ` [PATCH v9 01/10] um: Add generic stub_syscall1 function Benjamin Berg
2024-09-19 12:45 ` [PATCH v9 02/10] um: use execveat to create userspace MMs Benjamin Berg
2024-10-16  2:34   ` Nathan Chancellor
2024-10-16  8:19     ` Berg, Benjamin
2024-10-17  7:17   ` David Gow
2024-10-17  8:18     ` Johannes Berg
2024-10-17 12:05       ` Benjamin Berg
2024-10-17 23:17         ` David Gow
2024-10-17  9:01     ` Benjamin Berg
2024-09-19 12:45 ` [PATCH v9 03/10] um: Set parent death signal for userspace process Benjamin Berg
2024-09-19 12:45 ` [PATCH v9 04/10] um: Set parent death signal for winch thread/process Benjamin Berg
2024-09-19 12:45 ` [PATCH v9 05/10] um: Add compile time assert that stub fits on a page Benjamin Berg
2024-09-19 12:45 ` [PATCH v9 06/10] um: Calculate stub data address relative to stub code Benjamin Berg
2024-09-19 12:45 ` [PATCH v9 07/10] um: Limit TASK_SIZE to the addressable range Benjamin Berg
2024-09-19 12:45 ` [PATCH v9 08/10] um: Discover host_task_size from envp Benjamin Berg
2024-09-19 12:45 ` [PATCH v9 09/10] um: clear all memory in new userspace processes Benjamin Berg
2024-09-19 12:45 ` [PATCH v9 10/10] um: Switch to 4 level page tables on 64 bit Benjamin Berg

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=20240919124511.282088-1-benjamin@sipsolutions.net \
    --to=benjamin@sipsolutions.net \
    --cc=benjamin.berg@intel.com \
    --cc=linux-um@lists.infradead.org \
    /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