RE: [PATCH v3 1/4] poll() exits too early with EFAULT if 1st arg is NULL

Subsystems: the rest

3 messages, 1 author, 2016-06-15 · open the first message on its own page

RE: [PATCH v3 1/4] poll() exits too early with EFAULT if 1st arg is NULL

From: Joachim Schmitz <hidden>
Date: 2016-06-15 22:54:39

If poll() is used as a milli-second sleep, like in help.c, by passing a NULL
in the 1st and a 0 in the 2nd arg, it exits with EFAULT.

As per Paolo Bonzini, the original author, this is a bug and to be fixed like
in this commit, which is not to exit if the 2nd arg is 0.

Signed-off-by: Joachim Schmitz <redacted>
---
 compat/win32/poll.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/compat/win32/poll.c b/compat/win32/poll.c
index 403eaa7..9e7a25c 100644
--- a/compat/win32/poll.c
+++ b/compat/win32/poll.c
@@ -349,7 +349,7 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)
 
   /* EFAULT is not necessary to implement, but let's do it in the
      simplest case. */
-  if (!pfd)
+  if (!pfd && nfd)
     {
       errno = EFAULT;
       return -1;
-- 
1.7.12

Re: [PATCH v3 1/4] poll() exits too early with EFAULT if 1st arg is NULL

From: Joachim Schmitz <hidden>
Date: 2016-06-15 22:54:43

Joachim Schmitz wrote:
quoted hunk
If poll() is used as a milli-second sleep, like in help.c, by passing
a NULL in the 1st and a 0 in the 2nd arg, it exits with EFAULT.

As per Paolo Bonzini, the original author, this is a bug and to be
fixed like in this commit, which is not to exit if the 2nd arg is 0.

Signed-off-by: Joachim Schmitz <redacted>
---
compat/win32/poll.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/compat/win32/poll.c b/compat/win32/poll.c
index 403eaa7..9e7a25c 100644
--- a/compat/win32/poll.c
+++ b/compat/win32/poll.c
@@ -349,7 +349,7 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)

  /* EFAULT is not necessary to implement, but let's do it in the
     simplest case. */
-  if (!pfd)
+  if (!pfd && nfd)
    {
      errno = EFAULT;
      return -1;
Actually this one is not needed for win32 (nor does win32 suffer from a 
similar bug), so should probably better get added after patch 2/2 (or as 
part of it), the move to compat/poll/.

Bye, Jojo

Re: [PATCH v3 1/4] poll() exits too early with EFAULT if 1st arg is NULL

From: Joachim Schmitz <hidden>
Date: 2016-06-15 22:54:44

Joachim Schmitz wrote:
Joachim Schmitz wrote:
quoted
If poll() is used as a milli-second sleep, like in help.c, by passing
a NULL in the 1st and a 0 in the 2nd arg, it exits with EFAULT.

As per Paolo Bonzini, the original author, this is a bug and to be
fixed like in this commit, which is not to exit if the 2nd arg is 0.

Signed-off-by: Joachim Schmitz <redacted>
---
compat/win32/poll.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/compat/win32/poll.c b/compat/win32/poll.c
index 403eaa7..9e7a25c 100644
--- a/compat/win32/poll.c
+++ b/compat/win32/poll.c
@@ -349,7 +349,7 @@ poll (struct pollfd *pfd, nfds_t nfd, int
timeout) 

  /* EFAULT is not necessary to implement, but let's do it in the
     simplest case. */
-  if (!pfd)
+  if (!pfd && nfd)
    {
      errno = EFAULT;
      return -1;
Actually this one is not needed for win32 (nor does win32 suffer from
a similar bug), so should probably better get added after patch 2/2
(or as part of it), the move to compat/poll/.
It just got added that was to gnulib, with a commit message of:

don't exit early if NULL is the 1st arg to poll(),
but nfd is 0.  In that case poll should behave like select.

Bye, Jojo
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help