Re: [PATCH 1/3] Revert "kbuild: give the SUBLEVEL more room in KERNEL_VERSION"

2021-02-06 Thread Masahiro Yamada
On Sat, Feb 6, 2021 at 12:50 PM Sasha Levin  wrote:
>
> This reverts commit 537896fabed11f8d976d1aacdb977213c7b3.
>
> This turns out to be a bad idea: userspace has coded the structure of
> KERNEL_VERSION on it's own and assumes the 2-1-1 byte split, making it
> userspace ABI we can't break.

It is unfortunate...

I will drop this from my tree.

This did not hit Linus' tree yet.



> The reverted patch didn't make it past linux-next, so no userspace was
> hurt in the process.
>
> Signed-off-by: Sasha Levin 
> ---
>  Makefile   | 7 ++-
>  drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 ++--
>  drivers/usb/core/hcd.c | 4 ++--
>  drivers/usb/gadget/udc/aspeed-vhub/hub.c   | 4 ++--
>  include/linux/usb/composite.h  | 4 ++--
>  kernel/sys.c   | 2 +-
>  tools/perf/tests/bpf-script-example.c  | 2 +-
>  tools/perf/tests/bpf-script-test-kbuild.c  | 2 +-
>  tools/perf/tests/bpf-script-test-prologue.c| 2 +-
>  9 files changed, 14 insertions(+), 17 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 28019532e55ac..49ac1b7fe8e99 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1259,11 +1259,8 @@ endef
>
>  define filechk_version.h
> echo \#define LINUX_VERSION_CODE $(shell \
> -   expr $(VERSION) \* 16777216 + 0$(PATCHLEVEL) \* 65536 + 
> 0$(SUBLEVEL)); \
> -   echo \#define LINUX_VERSION_MAJOR $(VERSION); \
> -   echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL); \
> -   echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL); \
> -   echo '#define KERNEL_VERSION(a,b,c) (((a) << 24) + ((b) << 16) + (c))'
> +   expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \
> +   echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'
>  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 989f15d9aa7d4..e4c9627485aa5 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
> @@ -237,8 +237,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_MAJOR), (u8)(LINUX_VERSION_PATCHLEVEL),
> -   (u16)(LINUX_VERSION_SUBLEVEL));
> +(u8)((LINUX_VERSION_CODE >> 16) & 0xff), 
> (u8)((LINUX_VERSION_CODE >> 8) & 0xff),
> +(u16)(LINUX_VERSION_CODE & 0x));
>
> /*Send the command*/
> MLX5_SET(set_driver_version_in, in, opcode,
> diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
> index 3f0381344221e..ad5a0f405a75c 100644
> --- a/drivers/usb/core/hcd.c
> +++ b/drivers/usb/core/hcd.c
> @@ -111,8 +111,8 @@ DECLARE_WAIT_QUEUE_HEAD(usb_kill_urb_queue);
>   */
>
>  /*-*/
> -#define KERNEL_REL bin2bcd(LINUX_VERSION_MAJOR)
> -#define KERNEL_VER bin2bcd(LINUX_VERSION_PATCHLEVEL)
> +#define KERNEL_REL bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
> +#define KERNEL_VER bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
>
>  /* usb 3.1 root hub device descriptor */
>  static const u8 usb31_rh_dev_descriptor[18] = {
> diff --git a/drivers/usb/gadget/udc/aspeed-vhub/hub.c 
> b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
> index 5c7dea5e0ff16..bfd8e77788e29 100644
> --- a/drivers/usb/gadget/udc/aspeed-vhub/hub.c
> +++ b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
> @@ -46,8 +46,8 @@
>   *- Make vid/did overridable
>   *- make it look like usb1 if usb1 mode forced
>   */
> -#define KERNEL_REL bin2bcd(LINUX_VERSION_MAJOR)
> -#define KERNEL_VER bin2bcd(LINUX_VERSION_PATCHLEVEL)
> +#define KERNEL_REL bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
> +#define KERNEL_VER bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
>
>  enum {
> AST_VHUB_STR_INDEX_MAX = 4,
> diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
> index c71150f2c6390..5646dad886e61 100644
> --- a/include/linux/usb/composite.h
> +++ b/include/linux/usb/composite.h
> @@ -575,8 +575,8 @@ static inline u16 get_default_bcdDevice(void)
>  {
> u16 bcdDevice;
>
> -   bcdDevice = bin2bcd(LINUX_VERSION_MAJOR) << 8;
> -   bcdDevice |= bin2bcd(LINUX_VERSION_PATCHLEVEL);
> +   bcdDevice = bin2bcd((LINUX_VERSION_CODE >> 16 & 0xff)) << 8;
> +   bcdDevice |= bin2bcd((LINUX_VERSION_CODE >> 8 & 0xff));
> return bcdDevice;
>  }
>
> diff --git a/kernel/sys.c b/kernel/sys.c
> index b09fe21e88ff5..8bb46e50f02d4 100644
> --- a/kernel/sys.c
> +++ b/kernel/sys.c
> @@ -1242,7 +1242,7 @@ static int override_release(char __user *release, 
> size_t len)
> break;
> re

[PATCH 1/3] Revert "kbuild: give the SUBLEVEL more room in KERNEL_VERSION"

2021-02-05 Thread Sasha Levin
This reverts commit 537896fabed11f8d976d1aacdb977213c7b3.

This turns out to be a bad idea: userspace has coded the structure of
KERNEL_VERSION on it's own and assumes the 2-1-1 byte split, making it
userspace ABI we can't break.

The reverted patch didn't make it past linux-next, so no userspace was
hurt in the process.

Signed-off-by: Sasha Levin 
---
 Makefile   | 7 ++-
 drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 ++--
 drivers/usb/core/hcd.c | 4 ++--
 drivers/usb/gadget/udc/aspeed-vhub/hub.c   | 4 ++--
 include/linux/usb/composite.h  | 4 ++--
 kernel/sys.c   | 2 +-
 tools/perf/tests/bpf-script-example.c  | 2 +-
 tools/perf/tests/bpf-script-test-kbuild.c  | 2 +-
 tools/perf/tests/bpf-script-test-prologue.c| 2 +-
 9 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/Makefile b/Makefile
index 28019532e55ac..49ac1b7fe8e99 100644
--- a/Makefile
+++ b/Makefile
@@ -1259,11 +1259,8 @@ endef
 
 define filechk_version.h
echo \#define LINUX_VERSION_CODE $(shell \
-   expr $(VERSION) \* 16777216 + 0$(PATCHLEVEL) \* 65536 + 0$(SUBLEVEL)); \
-   echo \#define LINUX_VERSION_MAJOR $(VERSION); \
-   echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL); \
-   echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL); \
-   echo '#define KERNEL_VERSION(a,b,c) (((a) << 24) + ((b) << 16) + (c))'
+   expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \
+   echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'
 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 989f15d9aa7d4..e4c9627485aa5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -237,8 +237,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_MAJOR), (u8)(LINUX_VERSION_PATCHLEVEL),
