[Bug 66332] New: drmHandleEvent returns 0 on read() failure

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Fri Jun 28 09:31:42 PDT 2013


https://bugs.freedesktop.org/show_bug.cgi?id=66332

          Priority: medium
            Bug ID: 66332
          Assignee: dri-devel at lists.freedesktop.org
           Summary: drmHandleEvent returns 0 on read() failure
          Severity: normal
    Classification: Unclassified
                OS: All
          Reporter: mgold at qnx.com
          Hardware: All
            Status: NEW
           Version: XOrg CVS
         Component: libdrm
           Product: DRI

drmHandleEvent contains this code:
        len = read(fd, buffer, sizeof buffer);
        if (len == 0)
                return 0;
        if (len < sizeof *e)
                return -1;
In the (len < sizeof *e) check, len gets promoted to size_t (which is
unsigned); so when len is negative "return -1" won't be executed. Instead, the
function continues to the end and returns 0. (The documentation states
drmHandleEvent will return -1 if the read fails.)

If there's an error like EBADF, the caller won't detect it and might end up
busy-waiting. Rewriting the condition as (len < (int)(sizeof *e)) will fix
this.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20130628/ea6e0c7f/attachment.html>


More information about the dri-devel mailing list