Explorar o código

Fix signal regression.

Don Porter %!s(int64=8) %!d(string=hai) anos
pai
achega
8084799e35
Modificáronse 1 ficheiros con 10 adicións e 3 borrados
  1. 10 3
      LibOS/shim/src/bookkeep/shim_signal.c

+ 10 - 3
LibOS/shim/src/bookkeep/shim_signal.c

@@ -263,9 +263,16 @@ internal:
             goto internal;
         }
         if (vma->file) {
-            /* XXX: need more sophisticated judgement */
-            signo = SIGBUS;
-            code = BUS_ADRERR;
+            /* DEP 3/3/17: If the page fault gives a write error, and
+             * the VMA is read-only, return SIGSEGV+SEGV_ACCERR */
+            if ((context->err & 4) && !(vma->flags & PROT_WRITE)) {
+                    signo = SIGSEGV;
+                    code = SEGV_ACCERR;
+            } else {
+                /* XXX: need more sophisticated judgement */
+                signo = SIGBUS;
+                code = BUS_ADRERR;
+            }
         } else {
             code = SEGV_ACCERR;
         }