#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# description: Kprobe event parser error log check
# requires: kprobe_events error_log

check_error() { # command-with-error-pos-by-^
    ftrace_errlog_check 'trace_kprobe' "$1" 'kprobe_events'
}

if grep -q 'r\[maxactive\]' README; then
check_error 'p^100 vfs_read'		# MAXACT_NO_KPROBE
check_error 'r^1a111 vfs_read'		# BAD_MAXACT
check_error 'r^100000 vfs_read'		# MAXACT_TOO_BIG
fi

check_error 'p ^non_exist_func'		# BAD_PROBE_ADDR (enoent)
check_error 'p ^hoge-fuga'		# BAD_PROBE_ADDR (bad syntax)
check_error 'p ^hoge+1000-1000'		# BAD_PROBE_ADDR (bad syntax)
check_error 'r ^vfs_read+10'		# BAD_RETPROBE
check_error 'p:^/bar vfs_read'		# NO_GROUP_NAME
check_error 'p:^12345678901234567890123456789012345678901234567890123456789012345/bar vfs_read'	# GROUP_TOO_LONG

check_error 'p:^foo.1/bar vfs_read'	# BAD_GROUP_NAME
check_error 'p:foo/^ vfs_read'		# NO_EVENT_NAME
check_error 'p:foo/^12345678901234567890123456789012345678901234567890123456789012345 vfs_read'	# EVENT_TOO_LONG
check_error 'p:foo/^bar.1 vfs_read'	# BAD_EVENT_NAME

check_error 'p vfs_read ^$retval'	# RETVAL_ON_PROBE
check_error 'p vfs_read ^$stack10000'	# BAD_STACK_NUM

if grep -q '$arg<N>' README; then
check_error 'p vfs_read ^$arg10000'	# BAD_ARG_NUM
fi

check_error 'p vfs_read ^$none_var'	# BAD_VAR

check_error 'p vfs_read ^%none_reg'	# BAD_REG_NAME
check_error 'p vfs_read ^@12345678abcde'	# BAD_MEM_ADDR
check_error 'p vfs_read ^@+10'		# FILE_ON_KPROBE

grep -q "imm-value" README && \
check_error 'p vfs_read arg1=\^x'	# BAD_IMM
grep -q "imm-string" README && \
check_error 'p vfs_read arg1=\"abcd^'	# IMMSTR_NO_CLOSE

check_error 'p vfs_read ^+0@0)'		# DEREF_NEED_BRACE
check_error 'p vfs_read ^+0ab1(@0)'	# BAD_DEREF_OFFS
check_error 'p vfs_read +0(+0(@0^)'	# DEREF_OPEN_BRACE

if grep -A1 "fetcharg:" README | grep -q '\$comm' ; then
check_error 'p vfs_read +0(^$comm)'	# COMM_CANT_DEREF
fi

check_error 'p vfs_read ^&1'		# BAD_FETCH_ARG


# We've introduced this limitation with array support
if grep -q ' <type>\\\[<array-size>\\\]' README; then
check_error 'p vfs_read +0(^+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(+0(@0))))))))))))))'	# TOO_MANY_OPS?
check_error 'p vfs_read +0(@11):u8[10^'		# ARRAY_NO_CLOSE
check_error 'p vfs_read +0(@11):u8[10]^a'	# BAD_ARRAY_SUFFIX
check_error 'p vfs_read +0(@11):u8[^10a]'	# BAD_ARRAY_NUM
check_error 'p vfs_read +0(@11):u8[^256]'	# ARRAY_TOO_BIG
fi

check_error 'p vfs_read @11:^unknown_type'	# BAD_TYPE
check_error 'p vfs_read $stack0:^string'	# BAD_STRING
check_error 'p vfs_read @11:^b10@a/16'		# BAD_BITFIELD

check_error 'p vfs_read ^arg123456789012345678901234567890=@11'	# ARG_NAME_TOO_LOG
check_error 'p vfs_read ^=@11'			# NO_ARG_NAME
check_error 'p vfs_read ^var.1=@11'		# BAD_ARG_NAME
check_error 'p vfs_read var1=@11 ^var1=@12'	# USED_ARG_NAME
check_error 'p vfs_read ^+1234567(+1234567(+1234567(+1234567(+1234567(+1234567(@1234))))))'	# ARG_TOO_LONG
check_error 'p vfs_read arg1=^'			# NO_ARG_BODY

# instruction boundary check is valid on x86 (at this moment)
case $(uname -m) in
  x86_64|i[3456]86)
    echo 'p vfs_read' > kprobe_events
    if grep -q FTRACE ../kprobes/list ; then
	check_error 'p ^vfs_read+3'		# BAD_INSN_BNDRY (only if function-tracer is enabled)
    fi
    ;;
esac

# multiprobe errors
if grep -q "Create/append/" README && grep -q "imm-value" README; then
echo "p:kprobes/testevent $FUNCTION_FORK" > kprobe_events
check_error '^r:kprobes/testevent do_exit'	# DIFF_PROBE_TYPE

# Explicitly use printf "%s" to not interpret \1
printf "%s" "p:kprobes/testevent $FUNCTION_FORK abcd=\\1" > kprobe_events
check_error "p:kprobes/testevent $FUNCTION_FORK ^bcd=\\1"	# DIFF_ARG_TYPE
check_error "p:kprobes/testevent $FUNCTION_FORK ^abcd=\\1:u8"	# DIFF_ARG_TYPE
check_error "p:kprobes/testevent $FUNCTION_FORK ^abcd=\\\"foo\"" # DIFF_ARG_TYPE
check_error "^p:kprobes/testevent $FUNCTION_FORK abcd=\\1"	# SAME_PROBE
fi

# %return suffix errors
if grep -q "place (kretprobe): .*%return.*" README; then
check_error 'p vfs_read^%hoge'		# BAD_ADDR_SUFFIX
check_error 'p ^vfs_read+10%return'	# BAD_RETPROBE
fi

exit 0
