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
next prev 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®