Message ID | 20140516142404.GB29829@domone.podge |
---|---|
State | New |
Headers | show |
Ondřej Bílka <neleai@seznam.cz> writes: > On Tue, May 13, 2014 at 08:33:58PM +0000, Joseph S. Myers wrote: >> On Tue, 13 May 2014, Ondrej Bilka wrote: >> >> > On Thu, May 08, 2014 at 03:07:39PM +0200, Rasmus Villemoes wrote: >> > > Rasmus Villemoes <rv@rasmusvillemoes.dk> writes: >> > > >> > > > Both the man-page and the actual kernel source says that the first >> > > > argument to eventfd is unsigned int, not simply int. >> > > > >> > > >> > > ping >> > >> > looks good, I am bit concerned with compatibility, Joseph could you also >> > comment it? >> >> Compatibility would be an issue if: >> >> * the C ABI on some architecture defines int to be sign-extended to 64 >> bits when passed as a function parameter, but unsigned int to be >> zero-extended; >> >> * the code generated for eventfd relied on this in some way; and >> >> * a user binary passes a negative value for the int argument. >> >> I don't expect that to be an issue (in that I don't expect any dependence >> beyond the value passed to the function being passed on to the kernel >> unchanged) but haven't looked at generated code. >> > I looked linux fs/eventfd.c and it should not be case as a parameter is > passed to different function. OK to commit patch with this changelog? Fine by me.
diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h b/ports/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h index 2d198a8..a3c340e 100644 --- a/ports/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h +++ b/ports/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h @@ -40,7 +40,7 @@ __BEGIN_DECLS /* Return file descriptor for generic event channel. Set initial value to COUNT. */ -extern int eventfd (int __count, int __flags) __THROW; +extern int eventfd (unsigned int __count, int __flags) __THROW; /* Read event counter and possibly wait for events. */ extern int eventfd_read (int __fd, eventfd_t *__value); diff --git a/sysdeps/unix/sysv/linux/eventfd.c b/sysdeps/unix/sysv/linux/eventfd.c index 425c811..83da67f 100644 --- a/sysdeps/unix/sysv/linux/eventfd.c +++ b/sysdeps/unix/sysv/linux/eventfd.c @@ -22,7 +22,7 @@ int -eventfd (int count, int flags) +eventfd (unsigned int count, int flags) { #ifdef __NR_eventfd2 int res = INLINE_SYSCALL (eventfd2, 2, count, flags); diff --git a/sysdeps/unix/sysv/linux/sys/eventfd.h b/sysdeps/unix/sysv/linux/sys/eventfd.h index 7f977ed..0806891 100644 --- a/sysdeps/unix/sysv/linux/sys/eventfd.h +++ b/sysdeps/unix/sysv/linux/sys/eventfd.h @@ -31,7 +31,7 @@ __BEGIN_DECLS /* Return file descriptor for generic event channel. Set initial value to COUNT. */ -extern int eventfd (int __count, int __flags) __THROW; +extern int eventfd (unsigned int __count, int __flags) __THROW; /* Read event counter and possibly wait for events. */ extern int eventfd_read (int __fd, eventfd_t *__value);