aboutsummaryrefslogtreecommitdiffstats
path: root/tools/syz-declextract/testdata
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2025-04-08 14:11:26 +0200
committerDmitry Vyukov <dvyukov@google.com>2025-04-09 10:27:41 +0000
commit1aed810c86069f8b9b117ccccf083e98bf0da74c (patch)
treee6841902edef7496b3813eea3e31c7c599625c62 /tools/syz-declextract/testdata
parent6dfb898e263c6fdb948f1578b0dada1e15b6764e (diff)
tools/syz-declextract: extend test data
Add few interesting cases for scope analysis. Move functions related to resource to the header file, they must be visible in every file to work.
Diffstat (limited to 'tools/syz-declextract/testdata')
-rw-r--r--tools/syz-declextract/testdata/file_operations.c.json32
-rw-r--r--tools/syz-declextract/testdata/functions.c12
-rw-r--r--tools/syz-declextract/testdata/functions.c.json9
-rw-r--r--tools/syz-declextract/testdata/include/fs.h12
-rw-r--r--tools/syz-declextract/testdata/scopes.c15
-rw-r--r--tools/syz-declextract/testdata/scopes.c.info2
-rw-r--r--tools/syz-declextract/testdata/scopes.c.json174
-rw-r--r--tools/syz-declextract/testdata/scopes.c.txt22
8 files changed, 250 insertions, 28 deletions
diff --git a/tools/syz-declextract/testdata/file_operations.c.json b/tools/syz-declextract/testdata/file_operations.c.json
index e7dfd31f6..dd0415fd2 100644
--- a/tools/syz-declextract/testdata/file_operations.c.json
+++ b/tools/syz-declextract/testdata/file_operations.c.json
@@ -1,6 +1,27 @@
{
"functions": [
{
+ "name": "__fget_light",
+ "file": "include/fs.h",
+ "is_static": true,
+ "scopes": [
+ {
+ "arg": -1
+ }
+ ]
+ },
+ {
+ "name": "alloc_fd",
+ "file": "include/fs.h",
+ "is_static": true,
+ "scopes": [
+ {
+ "arg": -1,
+ "loc": 1
+ }
+ ]
+ },
+ {
"name": "foo_ioctl",
"file": "file_operations.c",
"is_static": true,
@@ -115,6 +136,17 @@
]
},
{
+ "name": "from_kuid",
+ "file": "include/fs.h",
+ "is_static": true,
+ "scopes": [
+ {
+ "arg": -1,
+ "loc": 1
+ }
+ ]
+ },
+ {
"name": "proc_ioctl",
"file": "file_operations.c",
"is_static": true,
diff --git a/tools/syz-declextract/testdata/functions.c b/tools/syz-declextract/testdata/functions.c
index fd06fb455..30e544702 100644
--- a/tools/syz-declextract/testdata/functions.c
+++ b/tools/syz-declextract/testdata/functions.c
@@ -1,6 +1,7 @@
// Copyright 2024 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+#include "include/fs.h"
#include "include/types.h"
#include "include/syscall.h"
@@ -11,17 +12,6 @@ static void func_bar() {
func_foo();
}
-int alloc_fd() {
- return 1;
-}
-
-void __fget_light(int fd) {
-}
-
-int from_kuid() {
- return 1;
-}
-
int func_baz(int f) {
func_foo();
if (f)
diff --git a/tools/syz-declextract/testdata/functions.c.json b/tools/syz-declextract/testdata/functions.c.json
index ecb95affc..6d636233e 100644
--- a/tools/syz-declextract/testdata/functions.c.json
+++ b/tools/syz-declextract/testdata/functions.c.json
@@ -44,7 +44,8 @@
},
{
"name": "__fget_light",
- "file": "functions.c",
+ "file": "include/fs.h",
+ "is_static": true,
"scopes": [
{
"arg": -1
@@ -53,7 +54,8 @@
},
{
"name": "alloc_fd",
- "file": "functions.c",
+ "file": "include/fs.h",
+ "is_static": true,
"scopes": [
{
"arg": -1,
@@ -84,7 +86,8 @@
},
{
"name": "from_kuid",
- "file": "functions.c",
+ "file": "include/fs.h",
+ "is_static": true,
"scopes": [
{
"arg": -1,
diff --git a/tools/syz-declextract/testdata/include/fs.h b/tools/syz-declextract/testdata/include/fs.h
index 33782d1ee..b4eba0bd7 100644
--- a/tools/syz-declextract/testdata/include/fs.h
+++ b/tools/syz-declextract/testdata/include/fs.h
@@ -11,7 +11,13 @@ struct file_operations {
void (*mmap)(void);
};
-int alloc_fd();
-void __fget_light(int fd);
-int from_kuid();
+static int alloc_fd() {
+ return 1;
+}
+static void __fget_light(int fd) {
+}
+
+static int from_kuid() {
+ return 1;
+}
diff --git a/tools/syz-declextract/testdata/scopes.c b/tools/syz-declextract/testdata/scopes.c
index 56c1638d1..d53ca391d 100644
--- a/tools/syz-declextract/testdata/scopes.c
+++ b/tools/syz-declextract/testdata/scopes.c
@@ -5,6 +5,17 @@
#include "include/syscall.h"
#include "include/uapi/file_operations.h"
+static int scopes_helper(long cmd, long aux) {
+ switch (cmd) {
+ case FOO_IOCTL7:
+ return alloc_fd();
+ case FOO_IOCTL8:
+ __fget_light(aux);
+ break;
+ }
+ return 0;
+}
+
SYSCALL_DEFINE1(scopes0, int x, long cmd, long aux) {
int tmp = 0;
__fget_light(aux);
@@ -19,6 +30,10 @@ SYSCALL_DEFINE1(scopes0, int x, long cmd, long aux) {
case FOO_IOCTL4 ... FOO_IOCTL4 + 2:
tmp++;
break;
+ case FOO_IOCTL7:
+ case FOO_IOCTL8:
+ tmp = scopes_helper(cmd, x);
+ break;
case 100 ... 102:
tmp++;
break;
diff --git a/tools/syz-declextract/testdata/scopes.c.info b/tools/syz-declextract/testdata/scopes.c.info
index f3a8f9cf3..8f18c7352 100644
--- a/tools/syz-declextract/testdata/scopes.c.info
+++ b/tools/syz-declextract/testdata/scopes.c.info
@@ -1 +1 @@
-SYSCALL scopes0 func:__do_sys_scopes0 loc:20 access:unknown manual_desc:false auto_desc:true file:scopes.c subsystem:kernel
+SYSCALL scopes0 func:__do_sys_scopes0 loc:32 access:unknown manual_desc:false auto_desc:true file:scopes.c subsystem:kernel
diff --git a/tools/syz-declextract/testdata/scopes.c.json b/tools/syz-declextract/testdata/scopes.c.json
index 2a497dbe1..ab03673b0 100644
--- a/tools/syz-declextract/testdata/scopes.c.json
+++ b/tools/syz-declextract/testdata/scopes.c.json
@@ -114,6 +114,59 @@
{
"arg": 1,
"values": [
+ "FOO_IOCTL7",
+ "FOO_IOCTL8"
+ ],
+ "loc": 4,
+ "calls": [
+ "scopes_helper"
+ ],
+ "facts": [
+ {
+ "src": {
+ "return": {
+ "func": "scopes_helper"
+ }
+ },
+ "dst": {
+ "local": {
+ "name": "tmp"
+ }
+ }
+ },
+ {
+ "src": {
+ "argument": {
+ "func": "__do_sys_scopes0",
+ "arg": 1
+ }
+ },
+ "dst": {
+ "argument": {
+ "func": "scopes_helper",
+ "arg": 0
+ }
+ }
+ },
+ {
+ "src": {
+ "argument": {
+ "func": "__do_sys_scopes0",
+ "arg": 0
+ }
+ },
+ "dst": {
+ "argument": {
+ "func": "scopes_helper",
+ "arg": 1
+ }
+ }
+ }
+ ]
+ },
+ {
+ "arg": 1,
+ "values": [
"100",
"101",
"102"
@@ -140,6 +193,99 @@
]
}
]
+ },
+ {
+ "name": "__fget_light",
+ "file": "include/fs.h",
+ "is_static": true,
+ "scopes": [
+ {
+ "arg": -1
+ }
+ ]
+ },
+ {
+ "name": "alloc_fd",
+ "file": "include/fs.h",
+ "is_static": true,
+ "scopes": [
+ {
+ "arg": -1,
+ "loc": 1
+ }
+ ]
+ },
+ {
+ "name": "from_kuid",
+ "file": "include/fs.h",
+ "is_static": true,
+ "scopes": [
+ {
+ "arg": -1,
+ "loc": 1
+ }
+ ]
+ },
+ {
+ "name": "scopes_helper",
+ "file": "scopes.c",
+ "is_static": true,
+ "scopes": [
+ {
+ "arg": -1,
+ "loc": 2
+ },
+ {
+ "arg": 0,
+ "values": [
+ "FOO_IOCTL7"
+ ],
+ "loc": 2,
+ "calls": [
+ "alloc_fd"
+ ],
+ "facts": [
+ {
+ "src": {
+ "return": {
+ "func": "alloc_fd"
+ }
+ },
+ "dst": {
+ "return": {
+ "func": "scopes_helper"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "arg": 0,
+ "values": [
+ "FOO_IOCTL8"
+ ],
+ "loc": 3,
+ "calls": [
+ "__fget_light"
+ ],
+ "facts": [
+ {
+ "src": {
+ "argument": {
+ "func": "scopes_helper",
+ "arg": 1
+ }
+ },
+ "dst": {
+ "argument": {
+ "func": "__fget_light",
+ "arg": 0
+ }
+ }
+ }
+ ]
+ }
+ ]
}
],
"consts": [
@@ -162,6 +308,16 @@
"name": "FOO_IOCTL4",
"filename": "include/uapi/file_operations.h",
"value": 1074291460
+ },
+ {
+ "name": "FOO_IOCTL7",
+ "filename": "include/uapi/file_operations.h",
+ "value": 25351
+ },
+ {
+ "name": "FOO_IOCTL8",
+ "filename": "include/uapi/file_operations.h",
+ "value": 25352
}
],
"structs": [
@@ -281,6 +437,24 @@
}
}
}
+ },
+ {
+ "name": "FOO_IOCTL7",
+ "type": {
+ "int": {
+ "byte_size": 1,
+ "is_const": true
+ }
+ }
+ },
+ {
+ "name": "FOO_IOCTL8",
+ "type": {
+ "int": {
+ "byte_size": 1,
+ "is_const": true
+ }
+ }
}
]
} \ No newline at end of file
diff --git a/tools/syz-declextract/testdata/scopes.c.txt b/tools/syz-declextract/testdata/scopes.c.txt
index 3a0c20709..e58d91f7b 100644
--- a/tools/syz-declextract/testdata/scopes.c.txt
+++ b/tools/syz-declextract/testdata/scopes.c.txt
@@ -6,13 +6,15 @@ type auto_todo int8
include <include/uapi/file_operations.h>
-scopes0$auto(x int32, cmd intptr, aux intptr)
-scopes0$auto_100(x int32, cmd const[100], aux intptr)
-scopes0$auto_101(x int32, cmd const[101], aux intptr)
-scopes0$auto_102(x int32, cmd const[102], aux intptr)
-scopes0$auto_1074291461(x int32, cmd const[1074291461], aux intptr)
-scopes0$auto_1074291462(x int32, cmd const[1074291462], aux intptr)
-scopes0$auto_FOO_IOCTL1(x int32, cmd const[FOO_IOCTL1], aux intptr)
-scopes0$auto_FOO_IOCTL2(x int32, cmd const[FOO_IOCTL2], aux intptr)
-scopes0$auto_FOO_IOCTL3(x int32, cmd const[FOO_IOCTL3], aux intptr)
-scopes0$auto_FOO_IOCTL4(x int32, cmd const[FOO_IOCTL4], aux intptr)
+scopes0$auto(x fd, cmd intptr, aux fd) fd
+scopes0$auto_100(x fd, cmd const[100], aux fd) fd
+scopes0$auto_101(x fd, cmd const[101], aux fd) fd
+scopes0$auto_102(x fd, cmd const[102], aux fd) fd
+scopes0$auto_1074291461(x fd, cmd const[1074291461], aux fd) fd
+scopes0$auto_1074291462(x fd, cmd const[1074291462], aux fd) fd
+scopes0$auto_FOO_IOCTL1(x fd, cmd const[FOO_IOCTL1], aux fd) fd
+scopes0$auto_FOO_IOCTL2(x fd, cmd const[FOO_IOCTL2], aux fd) fd
+scopes0$auto_FOO_IOCTL3(x fd, cmd const[FOO_IOCTL3], aux fd) fd
+scopes0$auto_FOO_IOCTL4(x fd, cmd const[FOO_IOCTL4], aux fd) fd
+scopes0$auto_FOO_IOCTL7(x fd, cmd const[FOO_IOCTL7], aux fd) fd
+scopes0$auto_FOO_IOCTL8(x fd, cmd const[FOO_IOCTL8], aux fd) fd