From 98877362e3b9ba1152f14a9f827ee23fe1d0df9b Mon Sep 17 00:00:00 2001 From: Lin Yang Date: Thu, 23 Sep 2021 22:33:48 -0700 Subject: [PATCH] Support large device major/minor number Latest linux kernel use large number (12 bits for major device, 20 bits for minor device). Current code only supports previous standard (5 chars), which means 8 bits for major and 8 bits for minor device. It will fail if device number is out of that range. So this patch increases device number read from /proc/self/maps file. --- ext/opcache/ZendAccelerator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index b453cd2390bf2..ece89bf348220 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -3006,11 +3006,11 @@ static void accel_move_code_to_huge_pages(void) f = fopen("/proc/self/maps", "r"); if (f) { long unsigned int start, end, offset, inode; - char perm[5], dev[6], name[MAXPATHLEN]; + char perm[5], dev[10], name[MAXPATHLEN]; int ret; while (1) { - ret = fscanf(f, "%lx-%lx %4s %lx %5s %ld %s\n", &start, &end, perm, &offset, dev, &inode, name); + ret = fscanf(f, "%lx-%lx %4s %lx %9s %ld %s\n", &start, &end, perm, &offset, dev, &inode, name); if (ret == 7) { if (perm[0] == 'r' && perm[1] == '-' && perm[2] == 'x' && name[0] == '/') { long unsigned int seg_start = ZEND_MM_ALIGNED_SIZE_EX(start, huge_page_size);