public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] linux: Change syscall return value to long int
@ 2022-11-29  3:16 XingLi
  2022-11-29  8:55 ` Szabolcs Nagy
  0 siblings, 1 reply; 5+ messages in thread
From: XingLi @ 2022-11-29  3:16 UTC (permalink / raw)
  To: adhemerval.zanella
  Cc: libc-alpha, i.swmail, xry111, caiyinyu, wanghongliang, hejinyang,
	Xing Li

From: Xing Li <lixing@loongson.cn>

The kernel syscall return is long value.
The generic syscall interface return value
is int, which may lead to incorrect return value.

The following test is syscall with mmap executed on LoongArch,
only 32bits and sign extension value returned leading to mmap failure,
which should be with 47bits address returned.

Testcase:

 #include <sys/syscall.h>
 #include <sys/mman.h>
 #include <stdio.h>

void main()
{
        long int ret;
        ret = syscall(SYS_mmap, NULL, 0x801000, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
        printf("map address is %lx\n",ret);
}

Result:
[lixing@Sunhaiyong test]$ ./mmap
map address is fffffffff008c000
---
 sysdeps/unix/sysv/linux/syscall.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sysdeps/unix/sysv/linux/syscall.c b/sysdeps/unix/sysv/linux/syscall.c
index 7303ba7188..8cb0b66b1c 100644
--- a/sysdeps/unix/sysv/linux/syscall.c
+++ b/sysdeps/unix/sysv/linux/syscall.c
@@ -33,7 +33,7 @@ syscall (long int number, ...)
   long int a5 = va_arg (args, long int);
   va_end (args);
 
-  int r = INTERNAL_SYSCALL_NCS_CALL (number, a0, a1, a2, a3, a4, a5);
+  long int r = INTERNAL_SYSCALL_NCS_CALL (number, a0, a1, a2, a3, a4, a5);
   if (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (r)))
     {
       __set_errno (-r);
-- 
2.31.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-11-29 10:54 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-29  3:16 [PATCH] linux: Change syscall return value to long int XingLi
2022-11-29  8:55 ` Szabolcs Nagy
2022-11-29  9:12   ` Xi Ruoyao
2022-11-29  9:37     ` Szabolcs Nagy
2022-11-29 10:54       ` XingLi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).