Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
arm64: mte: Fix/clarify the PG_mte_tagged semantics
commit e059853 upstream. Currently the PG_mte_tagged page flag mostly means the page contains valid tags and it should be set after the tags have been cleared or restored. However, in mte_sync_tags() it is set before setting the tags to avoid, in theory, a race with concurrent mprotect(PROT_MTE) for shared pages. However, a concurrent mprotect(PROT_MTE) with a copy on write in another thread can cause the new page to have stale tags. Similarly, tag reading via ptrace() can read stale tags if the PG_mte_tagged flag is set before actually clearing/restoring the tags. Fix the PG_mte_tagged semantics so that it is only set after the tags have been cleared or restored. This is safe for swap restoring into a MAP_SHARED or CoW page since the core code takes the page lock. Add two functions to test and set the PG_mte_tagged flag with acquire and release semantics. The downside is that concurrent mprotect(PROT_MTE) on a MAP_SHARED page may cause tag loss. This is already the case for KVM guests if a VMM changes the page protection while the guest triggers a user_mem_abort(). Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> [pcc@google.com: fix build with CONFIG_ARM64_MTE disabled] Signed-off-by: Peter Collingbourne <pcc@google.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: Steven Price <steven.price@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Marc Zyngier <maz@kernel.org> Cc: Peter Collingbourne <pcc@google.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20221104011041.290951-3-pcc@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
- linux-6.1.100-mpi
- linux-6.1.101-mpi
- linux-6.1.102-mpi
- linux-6.1.103-mpi
- linux-6.1.104-mpi
- linux-6.1.105-mpi
- linux-6.1.106-mpi
- linux-6.1.107-mpi
- linux-6.1.108-mpi
- linux-6.1.109-mpi
- linux-6.1.110-mpi
- linux-6.1.111-mpi
- linux-6.1.112-mpi
- linux-6.1.113-mpi
- linux-6.1.114-mpi
- linux-6.1.115-mpi
- linux-6.1.116-mpi
- linux-6.1.117-mpi
- linux-6.1.118-mpi
- linux-6.1.119-mpi
- linux-6.1.120-mpi
- linux-6.1.121-mpi
- linux-6.1.122-mpi
- linux-6.1.123-mpi
- linux-6.1.124-mpi
- linux-6.1.125-mpi
- linux-6.1.126-mpi
- linux-6.1.127-mpi
- linux-6.1.128-mpi
- linux-6.1.129-mpi
- linux-6.1.130-mpi
- linux-6.1.131-mpi
- linux-6.1.132-mpi
- linux-6.1.133-mpi
- linux-6.1.134-mpi
- linux-6.1.135-mpi
- linux-6.1.136-mpi
- linux-6.1.137-mpi
- linux-6.1.138-mpi
- linux-6.1.139-mpi
- linux-6.1.140-mpi
- linux-6.1.141-mpi
- linux-6.1.142-mpi
- linux-6.1.143-mpi
- linux-6.1.144-mpi
- linux-6.1.145-mpi
- linux-6.1.146-mpi
- linux-6.1.147-mpi
- linux-6.1.18-mpi
- linux-6.1.19-mpi
- linux-6.1.20-mpi
- linux-6.1.21-mpi
- linux-6.1.22-mpi
- linux-6.1.23-mpi
- linux-6.1.24-mpi
- linux-6.1.25-mpi
- linux-6.1.26-mpi
- linux-6.1.27-mpi
- linux-6.1.28-mpi
- linux-6.1.29-mpi
- linux-6.1.30-mpi
- linux-6.1.31-mpi
- linux-6.1.32-mpi
- linux-6.1.33-mpi
- linux-6.1.34-mpi
- linux-6.1.35-mpi
- linux-6.1.36-mpi
- linux-6.1.37-mpi
- linux-6.1.38-mpi
- linux-6.1.39-mpi
- linux-6.1.40-mpi
- linux-6.1.41-mpi
- linux-6.1.42-mpi
- linux-6.1.43-mpi
- linux-6.1.44-mpi
- linux-6.1.45-mpi
- linux-6.1.46-mpi
- linux-6.1.47-mpi
- linux-6.1.48-mpi
- linux-6.1.49-mpi
- linux-6.1.50-mpi
- linux-6.1.51-mpi
- linux-6.1.52-mpi
- linux-6.1.53-mpi
- linux-6.1.54-mpi
- linux-6.1.55-mpi
- linux-6.1.56-mpi
- linux-6.1.57-mpi
- linux-6.1.58-mpi
- linux-6.1.59-mpi
- linux-6.1.60-mpi
- linux-6.1.61-mpi
- linux-6.1.62-mpi
- linux-6.1.63-mpi
- linux-6.1.64-mpi
- linux-6.1.65-mpi
- linux-6.1.66-mpi
- linux-6.1.67-mpi
- linux-6.1.68-mpi
- linux-6.1.69-mpi
- linux-6.1.70-mpi
- linux-6.1.71-mpi
- linux-6.1.72-mpi
- linux-6.1.73-mpi
- linux-6.1.74-mpi
- linux-6.1.75-mpi
- linux-6.1.76-mpi
- linux-6.1.77-mpi
- linux-6.1.78-mpi
- linux-6.1.79-mpi
- linux-6.1.80-mpi
- linux-6.1.81-mpi
- linux-6.1.82-mpi
- linux-6.1.83-mpi
- linux-6.1.84-mpi
- linux-6.1.85-mpi
- linux-6.1.86-mpi
- linux-6.1.87-mpi
- linux-6.1.88-mpi
- linux-6.1.89-mpi
- linux-6.1.90-mpi
- linux-6.1.91-mpi
- linux-6.1.92-mpi
- linux-6.1.93-mpi
- linux-6.1.94-mpi
- linux-6.1.95-mpi
- linux-6.1.96-mpi
- linux-6.1.97-mpi
- linux-6.1.98-mpi
- linux-6.1.99-mpi
- test-2022-09-13