-   (u16)(LINUX_VERSION_SUBLEVEL));
+(u8)((LINUX_VERSION_CODE >> 16) & 0xff), 
(u8)((LINUX_VERSION_CODE >> 8) & 0xff),
+(u16)(LINUX_VERSION_CODE & 0x));
 
/*Send the command*/
MLX5_SET(set_driver_version_in, in, opcode,
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 3f0381344221e..ad5a0f405a75c 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -111,8 +111,8 @@ DECLARE_WAIT_QUEUE_HEAD(usb_kill_urb_queue);
  */
 
 /*-*/
-#define KERNEL_REL bin2bcd(LINUX_VERSION_MAJOR)
-#define KERNEL_VER bin2bcd(LINUX_VERSION_PATCHLEVEL)
+#define KERNEL_REL bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
+#define KERNEL_VER bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
 
 /* usb 3.1 root hub device descriptor */
 static const u8 usb31_rh_dev_descriptor[18] = {
diff --git a/drivers/usb/gadget/udc/aspeed-vhub/hub.c 
b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
index 5c7dea5e0ff16..bfd8e77788e29 100644
--- a/drivers/usb/gadget/udc/aspeed-vhub/hub.c
+++ b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
@@ -46,8 +46,8 @@
  *- Make vid/did overridable
  *- make it look like usb1 if usb1 mode forced
  */
-#define KERNEL_REL bin2bcd(LINUX_VERSION_MAJOR)
-#define KERNEL_VER bin2bcd(LINUX_VERSION_PATCHLEVEL)
+#define KERNEL_REL bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
+#define KERNEL_VER bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
 
 enum {
AST_VHUB_STR_INDEX_MAX = 4,
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index c71150f2c6390..5646dad886e61 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -575,8 +575,8 @@ static inline u16 get_default_bcdDevice(void)
 {
u16 bcdDevice;
 
-   bcdDevice = bin2bcd(LINUX_VERSION_MAJOR) << 8;
-   bcdDevice |= bin2bcd(LINUX_VERSION_PATCHLEVEL);
+   bcdDevice = bin2bcd((LINUX_VERSION_CODE >> 16 & 0xff)) << 8;
+   bcdDevice |= bin2bcd((LINUX_VERSION_CODE >> 8 & 0xff));
return bcdDevice;
 }
 
diff --git a/kernel/sys.c b/kernel/sys.c
index b09fe21e88ff5..8bb46e50f02d4 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -1242,7 +1242,7 @@ static int override_release(char __user *release, size_t 
len)
break;
rest++;
}
-   v = LINUX_VERSION_PATCHLEVEL + 60;
+   v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 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);
diff --git a/tools/perf/te