[lxc-devel] [lxd/master] unix hotplug: skip devices without associated devpath or major/minor

brauner on Github lxc-bot at linuxcontainers.org
Wed Feb 5 10:52:35 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 1260 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200205/e4576ec6/attachment.bin>
-------------- next part --------------
From db89ce45a0bd43bc7245b2ee750c3b06645a7f2c Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at 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.brauner at 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
 		}


More information about the lxc-devel mailing list