From owner-svn-src-user@FreeBSD.ORG Sun Apr 19 12:11:08 2015 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id C27E555D; Sun, 19 Apr 2015 12:11:08 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B15E8176; Sun, 19 Apr 2015 12:11:08 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t3JCB8CM017739; Sun, 19 Apr 2015 12:11:08 GMT (envelope-from jceel@FreeBSD.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t3JCB8or017735; Sun, 19 Apr 2015 12:11:08 GMT (envelope-from jceel@FreeBSD.org) Message-Id: <201504191211.t3JCB8or017735@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: jceel set sender to jceel@FreeBSD.org using -f From: Jakub Wojciech Klama Date: Sun, 19 Apr 2015 12:11:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r281739 - user/jceel/soc2014_evdev/head/sys/dev/evdev X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Apr 2015 12:11:08 -0000 Author: jceel Date: Sun Apr 19 12:11:07 2015 New Revision: 281739 URL: https://svnweb.freebsd.org/changeset/base/281739 Log: Add futher checks to ensure that supported event types array won't get overwritten by provider. Modified: user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.c user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.h Modified: user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.c ============================================================================== --- user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.c Sun Apr 19 11:34:41 2015 (r281738) +++ user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.c Sun Apr 19 12:11:07 2015 (r281739) @@ -186,65 +186,96 @@ evdev_set_softc(struct evdev_dev *evdev, evdev->ev_softc = softc; } -inline void +inline int evdev_support_event(struct evdev_dev *evdev, uint16_t type) { + if (type >= EV_CNT) + return (EINVAL); + set_bit(evdev->ev_type_flags, type); + return (0); } -inline void +inline int evdev_support_key(struct evdev_dev *evdev, uint16_t code) { + if (code >= KEY_CNT) + return (EINVAL); + set_bit(evdev->ev_key_flags, code); + return (0); } -inline void +inline int evdev_support_rel(struct evdev_dev *evdev, uint16_t code) { + if (code >= REL_CNT) + return (EINVAL); + set_bit(evdev->ev_rel_flags, code); + return (0); } -inline void +inline int evdev_support_abs(struct evdev_dev *evdev, uint16_t code) { + if (code >= ABS_CNT) + return (EINVAL); + set_bit(evdev->ev_abs_flags, code); + return (0); } -inline void +inline int evdev_support_msc(struct evdev_dev *evdev, uint16_t code) { + if (code >= MSC_CNT) + return (EINVAL); + set_bit(evdev->ev_msc_flags, code); + return (0); } -inline void +inline int evdev_support_led(struct evdev_dev *evdev, uint16_t code) { + if (code >= LED_CNT) + return (EINVAL); + set_bit(evdev->ev_led_flags, code); + return (0); } -inline void +inline int evdev_support_snd(struct evdev_dev *evdev, uint16_t code) { + if (code >= SND_CNT) + return (EINVAL); + set_bit(evdev->ev_snd_flags, code); + return (0); } -inline void +inline int evdev_support_sw(struct evdev_dev *evdev, uint16_t code) { + if (code >= SW_CNT) + return (EINVAL); set_bit(evdev->ev_sw_flags, code); + return (0); } -inline void +inline int evdev_support_repeat(struct evdev_dev *evdev, enum evdev_repeat_mode mode) { @@ -252,6 +283,7 @@ evdev_support_repeat(struct evdev_dev *e set_bit(evdev->ev_type_flags, EV_REP); evdev->ev_repeat_mode = mode; + return (0); } Modified: user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.h ============================================================================== --- user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.h Sun Apr 19 11:34:41 2015 (r281738) +++ user/jceel/soc2014_evdev/head/sys/dev/evdev/evdev.h Sun Apr 19 12:11:07 2015 (r281739) @@ -152,15 +152,15 @@ int evdev_sync(struct evdev_dev *); int evdev_mt_sync(struct evdev_dev *); int evdev_cdev_create(struct evdev_dev *); int evdev_cdev_destroy(struct evdev_dev *); -void evdev_support_event(struct evdev_dev *, uint16_t); -void evdev_support_key(struct evdev_dev *, uint16_t); -void evdev_support_rel(struct evdev_dev *, uint16_t); -void evdev_support_abs(struct evdev_dev *, uint16_t); -void evdev_support_msc(struct evdev_dev *, uint16_t); -void evdev_support_led(struct evdev_dev *, uint16_t); -void evdev_support_snd(struct evdev_dev *, uint16_t); -void evdev_support_sw(struct evdev_dev *, uint16_t); -void evdev_support_repeat(struct evdev_dev *, enum evdev_repeat_mode); +int evdev_support_event(struct evdev_dev *, uint16_t); +int evdev_support_key(struct evdev_dev *, uint16_t); +int evdev_support_rel(struct evdev_dev *, uint16_t); +int evdev_support_abs(struct evdev_dev *, uint16_t); +int evdev_support_msc(struct evdev_dev *, uint16_t); +int evdev_support_led(struct evdev_dev *, uint16_t); +int evdev_support_snd(struct evdev_dev *, uint16_t); +int evdev_support_sw(struct evdev_dev *, uint16_t); +int evdev_support_repeat(struct evdev_dev *, enum evdev_repeat_mode); void evdev_set_absinfo(struct evdev_dev *, uint16_t, struct input_absinfo *); void evdev_set_repeat_params(struct evdev_dev *, uint16_t, int);