Linux: Pass size argument of epoll_create to the kernel
Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
dj/TryBot-32bit |
success
|
Build for i686
|
Commit Message
The kernel actually verifies it, and a garbage value in the register
causes improper system call failures.
Fixes commit c1c0dea38833751f36a145c32 ("Linux: Remove epoll_create,
inotify_init from syscalls.list") and commit d1d23b134244d59c4d6ef2295
("Lninux: consolidate epoll_create implementation").
Tested on i686-linux-gnu, x86_64-linux-gnu.
---
sysdeps/unix/sysv/linux/epoll_create.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
base-commit: e2b68828fab4fdfa5595fa89180230cdc4373ec1
Comments
On 12/22/22 10:00, Florian Weimer wrote:
> The kernel actually verifies it, and a garbage value in the register
> causes improper system call failures.
>
> Fixes commit c1c0dea38833751f36a145c32 ("Linux: Remove epoll_create,
> inotify_init from syscalls.list") and commit d1d23b134244d59c4d6ef2295
> ("Lninux: consolidate epoll_create implementation").
>
> Tested on i686-linux-gnu, x86_64-linux-gnu.
LGTM.
Reviewed-by: Carlos O'Donell <carlos@redaht.com>
>
> ---
> sysdeps/unix/sysv/linux/epoll_create.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/sysdeps/unix/sysv/linux/epoll_create.c b/sysdeps/unix/sysv/linux/epoll_create.c
> index afb1921637..cb6a67e602 100644
> --- a/sysdeps/unix/sysv/linux/epoll_create.c
> +++ b/sysdeps/unix/sysv/linux/epoll_create.c
> @@ -25,7 +25,7 @@ int
> epoll_create (int size)
> {
> #ifdef __NR_epoll_create
> - return INLINE_SYSCALL_CALL (epoll_create);
> + return INLINE_SYSCALL_CALL (epoll_create, size);
OK. This is correct, we need to pass 'size' and I missed this in the initial review of the refactor.
Kernel does the same size check that we do, but in the syscall itself:
2035 SYSCALL_DEFINE1(epoll_create, int, size)
2036 {
2037 if (size <= 0)
^^^^^^^^^^^^^^ - Must be a non-negative size.
2038 return -EINVAL;
2039
2040 return do_epoll_create(0);
2041 }
> #else
> if (size <= 0)
> {
>
> base-commit: e2b68828fab4fdfa5595fa89180230cdc4373ec1
>
@@ -25,7 +25,7 @@ int
epoll_create (int size)
{
#ifdef __NR_epoll_create
- return INLINE_SYSCALL_CALL (epoll_create);
+ return INLINE_SYSCALL_CALL (epoll_create, size);
#else
if (size <= 0)
{