[tor-commits] [sandboxed-tor-browser/master] Fix e10s Web Content crash on systems with grsec kernels.

yawning at torproject.org yawning at torproject.org
Wed Apr 12 22:22:06 UTC 2017


commit a9a3ab621ed72fb1c836d9e224be7b42f4445b90
Author: Yawning Angel <yawning at schwanenlied.me>
Date:   Wed Apr 12 22:19:26 2017 +0000

    Fix e10s Web Content crash on systems with grsec kernels.
    
    The `plugin-container` binary needs to be able to make RWX mappings,
    or Web Content workers get killed by the kernel.
---
 ChangeLog                                              |  1 +
 .../internal/sandbox/application.go                    | 18 +++++++++++++-----
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 3e55844..1007ae3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,5 @@
 Changes in version 0.0.5 - UNRELEASED:
+ * Fix e10s Web Content crash on systems with grsec kernels.
 
 Changes in version 0.0.4 - 2017-04-12:
  * Bug 21928: Force a reinstall if an existing hardened bundle is present.
diff --git a/src/cmd/sandboxed-tor-browser/internal/sandbox/application.go b/src/cmd/sandboxed-tor-browser/internal/sandbox/application.go
index 427c3b1..bf2914a 100644
--- a/src/cmd/sandboxed-tor-browser/internal/sandbox/application.go
+++ b/src/cmd/sandboxed-tor-browser/internal/sandbox/application.go
@@ -190,8 +190,15 @@ func RunTorBrowser(cfg *config.Config, manif *config.Manifest, tor *tor.Tor) (pr
 	// Tor Browser currently is incompatible with PaX MPROTECT, apply the
 	// override if needed.
 	realFirefoxPath := filepath.Join(realBrowserHome, "firefox")
-	if err = applyPaXAttributes(manif, realFirefoxPath); err != nil {
-		return nil, err
+	needsPaXPaths := []string{
+		realFirefoxPath,
+		filepath.Join(realBrowserHome, "plugin-container"),
+	}
+	for _, p := range needsPaXPaths {
+		err := applyPaXAttributes(manif, p)
+		if err != nil {
+			log.Printf("sandbox: Failed to apply PaX attributes to `%v`: %v", p, err)
+		}
 	}
 
 	extraLdLibraryPath := ""
@@ -329,11 +336,12 @@ func applyPaXAttributes(manif *config.Manifest, f string) error {
 	const paxAttr = "user.pax.flags"
 
 	sz, _ := syscall.Getxattr(f, paxAttr, nil)
+	_, n := filepath.Split(f)
 
 	// Strip off the attribute if this is a non-grsec kernel.
 	if !IsGrsecKernel() {
 		if sz > 0 {
-			log.Printf("sandbox: Removing Tor Browser PaX attributes.")
+			log.Printf("sandbox: Removing PaX attributes: %v", n)
 			syscall.Removexattr(f, paxAttr)
 		}
 		return nil
@@ -346,12 +354,12 @@ func applyPaXAttributes(manif *config.Manifest, f string) error {
 			return err
 		}
 		if bytes.Contains(dest, paxOverride) {
-			log.Printf("sandbox: Tor Browser PaX attributes already set.")
+			log.Printf("sandbox: PaX attributes already set: %v", n)
 			return nil
 		}
 	}
 
-	log.Printf("sandbox: Applying Tor Browser PaX attributes.")
+	log.Printf("sandbox: Applying PaX attributes: %v", n)
 	return syscall.Setxattr(f, paxAttr, paxOverride, 0)
 }
 





More information about the tor-commits mailing list