mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Davide Libenzi <davidel@xmailserver.org>
To: bert hubert <ahu@ds9a.nl>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [patch] total-epoll r2 ...
Date: Sun, 3 Nov 2002 11:15:39 -0800 (PST)	[thread overview]
Message-ID: <Pine.LNX.4.44.0211031113220.954-100000@blue1.dev.mcafeelabs.com> (raw)
In-Reply-To: <20021103132133.GA21319@outpost.ds9a.nl>

On Sun, 3 Nov 2002, bert hubert wrote:

> 3)
> Using epoll on tty behaves weirdly, I think this is a bug. I see epoll_wait
> returning immediately, but it returns 0, even though I set timeout to
> infinite (-1). 'Exploit code:'
>
> #include <stdio.h>
> #include <errno.h>
> #include <asm/page.h>
> #include <asm/poll.h>
> #include <linux/linkage.h>
> #include <linux/eventpoll.h>
> #include <linux/unistd.h>
> #include <string.h>
> #include <stdlib.h>
> #include <unistd.h>
>
> #define __sys_epoll_create(maxfds) _syscall1(int, sys_epoll_create, int, maxfds)
> #define __sys_epoll_ctl(epfd, op, fd, events) _syscall4(int, sys_epoll_ctl, \
> int, epfd, int, op, int, fd, unsigned int, events)
>
> #define __sys_epoll_wait(epfd, events, maxevents, timeout) _syscall4(int, sys_epoll_wait, \
> int, epfd, struct pollfd *, events, int, maxevents,int, timeout)
>
> __sys_epoll_create(maxfds)
> __sys_epoll_ctl(epfd, op, fd, events)
> __sys_epoll_wait(epfd, events, maxevents, timeout)
>
> int main()
> {
> 	int kdpfd;
> 	struct pollfd pfds[100];
> 	int nfds;
> 	int n;
> 	char line[80];
> 	int ret;
>
> 	if ((kdpfd = sys_epoll_create(10)) < 0) {
>         	perror("sys_epoll_create");
>                 return -1;
>         }
>
>         if (sys_epoll_ctl(kdpfd, EP_CTL_ADD, 0, POLLIN ) < 0) {
> 		fprintf(stderr, "sys_epoll set insertion error: fd=%d\n", 0);
> 		return -1;
> 	}
>
> 	for(;;) {
> 		nfds = sys_epoll_wait(kdpfd, pfds, 100, -1);
> 		fprintf(stderr,"sys_epoll_wait returned: %d\n",nfds);
>
> 		for(n=0;n<nfds;++n) {
> 			if((ret=read(pfds[n].fd,line,79))>0)
> 				printf("read from fd %d: '%.*s'\n", pfds[n].fd, ret>1 ? ret-1 : 0,line);
> 		}
> 	}
>
> 	return 0;
> }
>
> This code runs more as expected when redirecting stderr to a file, strangely
> enough. In that case, epoll_wait returns 0 once per keystroke, but only
> returns '1' after enter is pressed.

Thank you for your very clear report Bert. It's fixed now. It was an easy
fix. I will post a patch later today containing this fix and other things
to Linus and lkml.




- Davide



  parent reply	other threads:[~2002-11-03 19:00 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-02 19:40 Davide Libenzi
2002-11-02 20:17 ` Davide Libenzi
2002-11-03 13:21   ` bert hubert
2002-11-03 17:30     ` Davide Libenzi
2002-11-03 19:15     ` Davide Libenzi [this message]
2002-11-02 21:37 ` bert hubert
2002-11-02 22:11   ` Davide Libenzi
2002-11-02 22:08     ` bert hubert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.44.0211031113220.954-100000@blue1.dev.mcafeelabs.com \
    --to=davidel@xmailserver.org \
    --cc=ahu@ds9a.nl \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®