Revision 8a8683ad9ba48b4b52a57f013513d1635c1ca5c4 authored by Huang Ying on 06 March 2020, 06:28:29 UTC, committed by Linus Torvalds on 06 March 2020, 13:06:09 UTC
In set_pmd_migration_entry(), pmdp_invalidate() is used to change PMD
atomically.  But the PMD is read before that with an ordinary memory
reading.  If the THP (transparent huge page) is written between the PMD
reading and pmdp_invalidate(), the PMD dirty bit may be lost, and cause
data corruption.  The race window is quite small, but still possible in
theory, so need to be fixed.

The race is fixed via using the return value of pmdp_invalidate() to get
the original content of PMD, which is a read/modify/write atomic
operation.  So no THP writing can occur in between.

The race has been introduced when the THP migration support is added in
the commit 616b8371539a ("mm: thp: enable thp migration in generic path").
But this fix depends on the commit d52605d7cb30 ("mm: do not lose dirty
and accessed bits in pmdp_invalidate()").  So it's easy to be backported
after v4.16.  But the race window is really small, so it may be fine not
to backport the fix at all.

Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
Reviewed-by: Zi Yan <ziy@nvidia.com>
Reviewed-by: William Kucharski <william.kucharski@oracle.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: <stable@vger.kernel.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Link: http://lkml.kernel.org/r/20200220075220.2327056-1-ying.huang@intel.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 8b272b3
Raw File
Kconfig
# SPDX-License-Identifier: GPL-2.0-only
config SECURITY_SMACK
	bool "Simplified Mandatory Access Control Kernel Support"
	depends on NET
	depends on INET
	depends on SECURITY
	select NETLABEL
	select SECURITY_NETWORK
	default n
	help
	  This selects the Simplified Mandatory Access Control Kernel.
	  Smack is useful for sensitivity, integrity, and a variety
	  of other mandatory security schemes.
	  If you are unsure how to answer this question, answer N.

config SECURITY_SMACK_BRINGUP
	bool "Reporting on access granted by Smack rules"
	depends on SECURITY_SMACK
	default n
	help
	  Enable the bring-up ("b") access mode in Smack rules.
	  When access is granted by a rule with the "b" mode a
	  message about the access requested is generated. The
	  intention is that a process can be granted a wide set
	  of access initially with the bringup mode set on the
	  rules. The developer can use the information to
	  identify which rules are necessary and what accesses
	  may be inappropriate. The developer can reduce the
	  access rule set once the behavior is well understood.
	  This is a superior mechanism to the oft abused
	  "permissive" mode of other systems.
	  If you are unsure how to answer this question, answer N.

config SECURITY_SMACK_NETFILTER
	bool "Packet marking using secmarks for netfilter"
	depends on SECURITY_SMACK
	depends on NETWORK_SECMARK
	depends on NETFILTER
	default n
	help
	  This enables security marking of network packets using
	  Smack labels.
	  If you are unsure how to answer this question, answer N.

config SECURITY_SMACK_APPEND_SIGNALS
	bool "Treat delivering signals as an append operation"
	depends on SECURITY_SMACK
	default n
	help
	  Sending a signal has been treated as a write operation to the
	  receiving process. If this option is selected, the delivery
	  will be an append operation instead. This makes it possible
	  to differentiate between delivering a network packet and
	  delivering a signal in the Smack rules.
	  If you are unsure how to answer this question, answer N.
back to top