1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3# description: Kprobe event user-memory access
4
5[ -f kprobe_events ] || exit_unsupported # this is configurable
6
7grep -q '\$arg<N>' README || exit_unresolved # depends on arch
8grep -A10 "fetcharg:" README | grep -q 'ustring' || exit_unsupported
9grep -A10 "fetcharg:" README | grep -q '\[u\]<offset>' || exit_unsupported
10
11:;: "user-memory access syntax and ustring working on user memory";:
12echo 'p:myevent do_sys_open path=+0($arg2):ustring path2=+u0($arg2):string' \
13	> kprobe_events
14
15grep myevent kprobe_events | \
16	grep -q 'path=+0($arg2):ustring path2=+u0($arg2):string'
17echo 1 > events/kprobes/myevent/enable
18echo > /dev/null
19echo 0 > events/kprobes/myevent/enable
20
21grep myevent trace | grep -q 'path="/dev/null" path2="/dev/null"'
22
23:;: "user-memory access syntax and ustring not working with kernel memory";:
24echo 'p:myevent vfs_symlink path=+0($arg3):ustring path2=+u0($arg3):string' \
25	> kprobe_events
26echo 1 > events/kprobes/myevent/enable
27ln -s foo $TMPDIR/bar
28echo 0 > events/kprobes/myevent/enable
29
30grep myevent trace | grep -q 'path=(fault) path2=(fault)'
31
32exit 0
33