Skip to contentSkip to conversation

x86/asm/entry: Rename compat syscall entry points

tip:x86/asm In review Brian Gerst 2 participants 4 messages Jun 8, 2015 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

arch/x86/entry/syscall_32.c line 14

Quoted 11 lines
arch/x86/entry/syscall_32.c +1 -1
index 3777189..e398d03 100644
@@ -10,7 +10,7 @@
 #else
 #define SYM(sym, compat) sym
 #define ia32_sys_call_table sys_call_table
-#define __NR_ia32_syscall_max __NR_syscall_max
+#define __NR_entry_INT80_compat_max __NR_syscall_max
 #endif

This change doesn't look intended. __NR_ia32_syscall_max is used by all compat entry points, not just INT80,

--
Brian Gerst

#2 lore raw

PATCH 1/1 x86/asm/entry: (Re-)rename __NR_entry_INT80_compat_max to __NR_syscall_compat_max

Quoted 6 lines · Brian Gerst
Quoted 6 lines
arch/x86/entry/syscall_32.c +0 -0
index 3777189..e398d03 100644
@@ -10,7 +10,7 @@
 #else
Quoted 8 lines

arch/x86/entry/syscall_32.c line 14

Quoted 5 lines
arch/x86/entry/syscall_32.c +1 -1
 #define SYM(sym, compat) sym
 #define ia32_sys_call_table sys_call_table
-#define __NR_ia32_syscall_max __NR_syscall_max
+#define __NR_entry_INT80_compat_max __NR_syscall_max
 #endif

This change doesn't look intended. __NR_ia32_syscall_max is used by all compat entry points, not just INT80,

Indeed!

How about the patch below?

Thanks,

Ingo

================>

Quoted 1 line

From 42b9d9a463bfb7252ede4eac24e50a4f013c6717 Mon Sep 17 00:00:00 2001

From: Ingo Molnar <[email protected]>
Date: Mon, 8 Jun 2015 21:20:26 +0200
Subject: [PATCH] x86/asm/entry: (Re-)rename __NR_entry_INT80_compat_max to __NR_syscall_compat_max

Brian Gerst noticed that I did a weird rename in the following commit:

b2502b418e63 ("x86/asm/entry: Untangle 'system_call' into two entry points: entry_SYSCALL_64 and entry_INT80_32")

which renamed __NR_ia32_syscall_max to __NR_entry_INT80_compat_max.

Now the original name was a misnomer, but the new one is a misnomer as well, as all compat syscall ABIs (such as x32) share the system call table, not just INT80 based ones.

Rename it to __NR_syscall_compat_max.

Cc Andrew Morton <[email protected]>
Cc Andy Lutomirski <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc Denys Vlasenko <[email protected]>
Cc H. Peter Anvin <[email protected]>
Cc Linus Torvalds <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Thomas Gleixner <[email protected]>
---
 arch/x86/entry/syscall_32.c      | 6 +++---
 arch/x86/kernel/asm-offsets_64.c | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)
arch/x86/entry/syscall_32.c +3 -3
index e398d033673f..8ea34f94e973 100644
@@ -10,7 +10,7 @@
 #else
 #define SYM(sym, compat) sym
 #define ia32_sys_call_table sys_call_table
-#define __NR_entry_INT80_compat_max __NR_syscall_max
+#define __NR_syscall_compat_max __NR_syscall_max
 #endif
 
 #define __SYSCALL_I386(nr, sym, compat) extern asmlinkage void SYM(sym, compat)(void) ;
@@ -23,11 +23,11 @@ typedef asmlinkage void (*sys_call_ptr_t)(void);
 
 extern asmlinkage void sys_ni_syscall(void);
 
