diff options
author | James Morris <jmorris@namei.org> | 2009-02-05 19:01:45 -0500 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2009-02-05 19:01:45 -0500 |
commit | cb5629b10d64a8006622ce3a52bc887d91057d69 (patch) | |
tree | 7c06d8f30783115e3384721046258ce615b129c5 /include/linux/compiler-gcc.h | |
parent | 8920d5ad6ba74ae8ab020e90cc4d976980e68701 (diff) | |
parent | f01d1d546abb2f4028b5299092f529eefb01253a (diff) |
Merge branch 'master' into next
Conflicts:
fs/namei.c
Manually merged per:
diff --cc fs/namei.c
index 734f2b5,bbc15c2..0000000
--- a/fs/namei.c
+++ b/fs/namei.c
@@@ -860,9 -848,8 +849,10 @@@ static int __link_path_walk(const char
nd->flags |= LOOKUP_CONTINUE;
err = exec_permission_lite(inode);
if (err == -EAGAIN)
- err = vfs_permission(nd, MAY_EXEC);
+ err = inode_permission(nd->path.dentry->d_inode,
+ MAY_EXEC);
+ if (!err)
+ err = ima_path_check(&nd->path, MAY_EXEC);
if (err)
break;
@@@ -1525,14 -1506,9 +1509,14 @@@ int may_open(struct path *path, int acc
flag &= ~O_TRUNC;
}
- error = vfs_permission(nd, acc_mode);
+ error = inode_permission(inode, acc_mode);
if (error)
return error;
+
- error = ima_path_check(&nd->path,
++ error = ima_path_check(path,
+ acc_mode & (MAY_READ | MAY_WRITE | MAY_EXEC));
+ if (error)
+ return error;
/*
* An append-only file must be opened in append mode for writing.
*/
Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'include/linux/compiler-gcc.h')
-rw-r--r-- | include/linux/compiler-gcc.h | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index 5c8351b859f0..1514d534deeb 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h | |||
@@ -11,9 +11,19 @@ | |||
11 | /* The "volatile" is due to gcc bugs */ | 11 | /* The "volatile" is due to gcc bugs */ |
12 | #define barrier() __asm__ __volatile__("": : :"memory") | 12 | #define barrier() __asm__ __volatile__("": : :"memory") |
13 | 13 | ||
14 | /* This macro obfuscates arithmetic on a variable address so that gcc | ||
15 | shouldn't recognize the original var, and make assumptions about it */ | ||
16 | /* | 14 | /* |
15 | * This macro obfuscates arithmetic on a variable address so that gcc | ||
16 | * shouldn't recognize the original var, and make assumptions about it. | ||
17 | * | ||
18 | * This is needed because the C standard makes it undefined to do | ||
19 | * pointer arithmetic on "objects" outside their boundaries and the | ||
20 | * gcc optimizers assume this is the case. In particular they | ||
21 | * assume such arithmetic does not wrap. | ||
22 | * | ||
23 | * A miscompilation has been observed because of this on PPC. | ||
24 | * To work around it we hide the relationship of the pointer and the object | ||
25 | * using this macro. | ||
26 | * | ||
17 | * Versions of the ppc64 compiler before 4.1 had a bug where use of | 27 | * Versions of the ppc64 compiler before 4.1 had a bug where use of |
18 | * RELOC_HIDE could trash r30. The bug can be worked around by changing | 28 | * RELOC_HIDE could trash r30. The bug can be worked around by changing |
19 | * the inline assembly constraint from =g to =r, in this particular | 29 | * the inline assembly constraint from =g to =r, in this particular |
@@ -61,3 +71,8 @@ | |||
61 | #define noinline __attribute__((noinline)) | 71 | #define noinline __attribute__((noinline)) |
62 | #define __attribute_const__ __attribute__((__const__)) | 72 | #define __attribute_const__ __attribute__((__const__)) |
63 | #define __maybe_unused __attribute__((unused)) | 73 | #define __maybe_unused __attribute__((unused)) |
74 | |||
75 | #define __gcc_header(x) #x | ||
76 | #define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h) | ||
77 | #define gcc_header(x) _gcc_header(x) | ||
78 | #include gcc_header(__GNUC__) | ||