Author: gonzo
Date: Mon May  8 22:35:15 2017
New Revision: 317989
URL: https://svnweb.freebsd.org/changeset/base/317989

Log:
  MFC r315176-r315178
  
  r315176:
  [evdev] Do not ignore result evdev_register in UI_DEV_CREATE handler
  
  Make sure that uinput state field reflects actual state by checking
  evdev_register result for errors
  
  Submitted by: Vladimir Kondratiev <w...@cicgroup.ru>
  Differential Revision:        https://reviews.freebsd.org/D9320
  
  r315177:
  [evdev] Fix race condition between client's event queue reading and dropping
  
  Submitted by: Vladimir Kondratiev <w...@cicgroup.ru>
  Differential Revision:        https://reviews.freebsd.org/D9320
  
  r315178:
  [evdev] Fix Right Alt and Keypad Enter event codes for atkbd(4) and kbdmux(4) 
drivers
  
  Submitted by: Vladimir Kondratiev <w...@cicgroup.ru>
  Differential Revision:        https://reviews.freebsd.org/D9320

Modified:
  stable/11/sys/dev/evdev/cdev.c
  stable/11/sys/dev/evdev/evdev_utils.c
  stable/11/sys/dev/evdev/uinput.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/evdev/cdev.c
==============================================================================
--- stable/11/sys/dev/evdev/cdev.c      Mon May  8 22:24:06 2017        
(r317988)
+++ stable/11/sys/dev/evdev/cdev.c      Mon May  8 22:35:15 2017        
(r317989)
@@ -162,7 +162,7 @@ static int
 evdev_read(struct cdev *dev, struct uio *uio, int ioflag)
 {
        struct evdev_client *client;
-       struct input_event *event;
+       struct input_event event;
        int ret = 0;
        int remaining;
 
@@ -197,13 +197,14 @@ evdev_read(struct cdev *dev, struct uio 
        }
 
        while (ret == 0 && !EVDEV_CLIENT_EMPTYQ(client) && remaining > 0) {
-               event = &client->ec_buffer[client->ec_buffer_head];
+               memcpy(&event, &client->ec_buffer[client->ec_buffer_head],
+                   sizeof(struct input_event));
                client->ec_buffer_head =
                    (client->ec_buffer_head + 1) % client->ec_buffer_size;
                remaining--;
 
                EVDEV_CLIENT_UNLOCKQ(client);
-               ret = uiomove(event, sizeof(struct input_event), uio);
+               ret = uiomove(&event, sizeof(struct input_event), uio);
                EVDEV_CLIENT_LOCKQ(client);
        }
 

Modified: stable/11/sys/dev/evdev/evdev_utils.c
==============================================================================
--- stable/11/sys/dev/evdev/evdev_utils.c       Mon May  8 22:24:06 2017        
(r317988)
+++ stable/11/sys/dev/evdev/evdev_utils.c       Mon May  8 22:35:15 2017        
(r317989)
@@ -159,7 +159,7 @@ static uint16_t evdev_at_set1_scancodes[
        KEY_PREVIOUSSONG,       NONE,   NONE,           NONE,
        NONE,           NONE,           NONE,           NONE,
        NONE,           KEY_NEXTSONG,   NONE,           NONE,
-       NONE,           KEY_KPENTER,    KEY_RIGHTCTRL,  NONE,
+       KEY_KPENTER,    KEY_RIGHTCTRL,  NONE,           NONE,
        /* 0x20 - 0x3f. 0xE0 prefixed */
        KEY_MUTE,       KEY_CALC,       KEY_PLAYPAUSE,  NONE,
        KEY_STOPCD,     NONE,           NONE,           NONE,

Modified: stable/11/sys/dev/evdev/uinput.c
==============================================================================
--- stable/11/sys/dev/evdev/uinput.c    Mon May  8 22:24:06 2017        
(r317988)
+++ stable/11/sys/dev/evdev/uinput.c    Mon May  8 22:35:15 2017        
(r317989)
@@ -501,9 +501,10 @@ uinput_ioctl_sub(struct uinput_cdev_stat
 
                evdev_set_methods(state->ucs_evdev, state, &uinput_ev_methods);
                evdev_set_flag(state->ucs_evdev, EVDEV_FLAG_SOFTREPEAT);
-               evdev_register(state->ucs_evdev);
-               state->ucs_state = UINPUT_RUNNING;
-               return (0);
+               ret = evdev_register(state->ucs_evdev);
+               if (ret == 0)
+                       state->ucs_state = UINPUT_RUNNING;
+               return (ret);
 
        case UI_DEV_DESTROY:
                if (state->ucs_state != UINPUT_RUNNING)
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to