stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH for-4.19 0/2] Backport SUBLEVEL access macros
@ 2022-02-07 14:38 Jiaxun Yang
  2022-02-07 14:38 ` [PATCH for-4.19 1/2] kbuild: clamp SUBLEVEL to 255 Jiaxun Yang
  2022-02-07 14:38 ` [PATCH for-4.19 2/2] kbuild: simplify access to the kernel's version Jiaxun Yang
  0 siblings, 2 replies; 3+ messages in thread
From: Jiaxun Yang @ 2022-02-07 14:38 UTC (permalink / raw)
  To: gregkh; +Cc: stable, Jiaxun Yang

For stable-4.19.

Sasha Levin (2):
  kbuild: clamp SUBLEVEL to 255
  kbuild: simplify access to the kernel's version

 Makefile                                       | 15 ++++++++++++---
 drivers/net/ethernet/mellanox/mlx5/core/main.c |  4 ++--
 drivers/scsi/gdth.c                            |  6 +++---
 drivers/usb/core/hcd.c                         |  4 ++--
 include/linux/usb/composite.h                  |  4 ++--
 kernel/sys.c                                   |  2 +-
 6 files changed, 22 insertions(+), 13 deletions(-)

-- 
2.35.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH for-4.19 1/2] kbuild: clamp SUBLEVEL to 255
  2022-02-07 14:38 [PATCH for-4.19 0/2] Backport SUBLEVEL access macros Jiaxun Yang
@ 2022-02-07 14:38 ` Jiaxun Yang
  2022-02-07 14:38 ` [PATCH for-4.19 2/2] kbuild: simplify access to the kernel's version Jiaxun Yang
  1 sibling, 0 replies; 3+ messages in thread
From: Jiaxun Yang @ 2022-02-07 14:38 UTC (permalink / raw)
  To: gregkh; +Cc: stable, Sasha Levin, Masahiro Yamada, Jiaxun Yang

From: Sasha Levin <sashal@kernel.org>

commit 9b82f13e7ef316cdc0a8858f1349f4defce3f9e0 upstream.

Right now if SUBLEVEL becomes larger than 255 it will overflow into the
territory of PATCHLEVEL, causing havoc in userspace that tests for
specific kernel version.

While userspace code tests for MAJOR and PATCHLEVEL, it doesn't test
SUBLEVEL at any point as ABI changes don't happen in the context of
stable tree.

Thus, to avoid overflows, simply clamp SUBLEVEL to it's maximum value in
the context of LINUX_VERSION_CODE. This does not affect "make
kernelversion" and such.

Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
[jiaxun.yang@flygoat.com: Stable backport]
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
---
 Makefile | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/Makefile b/Makefile
index 1e9652cb9c1f..ab70e3305a1b 100644
--- a/Makefile
+++ b/Makefile
@@ -1157,9 +1157,15 @@ define filechk_utsrelease.h
 endef
 
 define filechk_version.h
-	(echo \#define LINUX_VERSION_CODE $(shell                         \
-	expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \
-	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
+	if [ $(SUBLEVEL) -gt 255 ]; then                                 \
+		echo \#define LINUX_VERSION_CODE $(shell                 \
+		expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \
+	else                                                             \
+		echo \#define LINUX_VERSION_CODE $(shell                 \
+		expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
+	fi;                                                              \
+	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) +  \
+	((c) > 255 ? 255 : (c)))'
 endef
 
 $(version_h): FORCE
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH for-4.19 2/2] kbuild: simplify access to the kernel's version
  2022-02-07 14:38 [PATCH for-4.19 0/2] Backport SUBLEVEL access macros Jiaxun Yang
  2022-02-07 14:38 ` [PATCH for-4.19 1/2] kbuild: clamp SUBLEVEL to 255 Jiaxun Yang
@ 2022-02-07 14:38 ` Jiaxun Yang
  1 sibling, 0 replies; 3+ messages in thread
From: Jiaxun Yang @ 2022-02-07 14:38 UTC (permalink / raw)
  To: gregkh; +Cc: stable, Sasha Levin, Masahiro Yamada, Jiaxun Yang

From: Sasha Levin <sashal@kernel.org>

commit 88a686728b3739d3598851e729c0e81f194e5c53 upstream.

Instead of storing the version in a single integer and having various
kernel (and userspace) code how it's constructed, export individual
(major, patchlevel, sublevel) components and simplify kernel code that
uses it.

This should also make it easier on userspace.

