History

exec: change uselib(2) IS_SREG() failure to EACCES

Patch series "Relocate execve() sanity checks", v2. While looking at the code paths for the proposed O_MAYEXEC flag, I saw some things that looked like they should be fixed up. exec: Change uselib(2) IS_SREG() failure to EACCES This just regularizes the return code on uselib(2). exec: Move S_ISREG() check earlier This moves the S_ISREG() check even earlier than it was already. exec: Move path_noexec() check earlier This adds the path_noexec() check to the same place as the S_ISREG() check. This patch (of 3): Change uselib(2)' S_ISREG() error return to EACCES instead of EINVAL so the behavior matches execve(2), and the seemingly documented value. The "not a regular file" failure mode of execve(2) is explicitly documented[1], but it is not mentioned in uselib(2)[2] which does, however, say that open(2) and mmap(2) errors may apply. The documentation for open(2) does not include a "not a regular file" error[3], but mmap(2) does[4], and it is EACCES. [1] http://man7.org/linux/man-pages/man2/execve.2.html#ERRORS [2] http://man7.org/linux/man-pages/man2/uselib.2.html#ERRORS [3] http://man7.org/linux/man-pages/man2/open.2.html#ERRORS [4] http://man7.org/linux/man-pages/man2/mmap.2.html#ERRORS

Kees Cook committed 6 years ago

Commit db19c911 parent f38c85f1 file · +1 −2Browse files

Unified · Split

fs/exec.c+1−2
@@ -141,11 +141,10 @@ SYSCALL_DEFINE1(uselib, const char __user *, library) · 140 unmodified lines
141 if (IS_ERR(file))141 if (IS_ERR(file))
142 goto out;142 goto out;
143 143
144 error = -EINVAL;144 error = -EACCES;
145 if (!S_ISREG(file_inode(file)->i_mode))145 if (!S_ISREG(file_inode(file)->i_mode))
146 goto exit;146 goto exit;
147 147
148 error = -EACCES;
149 if (path_noexec(&file->f_path))148 if (path_noexec(&file->f_path))
150 goto exit;149 goto exit;
151 150

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t