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