-__visible const sys_call_ptr_t ia32_sys_call_table[__NR_entry_INT80_compat_max+1] = {
+__visible const sys_call_ptr_t ia32_sys_call_table[__NR_syscall_compat_max+1] = {
 	/*
 	 * Smells like a compiler bug -- it doesn't work
 	 * when the & below is removed.
 	 */
-	[0 ... __NR_entry_INT80_compat_max] = &sys_ni_syscall,
+	[0 ... __NR_syscall_compat_max] = &sys_ni_syscall,
 #include <asm/syscalls_32.h>
 };
arch/x86/kernel/asm-offsets_64.c +1 -1
index 599afcf0005f..d8f42f902a0f 100644
@@ -66,7 +66,7 @@ int main(void)
 	DEFINE(__NR_syscall_max, sizeof(syscalls_64) - 1);
 	DEFINE(NR_syscalls, sizeof(syscalls_64));
 
-	DEFINE(__NR_entry_INT80_compat_max, sizeof(syscalls_ia32) - 1);
+	DEFINE(__NR_syscall_compat_max, sizeof(syscalls_ia32) - 1);
 	DEFINE(IA32_NR_syscalls, sizeof(syscalls_ia32));
 
 	return 0;
#3 lore raw

Re: [PATCH] x86/asm/entry: (Re-)rename __NR_entry_INT80_compat_max to __NR_syscall_compat_max

Quoted 34 lines · Ingo Molnar
Quoted 6 lines · Brian Gerst
Quoted 6 lines
arch/x86/entry/syscall_32.c +0 -0
index 3777189..e398d03 100644
@@ -10,7 +10,7 @@
 #else
Quoted 8 lines

arch/x86/entry/syscall_32.c line 14

Quoted 5 lines
arch/x86/entry/syscall_32.c +1 -1
 #define SYM(sym, compat) sym
 #define ia32_sys_call_table sys_call_table
-#define __NR_ia32_syscall_max __NR_syscall_max
+#define __NR_entry_INT80_compat_max __NR_syscall_max
 #endif

This change doesn't look intended. __NR_ia32_syscall_max is used by all compat entry points, not just INT80,

Indeed!

How about the patch below?

Thanks,

Ingo

================>
From 42b9d9a463bfb7252ede4eac24e50a4f013c6717 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <[email protected]>
Date: Mon, 8 Jun 2015 21:20:26 +0200
Subject: [PATCH] x86/asm/entry: (Re-)rename __NR_entry_INT80_compat_max to __NR_syscall_compat_max

Brian Gerst noticed that I did a weird rename in the following commit:

Quoted 7 lines
   b2502b418e63 ("x86/asm/entry: Untangle 'system_call' into two entry points: entry_SYSCALL_64 and entry_INT80_32")

which renamed __NR_ia32_syscall_max to __NR_entry_INT80_compat_max.

Now the original name was a misnomer, but the new one is a misnomer as well, as all compat syscall ABIs (such as x32) share the system call table, not just INT80 based ones.

Not quite true. X32 is really an extension of the 64-bit ABI to support the ILP32 data model. It uses the 64-bit SYSCALL entry point and table, but with different syscall numbers for the syscalls that need 32-bit pointer handling in data structures.

So, __NR_syscall_compat_max is only for the 32-bit ABI compat syscall entries (int80, sysenter, and syscall from 32-bit mode), and not X32.

--
Brian Gerst

#4 lore raw

Re: [PATCH] x86/asm/entry: (Re-)rename __NR_entry_INT80_compat_max to __NR_syscall_compat_max

Quoted 43 lines · Brian Gerst
Quoted 34 lines · Ingo Molnar
Quoted 6 lines · Brian Gerst
Quoted 6 lines
arch/x86/entry/syscall_32.c +0 -0
index 3777189..e398d03 100644
@@ -10,7 +10,7 @@
 #else
Quoted 8 lines

arch/x86/entry/syscall_32.c line 14

Quoted 5 lines
arch/x86/entry/syscall_32.c +1 -1
 #define SYM(sym, compat) sym
 #define ia32_sys_call_table sys_call_table
-#define __NR_ia32_syscall_max __NR_syscall_max
+#define __NR_entry_INT80_compat_max __NR_syscall_max
 #endif

This change doesn't look intended. __NR_ia32_syscall_max is used by all compat entry points, not just INT80,

Indeed!

How about the patch below?

Thanks,

Ingo

================>
From 42b9d9a463bfb7252ede4eac24e50a4f013c6717 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <[email protected]>
Date: Mon, 8 Jun 2015 21:20:26 +0200
Subject: [PATCH] x86/asm/entry: (Re-)rename __NR_entry_INT80_compat_max to __NR_syscall_compat_max

Brian Gerst noticed that I did a weird rename in the following commit:

Quoted 7 lines
   b2502b418e63 ("x86/asm/entry: Untangle 'system_call' into two entry points: entry_SYSCALL_64 and entry_INT80_32")

which renamed __NR_ia32_syscall_max to __NR_entry_INT80_compat_max.

Now the original name was a misnomer, but the new one is a misnomer as well, as all compat syscall ABIs (such as x32) share the system call table, not just INT80 based ones.

Quoted 7 lines

Not quite true. X32 is really an extension of the 64-bit ABI to support the ILP32 data model. It uses the 64-bit SYSCALL entry point and table, but with different syscall numbers for the syscalls that need 32-bit pointer handling in data structures.

So, __NR_syscall_compat_max is only for the 32-bit ABI compat syscall entries (int80, sysenter, and syscall from 32-bit mode), and not X32.

Indeed, and I knew this...

Fixed the brainfart in the changelog.

Thanks,

Ingo