aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sys.c')
-rw-r--r--kernel/sys.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/kernel/sys.c b/kernel/sys.c
index 255475d163e0..f6afe07d6c0b 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -1546,24 +1546,37 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
1546 if (arg4 | arg5) 1546 if (arg4 | arg5)
1547 return -EINVAL; 1547 return -EINVAL;
1548 switch (arg2) { 1548 switch (arg2) {
1549 case 0: 1549 case PR_MCE_KILL_CLEAR:
1550 if (arg3 != 0) 1550 if (arg3 != 0)
1551 return -EINVAL; 1551 return -EINVAL;
1552 current->flags &= ~PF_MCE_PROCESS; 1552 current->flags &= ~PF_MCE_PROCESS;
1553 break; 1553 break;
1554 case 1: 1554 case PR_MCE_KILL_SET:
1555 current->flags |= PF_MCE_PROCESS; 1555 current->flags |= PF_MCE_PROCESS;
1556 if (arg3 != 0) 1556 if (arg3 == PR_MCE_KILL_EARLY)
1557 current->flags |= PF_MCE_EARLY; 1557 current->flags |= PF_MCE_EARLY;
1558 else 1558 else if (arg3 == PR_MCE_KILL_LATE)
1559 current->flags &= ~PF_MCE_EARLY; 1559 current->flags &= ~PF_MCE_EARLY;
1560 else if (arg3 == PR_MCE_KILL_DEFAULT)
1561 current->flags &=
1562 ~(PF_MCE_EARLY|PF_MCE_PROCESS);
1563 else
1564 return -EINVAL;
1560 break; 1565 break;
1561 default: 1566 default:
1562 return -EINVAL; 1567 return -EINVAL;
1563 } 1568 }
1564 error = 0; 1569 error = 0;
1565 break; 1570 break;
1566 1571 case PR_MCE_KILL_GET:
1572 if (arg2 | arg3 | arg4 | arg5)
1573 return -EINVAL;
1574 if (current->flags & PF_MCE_PROCESS)
1575 error = (current->flags & PF_MCE_EARLY) ?
1576 PR_MCE_KILL_EARLY : PR_MCE_KILL_LATE;
1577 else
1578 error = PR_MCE_KILL_DEFAULT;
1579 break;
1567 default: 1580 default:
1568 error = -EINVAL; 1581 error = -EINVAL;
1569 break; 1582 break;