Browse Source

Fix signal regression.

Don Porter 7 years ago
parent
commit
8084799e35
1 changed files with 10 additions and 3 deletions
  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;
         }