Signed-off-by: Sasha Levin <sashal@kernel.org>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
[jiaxun.yang@flygoat.com: Stable backport, fix geth as well.]
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
---
 Makefile                                       | 5 ++++-
 drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 ++--
 drivers/scsi/gdth.c                            | 6 +++---
 drivers/usb/core/hcd.c                         | 4 ++--
 include/linux/usb/composite.h                  | 4 ++--
 kernel/sys.c                                   | 2 +-
 6 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/Makefile b/Makefile
index ab70e3305a1b..744b89418a28 100644
--- a/Makefile
+++ b/Makefile
@@ -1165,7 +1165,10 @@ define filechk_version.h
 		expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
 	fi;                                                              \
 	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) +  \
-	((c) > 255 ? 255 : (c)))'
+	((c) > 255 ? 255 : (c)))';                                       \
+	echo \#define LINUX_VERSION_MAJOR $(VERSION);                    \
+	echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL);            \
+	echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL)
 endef
 
 $(version_h): FORCE
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
index a2b25afa2472..4f0b4af93366 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -214,8 +214,8 @@ static void mlx5_set_driver_version(struct mlx5_core_dev *dev)
 	remaining_size = max_t(int, 0, driver_ver_sz - strlen(string));
 
 	snprintf(string + strlen(string), remaining_size, "%u.%u.%u",
-		 (u8)((LINUX_VERSION_CODE >> 16) & 0xff), (u8)((LINUX_VERSION_CODE >> 8) & 0xff),
-		 (u16)(LINUX_VERSION_CODE & 0xffff));
+		LINUX_VERSION_MAJOR, LINUX_VERSION_PATCHLEVEL,
+		LINUX_VERSION_SUBLEVEL);
 
 	/*Send the command*/
 	MLX5_SET(set_driver_version_in, in, opcode,
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index 16709735b546..57e33d8d8b6b 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -4498,9 +4498,9 @@ static int gdth_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
       { 
         gdth_ioctl_osvers osv; 
 
-        osv.version = (u8)(LINUX_VERSION_CODE >> 16);
-        osv.subversion = (u8)(LINUX_VERSION_CODE >> 8);
-        osv.revision = (u16)(LINUX_VERSION_CODE & 0xff);
+        osv.version = LINUX_VERSION_MAJOR;
+        osv.subversion = LINUX_VERSION_PATCHLEVEL;
+        osv.revision = LINUX_VERSION_SUBLEVEL;
         if (copy_to_user(argp, &osv, sizeof(gdth_ioctl_osvers)))
                 return -EFAULT;
         break;
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 11cc189bf105..42b551e6603f 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -113,8 +113,8 @@ static inline int is_root_hub(struct usb_device *udev)
  */
 
 /*-------------------------------------------------------------------------*/
-#define KERNEL_REL	bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
-#define KERNEL_VER	bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
+#define KERNEL_REL	bin2bcd(LINUX_VERSION_MAJOR)
+#define KERNEL_VER	bin2bcd(LINUX_VERSION_PATCHLEVEL)
 
 /* usb 3.1 root hub device descriptor */
 static const u8 usb31_rh_dev_descriptor[18] = {
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index 2040696d75b6..764f58b74f26 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -573,8 +573,8 @@ static inline u16 get_default_bcdDevice(void)
 {
 	u16 bcdDevice;
 
-	bcdDevice = bin2bcd((LINUX_VERSION_CODE >> 16 & 0xff)) << 8;
-	bcdDevice |= bin2bcd((LINUX_VERSION_CODE >> 8 & 0xff));
+	bcdDevice = bin2bcd(LINUX_VERSION_MAJOR) << 8;
+	bcdDevice |= bin2bcd(LINUX_VERSION_PATCHLEVEL);
 	return bcdDevice;
 }
 
diff --git a/kernel/sys.c b/kernel/sys.c
index d0663f8e6fb8..8677854e2690 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -1224,7 +1224,7 @@ static int override_release(char __user *release, size_t len)
 				break;
 			rest++;
 		}
-		v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 60;
+		v = LINUX_VERSION_PATCHLEVEL + 60;
 		copy = clamp_t(size_t, len, 1, sizeof(buf));
 		copy = scnprintf(buf, copy, "2.6.%u%s", v, rest);
 		ret = copy_to_user(release, buf, copy + 1);
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-02-07 15:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-07 14:38 [PATCH for-4.19 0/2] Backport SUBLEVEL access macros Jiaxun Yang
2022-02-07 14:38 ` [PATCH for-4.19 1/2] kbuild: clamp SUBLEVEL to 255 Jiaxun Yang
2022-02-07 14:38 ` [PATCH for-4.19 2/2] kbuild: simplify access to the kernel's version Jiaxun Yang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).