1d2a70789SRichard Lowe#! /usr/bin/ksh
2d2a70789SRichard Lowe#
3d2a70789SRichard Lowe#
4d2a70789SRichard Lowe# This file and its contents are supplied under the terms of the
5d2a70789SRichard Lowe# Common Development and Distribution License ("CDDL"), version 1.0.
6d2a70789SRichard Lowe# You may only use this file in accordance with the terms of version
7d2a70789SRichard Lowe# 1.0 of the CDDL.
8d2a70789SRichard Lowe#
9d2a70789SRichard Lowe# A full copy of the text of the CDDL should have accompanied this
10d2a70789SRichard Lowe# source.  A copy of the CDDL is also available via the Internet at
11d2a70789SRichard Lowe# http://www.illumos.org/license/CDDL.
12d2a70789SRichard Lowe#
13d2a70789SRichard Lowe
14d2a70789SRichard Lowe#
15d2a70789SRichard Lowe# Copyright 2015, Richard Lowe.
16fdfb6e57SJohn Levon# Copyright 2019 Joyent, Inc.
17d2a70789SRichard Lowe#
18d2a70789SRichard Lowe
19d2a70789SRichard Lowemkdir /tmp/secflags-test.$$
20d2a70789SRichard Lowecd /tmp/secflags-test.$$
21d2a70789SRichard Lowe
22d2a70789SRichard Lowe/usr/bin/psecflags -s aslr -e sleep 100000 &
23d2a70789SRichard Lowepid=$!
24*e5ace296SJohn Levon# Make sure we generate a kernel core we can find
25*e5ace296SJohn Levoncoreadm -p core $pid
26*e5ace296SJohn Levonenabled=$(/usr/bin/svcprop -p config_params/process_enabled coreadm)
27*e5ace296SJohn Levoncoreadm_restore=""
28*e5ace296SJohn Levonif [[ "$enabled" = "false" ]]; then
29*e5ace296SJohn Levon    coreadm_restore="/usr/bin/coreadm -d process"
30*e5ace296SJohn Levon    coreadm -e process
31*e5ace296SJohn Levonfi
32d2a70789SRichard Lowe
33d2a70789SRichard Lowecleanup() {
34d2a70789SRichard Lowe    kill $pid >/dev/null 2>&1
35d2a70789SRichard Lowe    cd /
36d2a70789SRichard Lowe    rm -fr /tmp/secflags-test.$$
37*e5ace296SJohn Levon
38*e5ace296SJohn Levon    $coreadm_restore
39d2a70789SRichard Lowe}
40d2a70789SRichard Lowe
41d2a70789SRichard Lowetrap cleanup EXIT
42d2a70789SRichard Lowe
43fdfb6e57SJohn Levon# We need to wait for sleep to get exec()ed
44fdfb6e57SJohn Levonsleep 1
45fdfb6e57SJohn Levon
46d2a70789SRichard Lowe## gcore-produced core
47d2a70789SRichard Lowegcore $pid >/dev/null
48d2a70789SRichard Lowe
49d2a70789SRichard Lowecat > gcore-expected.$$ <<EOF
50d2a70789SRichard Lowe    namesz: 0x5
51d2a70789SRichard Lowe    descsz: 0x28
52d2a70789SRichard Lowe    type:   [ NT_SECFLAGS ]
53d2a70789SRichard Lowe    name:
54d2a70789SRichard Lowe        CORE\0
55d2a70789SRichard Lowe    desc: (prsecflags_t)
56d2a70789SRichard Lowe        pr_version:    1
57d2a70789SRichard Lowe        pr_effective:  [ ASLR ]
58d2a70789SRichard Lowe        pr_inherit:    [ ASLR ]
59d2a70789SRichard Lowe        pr_lower:      0
60d2a70789SRichard Lowe        pr_upper:      [ ASLR FORBIDNULLMAP NOEXECSTACK ]
61d2a70789SRichard LoweEOF
62d2a70789SRichard Lowe
63d2a70789SRichard Lowe/usr/bin/elfdump -n core.${pid} | grep -B5 -A5 prsecflags_t > gcore-output.$$
64d2a70789SRichard Lowe
65d2a70789SRichard Loweif ! diff -u gcore-expected.$$ gcore-output.$$; then
66*e5ace296SJohn Levon    $coreadm_restore
67d2a70789SRichard Lowe    exit 1;
68d2a70789SRichard Lowefi
69d2a70789SRichard Lowe
70d2a70789SRichard Lowe## kernel-produced core
71d2a70789SRichard Lowekill -SEGV $pid
72d2a70789SRichard Lowewait $pid >/dev/null 2>&1
73*e5ace296SJohn Levon$coreadm_restore
74d2a70789SRichard Lowe
75d2a70789SRichard Lowecat > core-expected.$$ <<EOF
76d2a70789SRichard Lowe    namesz: 0x5
77d2a70789SRichard Lowe    descsz: 0x28
78d2a70789SRichard Lowe    type:   [ NT_SECFLAGS ]
79d2a70789SRichard Lowe    name:
80d2a70789SRichard Lowe        CORE\0
81d2a70789SRichard Lowe    desc: (prsecflags_t)
82d2a70789SRichard Lowe        pr_version:    1
83d2a70789SRichard Lowe        pr_effective:  [ ASLR ]
84d2a70789SRichard Lowe        pr_inherit:    [ ASLR ]
85d2a70789SRichard Lowe        pr_lower:      0
86d2a70789SRichard Lowe        pr_upper:      [ ASLR FORBIDNULLMAP NOEXECSTACK ]
87d2a70789SRichard LoweEOF
88d2a70789SRichard Lowe
89d2a70789SRichard Lowe/usr/bin/elfdump -n core | grep -B5 -A5 prsecflags_t > core-output.$$
90d2a70789SRichard Lowe
91d2a70789SRichard Loweif ! diff -u core-expected.$$ core-output.$$; then
92d2a70789SRichard Lowe    exit 1;
93d2a70789SRichard Lowefi
94d2a70789SRichard Lowe
95d2a70789SRichard Loweexit 0
96