From patchwork Fri Feb 4 08:46:52 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Torokhov X-Patchwork-Id: 531261 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p148hs5I009988 for ; Fri, 4 Feb 2011 08:47:01 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753171Ab1BDIrA (ORCPT ); Fri, 4 Feb 2011 03:47:00 -0500 Received: from mail-iy0-f174.google.com ([209.85.210.174]:52646 "EHLO mail-iy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752777Ab1BDIrA (ORCPT ); Fri, 4 Feb 2011 03:47:00 -0500 Received: by iyj18 with SMTP id 18so1911179iyj.19 for ; Fri, 04 Feb 2011 00:46:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:date:from:to:cc:subject:message-id:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=um1kPdjE56sNhguTUoHtS9oqnXd3MxxYx+Nir+B3vD0=; b=aUzZjPbhW+LrEP6uRO7WBAIWPoHO9ZA/ofz+qmdACRIojOSTkAgt4bbLXpVXuMnz/o Mjk23OFlBjN1RGgoHyl2YevDbkm8Cq17vsgqF3TDYetnYQuzVnAFHbE3gufgQdDgvQxI XgB97LoiqkesJM5Jt0ZeMV8h/O8dv46J2m/hU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; b=qmYKunkqcrssQT6fY9Ep6E0pWeDtDoDEB4qFlaA+yzFJ4bjyoWuJ4kztbFLcmx0nm4 mAulYRxzE8IZ68MO+FYvXS7x5Py3K7ixOMqRu5s71n13c45dTwnwJ9z9j8mckJ9h2laU N/g1hlKX5Js6d9dM8K4b4/u3mqJpUCnlpnpQY= Received: by 10.42.213.136 with SMTP id gw8mr13996615icb.359.1296809219298; Fri, 04 Feb 2011 00:46:59 -0800 (PST) Received: from mailhub.coreip.homeip.net (c-98-234-113-65.hsd1.ca.comcast.net [98.234.113.65]) by mx.google.com with ESMTPS id g4sm383156ick.23.2011.02.04.00.46.55 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 04 Feb 2011 00:46:57 -0800 (PST) Date: Fri, 4 Feb 2011 00:46:52 -0800 From: Dmitry Torokhov To: Peter Korsgaard Cc: Henrik Rydberg , linux-input@vger.kernel.org, baruch@tkos.co.il Subject: Re: [PATCHv2] evdev: fix evdev_write return value on partial writes Message-ID: <20110204084652.GB13046@core.coreip.homeip.net> References: <1296122607-9526-1-git-send-email-jacmet@sunsite.dk> <20110127110255.GA15159@polaris.bitmath.org> <871v3ysibp.fsf@macbook.be.48ers.dk> <20110127114727.GA15626@polaris.bitmath.org> <87pqrir1r2.fsf@macbook.be.48ers.dk> <20110127122625.GD15626@polaris.bitmath.org> <87lj26qzyy.fsf@macbook.be.48ers.dk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <87lj26qzyy.fsf@macbook.be.48ers.dk> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Fri, 04 Feb 2011 08:47:01 +0000 (UTC) diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index c8471a2..7f42d3a 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c @@ -321,6 +321,9 @@ static ssize_t evdev_write(struct file *file, const char __user *buffer, struct input_event event; int retval; + if (count < input_event_size()) + return -EINVAL; + retval = mutex_lock_interruptible(&evdev->mutex); if (retval) return retval; @@ -330,17 +333,16 @@ static ssize_t evdev_write(struct file *file, const char __user *buffer, goto out; } - while (retval < count) { - + do { if (input_event_from_user(buffer + retval, &event)) { retval = -EFAULT; goto out; } + retval += input_event_size(); input_inject_event(&evdev->handle, event.type, event.code, event.value); - retval += input_event_size(); - } + } while (retval + input_event_size() <= count); out: mutex_unlock(&evdev->mutex);