OSDN Git Service

xf86drm: use max size of drm node name instead of arbitrary size
authorEric Engestrom <eric.engestrom@intel.com>
Wed, 19 Dec 2018 13:42:08 +0000 (13:42 +0000)
committerEric Engestrom <eric.engestrom@intel.com>
Wed, 3 Jul 2019 12:06:21 +0000 (13:06 +0100)
Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
xf86drm.c
xf86drm.h

index 427f2c4..3f4dfad 100644 (file)
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -317,7 +317,7 @@ static int drmOpenDevice(dev_t dev, int minor, int type)
 {
     stat_t          st;
     const char      *dev_name;
-    char            buf[64];
+    char            buf[DRM_NODE_NAME_MAX];
     int             fd;
     mode_t          devmode = DRM_DEV_MODE, serv_mode;
     gid_t           serv_group;
@@ -445,7 +445,7 @@ wait_for_udev:
 static int drmOpenMinor(int minor, int create, int type)
 {
     int  fd;
-    char buf[64];
+    char buf[DRM_NODE_NAME_MAX];
     const char *dev_name;
 
     if (create)
index 08b99f1..3f52cd8 100644 (file)
--- a/xf86drm.h
+++ b/xf86drm.h
@@ -93,6 +93,14 @@ extern "C" {
 #define DRM_CONTROL_DEV_NAME  "%s/" DRM_CONTROL_MINOR_NAME "%d"
 #define DRM_RENDER_DEV_NAME   "%s/" DRM_RENDER_MINOR_NAME  "%d"
 
+#define DRM_NODE_NAME_MAX \
+    (sizeof(DRM_DIR_NAME) + 1 /* slash */ \
+     + MAX3(sizeof(DRM_PRIMARY_MINOR_NAME), \
+            sizeof(DRM_CONTROL_MINOR_NAME), \
+            sizeof(DRM_RENDER_MINOR_NAME)) \
+     + sizeof("144") /* highest possible node number */ \
+     + 1) /* NULL-terminator */
+
 #define DRM_ERR_NO_DEVICE  (-1001)
 #define DRM_ERR_NO_ACCESS  (-1002)
 #define DRM_ERR_NOT_ROOT   (-1003)