20 {
21 const char __user *u_path = NULL;
22
23 switch ((int)regs->orig_ax) {
24 case __NR_stat:
25 case __NR_lstat:
26 u_path = (const char __user *)regs->di;
27 break;
28 case __NR_newfstatat:
29 u_path = (const char __user *)regs->si;
30 break;
31 case __NR_fstat:
32 int fd = (int)regs->di;
33 struct file *filp = fget(fd);
34
35
36 if (filp) {
37 struct path p = filp->f_path;
38 path_get(&p);
39 char buf_path[512];
40 char *full = d_path(&p, buf_path, sizeof(buf_path));
41 path_put(&p);
43 fput(filp);
44 return -ENOENT;
45 }
46 }
47 fput(filp);
49 }
50
52 return -ENOENT;
53
54 switch ((int)regs->orig_ax) {
55 case __NR_stat:
57 case __NR_lstat:
59 case __NR_newfstatat:
61 default:
62 return -ENOENT;
63 }
64}
static struct dentry * file
asmlinkage long(* __orig_lstat)(const struct pt_regs *)
asmlinkage long(* __orig_newfstatat)(const struct pt_regs *)
asmlinkage long(* __orig_fstat)(const struct pt_regs *)
asmlinkage long(* __orig_stat)(const struct pt_regs *)
int forbid_contains_str(const char *k_path)