Bug 470801 - Read from /proc/xen/xenbus does not honor O_NONBLOCK
Summary: Read from /proc/xen/xenbus does not honor O_NONBLOCK
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 5
Classification: Red Hat
Component: kernel-xen
Version: 5.2
Hardware: All
OS: Linux
low
low
Target Milestone: rc
: ---
Assignee: Paolo Bonzini
QA Contact: chen yuwen
URL:
Whiteboard:
Depends On:
Blocks: 514491 607261 607262
TreeView+ depends on / blocked
 
Reported: 2008-11-10 11:53 UTC by Qian Cai
Modified: 2011-01-13 20:45 UTC (History)
4 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
: 607261 607262 (view as bug list)
Environment:
Last Closed: 2011-01-13 20:45:08 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2011:0017 0 normal SHIPPED_LIVE Important: Red Hat Enterprise Linux 5.6 kernel security and bug fix update 2011-01-13 10:37:42 UTC

Description Qian Cai 2008-11-10 11:53:47 UTC
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.

Comment 3 Paolo Bonzini 2010-06-23 16:26:35 UTC
I have a patch.

Comment 4 Paolo Bonzini 2010-06-24 16:07:53 UTC
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);
}

Comment 5 Paolo Bonzini 2010-07-02 09:21:13 UTC
Cai, upstream asked how we found the bug?  Was it simply by code inspection?

Comment 6 Qian Cai 2010-07-02 09:32:23 UTC
It was found by a test (proc01) in LTP to read every entry of the procfs.

Comment 7 RHEL Program Management 2010-08-04 12:09:24 UTC
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.

Comment 9 Jarod Wilson 2010-08-11 00:11:47 UTC
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.

Comment 11 chen yuwen 2010-12-10 02:15:34 UTC
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

Comment 13 errata-xmlrpc 2011-01-13 20:45:08 UTC
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


Note You need to log in before you can comment on or make changes to this bug.