From mboxrd@z Thu Jan 1 00:00:00 1970 From: bugzilla-daemon@freedesktop.org Subject: [Bug 66332] New: drmHandleEvent returns 0 on read() failure Date: Fri, 28 Jun 2013 16:31:42 +0000 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0930188808==" Return-path: Received: from culpepper.freedesktop.org (unknown [131.252.210.165]) by gabe.freedesktop.org (Postfix) with ESMTP id F307AE66CF for ; Fri, 28 Jun 2013 09:31:42 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org --===============0930188808== Content-Type: multipart/alternative; boundary="1372437102.bc2d0.31734"; charset="us-ascii" --1372437102.bc2d0.31734 Date: Fri, 28 Jun 2013 16:31:42 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" https://bugs.freedesktop.org/show_bug.cgi?id=66332 Priority: medium Bug ID: 66332 Assignee: dri-devel@lists.freedesktop.org Summary: drmHandleEvent returns 0 on read() failure Severity: normal Classification: Unclassified OS: All Reporter: mgold@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. --1372437102.bc2d0.31734 Date: Fri, 28 Jun 2013 16:31:42 +0000 MIME-Version: 1.0 Content-Type: text/html; charset="UTF-8"
Priority medium
Bug ID 66332
Assignee dri-devel@lists.freedesktop.org
Summary drmHandleEvent returns 0 on read() failure
Severity normal
Classification Unclassified
OS All
Reporter mgold@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.
--1372437102.bc2d0.31734-- --===============0930188808== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel --===============0930188808==--