Bug 470801

Summary: Read from /proc/xen/xenbus does not honor O_NONBLOCK
Product: Red Hat Enterprise Linux 5 Reporter: Qian Cai <qcai>
Component: kernel-xenAssignee: Paolo Bonzini <pbonzini>
Status: CLOSED ERRATA QA Contact: chen yuwen <yuchen>
Severity: low Docs Contact:
Priority: low    
Version: 5.2CC: clalance, drjones, pbonzini, xen-maint
Target Milestone: rc   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 607261 607262 (view as bug list) Environment:
Last Closed: 2011-01-13 20:45:08 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 514491, 607261, 607262    

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