#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# description: Test tracefs GID mount option
# requires: "[gid=<gid>]":README

fail() {
	local msg="$1"

	echo "FAILED: $msg"
	exit_fail
}

find_alternate_gid() {
	local original_gid="$1"
	tac /etc/group | grep -v ":$original_gid:" | head -1 | cut -d: -f3
}

remount_tracefs_with_options() {
	local mount_point="$1"
	local options="$2"

	mount -t tracefs -o "remount,$options" nodev "$mount_point"

	setup
}

unmount_tracefs() {
	local mount_point="$1"

	# Need to make sure the mount isn't busy so that we can umount it
	(cd $mount_point; finish_system;)

	cleanup
}

create_instance() {
	local mount_point="$1"
	local instance="$mount_point/instances/$(mktemp -u test-XXXXXX)"

	mkdir "$instance"
	echo "$instance"
}

remove_instance() {
	local instance="$1"

	rmdir "$instance"
}

check_gid() {
	local mount_point="$1"
	local expected_gid="$2"

	echo "Checking permission group ..."

	cd "$mount_point"

	for file in "." "events" "events/sched" "events/sched/sched_switch" "events/sched/sched_switch/enable"; do
		local gid=`stat -c "%g" $file`
		if [ "$gid" -ne "$expected_gid" ]; then
			cd - # Return to the previous working directory (tracefs root)
			fail "$(realpath $file): Expected group $expected_gid; Got group $gid"
		fi
	done

	cd - # Return to the previous working directory (tracefs root)
}

test_gid_mount_option() {
	local mount_point=$(get_mount_point)
	local mount_options=$(get_mnt_options "$mount_point")
	local original_group=$(stat -c "%g" .)
	local other_group=$(find_alternate_gid "$original_group")

	# Set up mount options with new GID for testing
	local new_options=`echo "$mount_options" | sed -e "s/gid=[0-9]*/gid=$other_group/"`
	if [ "$new_options" = "$mount_options" ]; then
		new_options="$mount_options,gid=$other_group"
		mount_options="$mount_options,gid=$original_group"
	fi

	# Unmount existing tracefs instance and mount with new GID
	unmount_tracefs "$mount_point"
	remount_tracefs_with_options "$mount_point" "$new_options"

	check_gid "$mount_point" "$other_group"

	# Check that files created after the mount inherit the GID
	local instance=$(create_instance "$mount_point")
	check_gid "$instance" "$other_group"
	remove_instance "$instance"

	# Unmount and remount with the original GID
	unmount_tracefs "$mount_point"
	remount_tracefs_with_options "$mount_point" "$mount_options"
	check_gid "$mount_point" "$original_group"
}

test_gid_mount_option

exit 0
