diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2025-08-01 15:00:25 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2025-08-01 16:57:41 -0300 |
commit | 7107bebf19286f42dcb0a97581137a5893c16206 (patch) | |
tree | 2c7419306c5d2bc66d82b009647c1b1b842a0093 | |
parent | cf91048748408f81566ead5b9498744100aa589c (diff) | |
download | glibc-7107bebf19286f42dcb0a97581137a5893c16206.zip glibc-7107bebf19286f42dcb0a97581137a5893c16206.tar.gz glibc-7107bebf19286f42dcb0a97581137a5893c16206.tar.bz2 |
nptl: Fix SYSCALL_CANCEL for return values larger than INT_MAX (BZ 33245)
The SYSCALL_CANCEL calls __syscall_cancel, which in turn
calls __internal_syscall_cancel with an 'int' return instead of the
expected 'long int'. This causes issues with syscalls that return
values larger than INT_MAX, such as copy_file_range [1].
Checked on x86_64-linux-gnu.
[1] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=79139
Reviewed-by: Andreas K. Huettel <dilfridge@gentoo.org>
-rw-r--r-- | nptl/cancellation.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/nptl/cancellation.c b/nptl/cancellation.c index 156e63d..bed0383 100644 --- a/nptl/cancellation.c +++ b/nptl/cancellation.c @@ -72,8 +72,8 @@ __syscall_cancel (__syscall_arg_t a1, __syscall_arg_t a2, __syscall_arg_t a5, __syscall_arg_t a6, __SYSCALL_CANCEL7_ARG_DEF __syscall_arg_t nr) { - int r = __internal_syscall_cancel (a1, a2, a3, a4, a5, a6, - __SYSCALL_CANCEL7_ARG nr); + long int r = __internal_syscall_cancel (a1, a2, a3, a4, a5, a6, + __SYSCALL_CANCEL7_ARG nr); return __glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (r)) ? SYSCALL_ERROR_LABEL (INTERNAL_SYSCALL_ERRNO (r)) : r; |