diff options
Diffstat (limited to '0007-Linux-Refactor-test-for-32bit-compat.patch')
-rw-r--r-- | 0007-Linux-Refactor-test-for-32bit-compat.patch | 212 |
1 files changed, 0 insertions, 212 deletions
diff --git a/0007-Linux-Refactor-test-for-32bit-compat.patch b/0007-Linux-Refactor-test-for-32bit-compat.patch deleted file mode 100644 index 89137c7c8d06..000000000000 --- a/0007-Linux-Refactor-test-for-32bit-compat.patch +++ /dev/null @@ -1,212 +0,0 @@ -From 7efd65a984e5b50904e556992f533c460d9fcf9e Mon Sep 17 00:00:00 2001 -From: Cheyenne Wills <cwills@sinenomine.net> -Date: Fri, 29 Jan 2021 11:32:36 -0700 -Subject: [PATCH 7/8] Linux: Refactor test for 32bit compat - -Refactor the preprocessor checks for determining the method to test for -32bit compatibility (64bit kernel performing work for a 32bit task) into -a common inline function, 'afs_in_compat_syscall' that is defined in -LINUX/osi_machdep.h. Update osi_ioctl.c and afs_syscall.c to use -afs_in_compat_syscall. - -Add include afs/sysincludes into osi_machdep.h to ensure linux/compat.h -is pulled for the functions called in afs_in_compat_syscall. - -Reviewed-on: https://gerrit.openafs.org/14500 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -(cherry picked from commit 32cc6b0796495e596262d84c428172a511f757c4) - -Change-Id: I746e5777737d49381c4a74627b79d2a61cbd4f8e -Reviewed-on: https://gerrit.openafs.org/14510 -Reviewed-by: Cheyenne Wills <cwills@sinenomine.net> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_ioctl.c | 14 ++------ - src/afs/LINUX/osi_machdep.h | 40 +++++++++++++++++++++ - src/afs/afs_syscall.c | 70 +++---------------------------------- - 3 files changed, 47 insertions(+), 77 deletions(-) - -diff --git a/src/afs/LINUX/osi_ioctl.c b/src/afs/LINUX/osi_ioctl.c -index 9ba076a1b..7d355674d 100644 ---- a/src/afs/LINUX/osi_ioctl.c -+++ b/src/afs/LINUX/osi_ioctl.c -@@ -43,21 +43,13 @@ afs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, - { - - struct afsprocdata sysargs; --#ifdef NEED_IOCTL32 -- struct afsprocdata32 sysargs32; --#endif - - if (cmd != VIOC_SYSCALL && cmd != VIOC_SYSCALL32) return -EINVAL; - - #ifdef NEED_IOCTL32 --# if defined(AFS_S390X_LINUX26_ENV) -- if (test_thread_flag(TIF_31BIT)) --# elif defined(AFS_AMD64_LINUX20_ENV) -- if (test_thread_flag(TIF_IA32)) --# else -- if (test_thread_flag(TIF_32BIT)) --# endif /* AFS_S390X_LINUX26_ENV */ -- { -+ if (afs_in_compat_syscall()) { -+ struct afsprocdata32 sysargs32; -+ - if (copy_from_user(&sysargs32, (void *)arg, - sizeof(struct afsprocdata32))) - return -EFAULT; -diff --git a/src/afs/LINUX/osi_machdep.h b/src/afs/LINUX/osi_machdep.h -index 784829627..9ecdaf0bf 100644 ---- a/src/afs/LINUX/osi_machdep.h -+++ b/src/afs/LINUX/osi_machdep.h -@@ -76,6 +76,8 @@ - #include "h/cred.h" - #endif - -+#include "afs/sysincludes.h" -+ - #if !defined(HAVE_LINUX_TIME_T) - typedef time64_t time_t; - #endif -@@ -157,6 +159,44 @@ static inline long copyinstr(char *from, char *to, int count, int *length) { - } - #define copyout(F, T, C) (copy_to_user ((char*)(T), (char*)(F), (C)) > 0 ? EFAULT : 0) - -+/* -+ * Test to see for 64/32bit compatibility mode -+ * Return non-zero if in a 64bit kernel and handing a 32bit syscall -+ */ -+#if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV) -+static inline int -+afs_in_compat_syscall(void) -+{ -+# if defined(AFS_SPARC64_LINUX26_ENV) -+ return test_thread_flag(TIF_32BIT); -+# elif defined(AFS_SPARC64_LINUX24_ENV) -+ return (current->thread.flags & SPARC_FLAG_32BIT) != 0; -+# elif defined(AFS_SPARC64_LINUX20_ENV) -+ return (current->tss.flags & SPARC_FLAG_32BIT) != 0; -+# elif defined(AFS_AMD64_LINUX26_ENV) -+ return test_thread_flag(TIF_IA32); -+# elif defined(AFS_AMD64_LINUX20_ENV) -+ return (current->thread.flags & THREAD_IA32) != 0; -+# elif defined(AFS_PPC64_LINUX26_ENV) -+# if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) -+ return (current->thread_info->flags & _TIF_32BIT) != 0; -+# else -+ return (task_thread_info(current)->flags & _TIF_32BIT) != 0; -+# endif -+# elif defined(AFS_PPC64_LINUX20_ENV) -+ return (current->thread.flags & PPC_FLAG_32BIT) != 0; -+# elif defined(AFS_S390X_LINUX26_ENV) -+ return test_thread_flag(TIF_31BIT); -+# elif defined(AFS_S390X_LINUX20_ENV) -+ return (current->thread.flags & S390_FLAG_31BIT) != 0; -+# elif defined(AFS_ARM64_LINUX26_ENV) -+ return is_compat_task(); -+# else -+# error afs_in_compat_syscall not done for this linux -+# endif -+} -+#endif /* AFS_LINUX_64BIT_KERNEL */ -+ - /* kernel print statements */ - #define printf(args...) printk(args) - #define uprintf(args...) printk(args) -diff --git a/src/afs/afs_syscall.c b/src/afs/afs_syscall.c -index ce6afdf9a..9414f38b8 100644 ---- a/src/afs/afs_syscall.c -+++ b/src/afs/afs_syscall.c -@@ -114,40 +114,9 @@ copyin_afs_ioctl(caddr_t cmarg, struct afs_ioctl *dst) - #endif /* defined(AFS_SGI_ENV) && (_MIPS_SZLONG==64) */ - - #if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV) -- struct afs_ioctl32 dst32; -- --#ifdef AFS_SPARC64_LINUX26_ENV -- if (test_thread_flag(TIF_32BIT)) --#elif defined(AFS_SPARC64_LINUX24_ENV) -- if (current->thread.flags & SPARC_FLAG_32BIT) --#elif defined(AFS_SPARC64_LINUX20_ENV) -- if (current->tss.flags & SPARC_FLAG_32BIT) -- --#elif defined(AFS_AMD64_LINUX26_ENV) -- if (test_thread_flag(TIF_IA32)) --#elif defined(AFS_AMD64_LINUX20_ENV) -- if (current->thread.flags & THREAD_IA32) -- --#elif defined(AFS_PPC64_LINUX26_ENV) --#if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) -- if (current->thread_info->flags & _TIF_32BIT) --#else -- if (task_thread_info(current)->flags & _TIF_32BIT) --#endif --#elif defined(AFS_PPC64_LINUX20_ENV) -- if (current->thread.flags & PPC_FLAG_32BIT) -- --#elif defined(AFS_S390X_LINUX26_ENV) -- if (test_thread_flag(TIF_31BIT)) --#elif defined(AFS_S390X_LINUX20_ENV) -- if (current->thread.flags & S390_FLAG_31BIT) --#elif defined(AFS_ARM64_LINUX26_ENV) -- if (is_compat_task()) -+ if (afs_in_compat_syscall()) { -+ struct afs_ioctl32 dst32; - --#else --#error pioctl32 not done for this linux --#endif -- { - AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); - if (!code) - afs_ioctl32_to_afs_ioctl(&dst32, dst); -@@ -391,40 +360,9 @@ copyin_iparam(caddr_t cmarg, struct iparam *dst) - #endif /* AFS_SUN5_64BIT_ENV */ - - #if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV) -- struct iparam32 dst32; -- --#ifdef AFS_SPARC64_LINUX26_ENV -- if (test_thread_flag(TIF_32BIT)) --#elif defined(AFS_SPARC64_LINUX24_ENV) -- if (current->thread.flags & SPARC_FLAG_32BIT) --#elif defined(AFS_SPARC64_LINUX20_ENV) -- if (current->tss.flags & SPARC_FLAG_32BIT) -- --#elif defined(AFS_AMD64_LINUX26_ENV) -- if (test_thread_flag(TIF_IA32)) --#elif defined(AFS_AMD64_LINUX20_ENV) -- if (current->thread.flags & THREAD_IA32) -- --#elif defined(AFS_PPC64_LINUX26_ENV) --#if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) -- if (current->thread_info->flags & _TIF_32BIT) --#else -- if (task_thread_info(current)->flags & _TIF_32BIT) --#endif --#elif defined(AFS_PPC64_LINUX20_ENV) -- if (current->thread.flags & PPC_FLAG_32BIT) -- --#elif defined(AFS_S390X_LINUX26_ENV) -- if (test_thread_flag(TIF_31BIT)) --#elif defined(AFS_S390X_LINUX20_ENV) -- if (current->thread.flags & S390_FLAG_31BIT) --#elif defined(AFS_ARM64_LINUX26_ENV) -- if (is_compat_task()) -+ if (afs_in_compat_syscall()) { -+ struct iparam32 dst32; - --#else --#error iparam32 not done for this linux platform --#endif -- { - AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); - if (!code) - iparam32_to_iparam(&dst32, dst); --- -2.30.1 - |