Description of problem: After open(2) on /proc/xen/xenbus with O_NONBLOCK flag, read(2) on the file is blocked, and wait for an event. Version-Release number of selected component (if applicable): kernel-xen-2.6.18-92.el5 How reproducible: Always Steps to Reproduce: 1. open ("/proc/xen/xenbus", O_RDONLY | O_NONBLOCK); 2. read (fd, buf, 4096); Actual results: read(2) is blocked. Expected results: read(2) shall return EAGAIN.
I have a patch.
reproducer: #include <stdlib.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> int main() { char buf[256]; int fd = open ("/proc/xen/xenbus", O_RDONLY | O_NONBLOCK); if (fd == -1) { perror ("/proc/xen/xenbus"); exit (1); } alarm (5); while (read (fd, buf, 256) == -1 && errno != EAGAIN) ; puts ("works"); exit (0); }
Cai, upstream asked how we found the bug? Was it simply by code inspection?
It was found by a test (proc01) in LTP to read every entry of the procfs.
This request was evaluated by Red Hat Product Management for inclusion in a Red Hat Enterprise Linux maintenance release. Product Management has requested further review of this request by Red Hat Engineering, for potential inclusion in a Red Hat Enterprise Linux Update release for currently deployed products. This request is not yet committed for inclusion in an Update release.
in kernel-2.6.18-211.el5 You can download this test kernel from http://people.redhat.com/jwilson/el5 Detailed testing feedback is always welcomed.
Reproduced on kernel 2.6.18-92.el5xen. #gcc -o test test.c # ./test Alarm Clock ---------------------- Verified on kernel 2.6.18-221.el5xen. # ./test works
An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHSA-2011-0017.html