The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6836

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
For example:
ACTION=add
EVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:093A:2510.0003/input/input20
SUBSYSTEM=input
RODUCT=3/93a/2510/111
NAME="PixArt USB Optical Mouse"
PHYS="usb-0000:00:14.0-1/input0"
UNIQ=""
PROP=0
EV=17
KEY=70000 0 0 0 0
REL=903
MSC=10
MODALIAS=input:b0003v093Ap2510e0111-e0,1,2,4,k110,111,112,r0,1,8,B,am4,lsfw
SEQNUM=38896
USEC_INITIALIZED=64404346109
ID_INPUT=1
ID_INPUT_MOUSE=1
ID_VENDOR=PixArt
ID_VENDOR_ENC=PixArt
ID_VENDOR_ID=093a
ID_MODEL=USB_Optical_Mouse
ID_MODEL_ENC=USB\x20Optical\x20Mouse
ID_MODEL_ID=2510
ID_REVISION=0100
ID_SERIAL=PixArt_USB_Optical_Mouse
ID_TYPE=hid
ID_BUS=usb
ID_USB_INTERFACES=:030102:
ID_USB_INTERFACE_NUM=00
ID_USB_DRIVER=usbhid
.INPUT_CLASS=mouse
ID_PATH=pci-0000:00:14.0-usb-0:1:1.0
ID_PATH_TAG=pci-0000_00_14_0-usb-0_1_1_0
TAGS=:seat:
ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_1_1_0

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From db89ce45a0bd43bc7245b2ee750c3b06645a7f2c Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Wed, 5 Feb 2020 11:46:28 +0100
Subject: [PATCH] unix hotplug: skip devices without associated devpath or
 major/minor

For example:
ACTION=add
EVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:093A:2510.0003/input/input20
SUBSYSTEM=input
RODUCT=3/93a/2510/111
NAME="PixArt USB Optical Mouse"
PHYS="usb-0000:00:14.0-1/input0"
UNIQ=""
PROP=0
EV=17
KEY=70000 0 0 0 0
REL=903
MSC=10
MODALIAS=input:b0003v093Ap2510e0111-e0,1,2,4,k110,111,112,r0,1,8,B,am4,lsfw
SEQNUM=38896
USEC_INITIALIZED=64404346109
ID_INPUT=1
ID_INPUT_MOUSE=1
ID_VENDOR=PixArt
ID_VENDOR_ENC=PixArt
ID_VENDOR_ID=093a
ID_MODEL=USB_Optical_Mouse
ID_MODEL_ENC=USB\x20Optical\x20Mouse
ID_MODEL_ID=2510
ID_REVISION=0100
ID_SERIAL=PixArt_USB_Optical_Mouse
ID_TYPE=hid
ID_BUS=usb
ID_USB_INTERFACES=:030102:
ID_USB_INTERFACE_NUM=00
ID_USB_DRIVER=usbhid
.INPUT_CLASS=mouse
ID_PATH=pci-0000:00:14.0-usb-0:1:1.0
ID_PATH_TAG=pci-0000_00_14_0-usb-0_1_1_0
TAGS=:seat:
ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_1_1_0

Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 lxd/device/unix_hotplug.go | 26 +++++++++++++++-----------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/lxd/device/unix_hotplug.go b/lxd/device/unix_hotplug.go
index 628b580077..2c02a3a2c7 100644
--- a/lxd/device/unix_hotplug.go
+++ b/lxd/device/unix_hotplug.go
@@ -4,7 +4,6 @@ package device
 
 import (
        "fmt"
-       "strconv"
        "strings"
 
        udev "github.com/farjump/go-libudev"
@@ -138,18 +137,12 @@ func (d *unixHotplug) Start() (*deviceConfig.RunConfig, 
error) {
                return &runConf, nil
        }
 
-       i, err := strconv.ParseUint(device.PropertyValue("MAJOR"), 10, 32)
-       if err != nil {
-               return nil, err
-       }
-       major := uint32(i)
-       j, err := strconv.ParseUint(device.PropertyValue("MINOR"), 10, 32)
-       if err != nil {
-               return nil, err
-       }
-       minor := uint32(j)
+       devnum := device.Devnum()
+       major := uint32(devnum.Major())
+       minor := uint32(devnum.Minor())
 
        // setup device
+       var err error
        if device.Subsystem() == "block" {
                err = unixDeviceSetupBlockNum(d.state, d.inst.DevicesPath(), 
"unix", d.name, d.config, major, minor, device.Devnode(), false, &runConf)
        } else {
@@ -203,10 +196,21 @@ func (d *unixHotplug) loadUnixDevice() *udev.Device {
                e.AddMatchProperty("ID_MODEL_ID", d.config["productid"])
        }
        e.AddMatchIsInitialized()
+
        devices, _ := e.Devices()
        var device *udev.Device
        for i := range devices {
                device = devices[i]
+
+               devnum := device.Devnum()
+               if devnum.Major() == 0 || devnum.Minor() == 0 {
+                       continue
+               }
+
+               if device.Devnode() == "" {
+                       continue
+               }
+
                if !strings.HasPrefix(device.Subsystem(), "usb") {
                        return device
                }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to