Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Jul 2019 12:48:52 +0000 (UTC)
From:      Tijl Coosemans <tijl@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r350279 - stable/11/sys/compat/linux
Message-ID:  <201907241248.x6OCmqgN070509@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tijl
Date: Wed Jul 24 12:48:51 2019
New Revision: 350279
URL: https://svnweb.freebsd.org/changeset/base/350279

Log:
  MFC r349880:
  
  Let linuxulator mprotect mask unsupported bits before calling kern_mprotect.
  
  After r349240 kern_mprotect returns EINVAL for unsupported bits in the prot
  argument.  Linux rtld uses PROT_GROWSDOWN and PROT_GROWS_UP when marking the
  stack executable.  Mask these bits like kern_mprotect used to do.  For other
  unsupported bits EINVAL is returned like Linux does.
  
  Reviewed by:    trasz, brooks

Modified:
  stable/11/sys/compat/linux/linux_mmap.c
  stable/11/sys/compat/linux/linux_mmap.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/compat/linux/linux_mmap.c
==============================================================================
--- stable/11/sys/compat/linux/linux_mmap.c	Wed Jul 24 12:46:55 2019	(r350278)
+++ stable/11/sys/compat/linux/linux_mmap.c	Wed Jul 24 12:48:51 2019	(r350279)
@@ -229,6 +229,11 @@ int
 linux_mprotect_common(struct thread *td, uintptr_t addr, size_t len, int prot)
 {
 
+	/* XXX Ignore PROT_GROWSDOWN and PROT_GROWSUP for now. */
+	prot &= ~(LINUX_PROT_GROWSDOWN | LINUX_PROT_GROWSUP);
+	if ((prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC)) != 0)
+		return (EINVAL);
+
 #if defined(__amd64__)
 	linux_fixup_prot(td, &prot);
 #endif

Modified: stable/11/sys/compat/linux/linux_mmap.h
==============================================================================
--- stable/11/sys/compat/linux/linux_mmap.h	Wed Jul 24 12:46:55 2019	(r350278)
+++ stable/11/sys/compat/linux/linux_mmap.h	Wed Jul 24 12:48:51 2019	(r350279)
@@ -41,6 +41,8 @@
 #define	LINUX_MAP_ANON		0x0020
 #define	LINUX_MAP_GROWSDOWN	0x0100
 
+#define	LINUX_PROT_GROWSDOWN	0x01000000
+#define	LINUX_PROT_GROWSUP	0x02000000
 
 int linux_mmap_common(struct thread *, uintptr_t, size_t, int, int,
 			int, off_t);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201907241248.x6OCmqgN070509>