diff options
Diffstat (limited to 'fs/proc')
| -rw-r--r-- | fs/proc/proc_sysctl.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index 945a81043ba2..7b997754a25e 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c | |||
| @@ -298,13 +298,19 @@ static int proc_sys_permission(struct inode *inode, int mask) | |||
| 298 | * sysctl entries that are not writeable, | 298 | * sysctl entries that are not writeable, |
| 299 | * are _NOT_ writeable, capabilities or not. | 299 | * are _NOT_ writeable, capabilities or not. |
| 300 | */ | 300 | */ |
| 301 | struct ctl_table_header *head = grab_header(inode); | 301 | struct ctl_table_header *head; |
| 302 | struct ctl_table *table = PROC_I(inode)->sysctl_entry; | 302 | struct ctl_table *table; |
| 303 | int error; | 303 | int error; |
| 304 | 304 | ||
| 305 | /* Executable files are not allowed under /proc/sys/ */ | ||
| 306 | if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) | ||
| 307 | return -EACCES; | ||
| 308 | |||
| 309 | head = grab_header(inode); | ||
| 305 | if (IS_ERR(head)) | 310 | if (IS_ERR(head)) |
| 306 | return PTR_ERR(head); | 311 | return PTR_ERR(head); |
| 307 | 312 | ||
| 313 | table = PROC_I(inode)->sysctl_entry; | ||
| 308 | if (!table) /* global root - r-xr-xr-x */ | 314 | if (!table) /* global root - r-xr-xr-x */ |
| 309 | error = mask & MAY_WRITE ? -EACCES : 0; | 315 | error = mask & MAY_WRITE ? -EACCES : 0; |
| 310 | else /* Use the permissions on the sysctl table entry */ | 316 | else /* Use the permissions on the sysctl table entry */ |
| @@ -353,6 +359,7 @@ static const struct file_operations proc_sys_file_operations = { | |||
| 353 | 359 | ||
| 354 | static const struct file_operations proc_sys_dir_file_operations = { | 360 | static const struct file_operations proc_sys_dir_file_operations = { |
| 355 | .readdir = proc_sys_readdir, | 361 | .readdir = proc_sys_readdir, |
| 362 | .llseek = generic_file_llseek, | ||
| 356 | }; | 363 | }; |
| 357 | 364 | ||
| 358 | static const struct inode_operations proc_sys_inode_operations = { | 365 | static const struct inode_operations proc_sys_inode_operations = { |
