summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYury Norov <ynorov@caviumnetworks.com>2018-05-16 04:18:49 -0400
committerArnd Bergmann <arnd@arndb.de>2019-02-19 04:10:05 -0500
commit942fa985e9f161ac018ce2230d3e6f7668cca6ac (patch)
treec4f0d0fead0b4a0af0a1f6ecf87d8f79295b9485
parent0d0216c03a7a14e121abb2e3eb38e491767c36e8 (diff)
32-bit userspace ABI: introduce ARCH_32BIT_OFF_T config option
All new 32-bit architectures should have 64-bit userspace off_t type, but existing architectures has 32-bit ones. To enforce the rule, new config option is added to arch/Kconfig that defaults ARCH_32BIT_OFF_T to be disabled for new 32-bit architectures. All existing 32-bit architectures enable it explicitly. New option affects force_o_largefile() behaviour. Namely, if userspace off_t is 64-bits long, we have no reason to reject user to open big files. Note that even if architectures has only 64-bit off_t in the kernel (arc, c6x, h8300, hexagon, nios2, openrisc, and unicore32), a libc may use 32-bit off_t, and therefore want to limit the file size to 4GB unless specified differently in the open flags. Signed-off-by: Yury Norov <ynorov@caviumnetworks.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Yury Norov <ynorov@marvell.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r--arch/Kconfig10
-rw-r--r--arch/arc/Kconfig1
-rw-r--r--arch/arm/Kconfig1
-rw-r--r--arch/c6x/Kconfig1
-rw-r--r--arch/csky/Kconfig1
-rw-r--r--arch/h8300/Kconfig1
-rw-r--r--arch/hexagon/Kconfig1
-rw-r--r--arch/m68k/Kconfig1
-rw-r--r--arch/microblaze/Kconfig1
-rw-r--r--arch/mips/Kconfig1
-rw-r--r--arch/nds32/Kconfig1
-rw-r--r--arch/nios2/Kconfig1
-rw-r--r--arch/openrisc/Kconfig1
-rw-r--r--arch/parisc/Kconfig1
-rw-r--r--arch/powerpc/Kconfig1
-rw-r--r--arch/riscv/Kconfig1
-rw-r--r--arch/sh/Kconfig1
-rw-r--r--arch/sparc/Kconfig1
-rw-r--r--arch/unicore32/Kconfig1
-rw-r--r--arch/x86/Kconfig1
-rw-r--r--arch/x86/um/Kconfig1
-rw-r--r--arch/xtensa/Kconfig1
-rw-r--r--include/linux/fcntl.h2
23 files changed, 32 insertions, 1 deletions
diff --git a/arch/Kconfig b/arch/Kconfig
index 46db715a7f42..cd5f443865ec 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -276,6 +276,16 @@ config ARCH_THREAD_STACK_ALLOCATOR
276config ARCH_WANTS_DYNAMIC_TASK_STRUCT 276config ARCH_WANTS_DYNAMIC_TASK_STRUCT
277 bool 277 bool
278 278
279config ARCH_32BIT_OFF_T
280 bool
281 depends on !64BIT
282 help
283 All new 32-bit architectures should have 64-bit off_t type on
284 userspace side which corresponds to the loff_t kernel type. This
285 is the requirement for modern ABIs. Some existing architectures
286 still support 32-bit off_t. This option is enabled for all such
287 architectures explicitly.
288
279config HAVE_REGS_AND_STACK_ACCESS_API 289config HAVE_REGS_AND_STACK_ACCESS_API
280 bool 290 bool
281 help 291 help
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index 376366a7db81..1cfe4197146f 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -14,6 +14,7 @@ config ARC
14 select ARCH_HAS_SYNC_DMA_FOR_CPU 14 select ARCH_HAS_SYNC_DMA_FOR_CPU
15 select ARCH_HAS_SYNC_DMA_FOR_DEVICE 15 select ARCH_HAS_SYNC_DMA_FOR_DEVICE
16 select ARCH_SUPPORTS_ATOMIC_RMW if ARC_HAS_LLSC 16 select ARCH_SUPPORTS_ATOMIC_RMW if ARC_HAS_LLSC
17 select ARCH_32BIT_OFF_T
17 select BUILDTIME_EXTABLE_SORT 18 select BUILDTIME_EXTABLE_SORT
18 select CLONE_BACKWARDS 19 select CLONE_BACKWARDS
19 select COMMON_CLK 20 select COMMON_CLK
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 664e918e2624..8933f7337e56 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -2,6 +2,7 @@
2config ARM 2config ARM
3 bool 3 bool
4 default y 4 default y
5 select ARCH_32BIT_OFF_T
5 select ARCH_CLOCKSOURCE_DATA 6 select ARCH_CLOCKSOURCE_DATA
6 select ARCH_DISCARD_MEMBLOCK if !HAVE_ARCH_PFN_VALID && !KEXEC 7 select ARCH_DISCARD_MEMBLOCK if !HAVE_ARCH_PFN_VALID && !KEXEC
7 select ARCH_HAS_DEBUG_VIRTUAL if MMU 8 select ARCH_HAS_DEBUG_VIRTUAL if MMU
diff --git a/arch/c6x/Kconfig b/arch/c6x/Kconfig
index 456e154674d1..e5cd3c5f8399 100644
--- a/arch/c6x/Kconfig
+++ b/arch/c6x/Kconfig
@@ -6,6 +6,7 @@
6 6
7config C6X 7config C6X
8 def_bool y 8 def_bool y
9 select ARCH_32BIT_OFF_T
9 select ARCH_HAS_SYNC_DMA_FOR_CPU 10 select ARCH_HAS_SYNC_DMA_FOR_CPU
10 select ARCH_HAS_SYNC_DMA_FOR_DEVICE 11 select ARCH_HAS_SYNC_DMA_FOR_DEVICE
11 select CLKDEV_LOOKUP 12 select CLKDEV_LOOKUP
diff --git a/arch/csky/Kconfig b/arch/csky/Kconfig
index 398113c845f5..6959e0b1e956 100644
--- a/arch/csky/Kconfig
+++ b/arch/csky/Kconfig
@@ -1,5 +1,6 @@
1config CSKY 1config CSKY
2 def_bool y 2 def_bool y
3 select ARCH_32BIT_OFF_T
3 select ARCH_HAS_SYNC_DMA_FOR_CPU 4 select ARCH_HAS_SYNC_DMA_FOR_CPU
4 select ARCH_HAS_SYNC_DMA_FOR_DEVICE 5 select ARCH_HAS_SYNC_DMA_FOR_DEVICE
5 select ARCH_USE_BUILTIN_BSWAP 6 select ARCH_USE_BUILTIN_BSWAP
diff --git a/arch/h8300/Kconfig b/arch/h8300/Kconfig
index 6472a0685470..c071da34e081 100644
--- a/arch/h8300/Kconfig
+++ b/arch/h8300/Kconfig
@@ -1,6 +1,7 @@
1# SPDX-License-Identifier: GPL-2.0 1# SPDX-License-Identifier: GPL-2.0
2config H8300 2config H8300
3 def_bool y 3 def_bool y
4 select ARCH_32BIT_OFF_T
4 select GENERIC_ATOMIC64 5 select GENERIC_ATOMIC64
5 select HAVE_UID16 6 select HAVE_UID16
6 select VIRT_TO_BUS 7 select VIRT_TO_BUS
diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig
index fb2fbfcfc532..ac441680dcc0 100644
--- a/arch/hexagon/Kconfig
+++ b/arch/hexagon/Kconfig
@@ -4,6 +4,7 @@ comment "Linux Kernel Configuration for Hexagon"
4 4
5config HEXAGON 5config HEXAGON
6 def_bool y 6 def_bool y
7 select ARCH_32BIT_OFF_T
7 select ARCH_HAS_SYNC_DMA_FOR_DEVICE 8 select ARCH_HAS_SYNC_DMA_FOR_DEVICE
8 select ARCH_NO_PREEMPT 9 select ARCH_NO_PREEMPT
9 select HAVE_OPROFILE 10 select HAVE_OPROFILE
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index e173ea2ff395..b54206408f91 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -2,6 +2,7 @@
2config M68K 2config M68K
3 bool 3 bool
4 default y 4 default y
5 select ARCH_32BIT_OFF_T
5 select ARCH_HAS_SYNC_DMA_FOR_DEVICE if HAS_DMA 6 select ARCH_HAS_SYNC_DMA_FOR_DEVICE if HAS_DMA
6 select ARCH_MIGHT_HAVE_PC_PARPORT if ISA 7 select ARCH_MIGHT_HAVE_PC_PARPORT if ISA
7 select ARCH_NO_COHERENT_DMA_MMAP if !MMU 8 select ARCH_NO_COHERENT_DMA_MMAP if !MMU
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig
index 58aff2653d86..a51b965b3b82 100644
--- a/arch/microblaze/Kconfig
+++ b/arch/microblaze/Kconfig
@@ -1,5 +1,6 @@
1config MICROBLAZE 1config MICROBLAZE
2 def_bool y 2 def_bool y
3 select ARCH_32BIT_OFF_T
3 select ARCH_NO_SWAP 4 select ARCH_NO_SWAP
4 select ARCH_HAS_DMA_COHERENT_TO_PFN if MMU 5 select ARCH_HAS_DMA_COHERENT_TO_PFN if MMU
5 select ARCH_HAS_GCOV_PROFILE_ALL 6 select ARCH_HAS_GCOV_PROFILE_ALL
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 787290781b8c..d80ccabd3c06 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2,6 +2,7 @@
2config MIPS 2config MIPS
3 bool 3 bool
4 default y 4 default y
5 select ARCH_32BIT_OFF_T if !64BIT
5 select ARCH_BINFMT_ELF_STATE if MIPS_FP_SUPPORT 6 select ARCH_BINFMT_ELF_STATE if MIPS_FP_SUPPORT
6 select ARCH_CLOCKSOURCE_DATA 7 select ARCH_CLOCKSOURCE_DATA
7 select ARCH_DISCARD_MEMBLOCK 8 select ARCH_DISCARD_MEMBLOCK
diff --git a/arch/nds32/Kconfig b/arch/nds32/Kconfig
index dda1906bba11..addb7f5f5264 100644
--- a/arch/nds32/Kconfig
+++ b/arch/nds32/Kconfig
@@ -5,6 +5,7 @@
5 5
6config NDS32 6config NDS32
7 def_bool y 7 def_bool y
8 select ARCH_32BIT_OFF_T
8 select ARCH_HAS_SYNC_DMA_FOR_CPU 9 select ARCH_HAS_SYNC_DMA_FOR_CPU
9 select ARCH_HAS_SYNC_DMA_FOR_DEVICE 10 select ARCH_HAS_SYNC_DMA_FOR_DEVICE
10 select ARCH_WANT_FRAME_POINTERS if FTRACE 11 select ARCH_WANT_FRAME_POINTERS if FTRACE
diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig
index 532343eebf89..c3e913ef4f0c 100644
--- a/arch/nios2/Kconfig
+++ b/arch/nios2/Kconfig
@@ -1,6 +1,7 @@
1# SPDX-License-Identifier: GPL-2.0 1# SPDX-License-Identifier: GPL-2.0
2config NIOS2 2config NIOS2
3 def_bool y 3 def_bool y
4 select ARCH_32BIT_OFF_T
4 select ARCH_HAS_SYNC_DMA_FOR_CPU 5 select ARCH_HAS_SYNC_DMA_FOR_CPU
5 select ARCH_HAS_SYNC_DMA_FOR_DEVICE 6 select ARCH_HAS_SYNC_DMA_FOR_DEVICE
6 select ARCH_NO_SWAP 7 select ARCH_NO_SWAP
diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig
index 09ab59e942ae..a5e361fbb75a 100644
--- a/arch/openrisc/Kconfig
+++ b/arch/openrisc/Kconfig
@@ -6,6 +6,7 @@
6 6
7config OPENRISC 7config OPENRISC
8 def_bool y 8 def_bool y
9 select ARCH_32BIT_OFF_T
9 select ARCH_HAS_SYNC_DMA_FOR_DEVICE 10 select ARCH_HAS_SYNC_DMA_FOR_DEVICE
10 select OF 11 select OF
11 select OF_EARLY_FLATTREE 12 select OF_EARLY_FLATTREE
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index 7ca2c3ebad64..c8e621296092 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -1,6 +1,7 @@
1# SPDX-License-Identifier: GPL-2.0 1# SPDX-License-Identifier: GPL-2.0
2config PARISC 2config PARISC
3 def_bool y 3 def_bool y
4 select ARCH_32BIT_OFF_T if !64BIT
4 select ARCH_MIGHT_HAVE_PC_PARPORT 5 select ARCH_MIGHT_HAVE_PC_PARPORT
5 select HAVE_IDE 6 select HAVE_IDE
6 select HAVE_OPROFILE 7 select HAVE_OPROFILE
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 2890d36eb531..375d0dc0dc7d 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -128,6 +128,7 @@ config PPC
128 # 128 #
129 # Please keep this list sorted alphabetically. 129 # Please keep this list sorted alphabetically.
130 # 130 #
131 select ARCH_32BIT_OFF_T if PPC32
131 select ARCH_HAS_DEBUG_VIRTUAL 132 select ARCH_HAS_DEBUG_VIRTUAL
132 select ARCH_HAS_DEVMEM_IS_ALLOWED 133 select ARCH_HAS_DEVMEM_IS_ALLOWED
133 select ARCH_HAS_DMA_SET_COHERENT_MASK 134 select ARCH_HAS_DMA_SET_COHERENT_MASK
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index feeeaa60697c..09fa3a87bf30 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -11,6 +11,7 @@ config 32BIT
11 11
12config RISCV 12config RISCV
13 def_bool y 13 def_bool y
14 select ARCH_32BIT_OFF_T if !64BIT
14 # even on 32-bit, physical (and DMA) addresses are > 32-bits 15 # even on 32-bit, physical (and DMA) addresses are > 32-bits
15 select PHYS_ADDR_T_64BIT 16 select PHYS_ADDR_T_64BIT
16 select OF 17 select OF
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index a9c36f95744a..d9a9144dec35 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -62,6 +62,7 @@ config SUPERH
62 62
63config SUPERH32 63config SUPERH32
64 def_bool "$(ARCH)" = "sh" 64 def_bool "$(ARCH)" = "sh"
65 select ARCH_32BIT_OFF_T
65 select HAVE_KPROBES 66 select HAVE_KPROBES
66 select HAVE_KRETPROBES 67 select HAVE_KRETPROBES
67 select HAVE_IOREMAP_PROT if MMU && !X2TLB 68 select HAVE_IOREMAP_PROT if MMU && !X2TLB
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index d5dd652fb8cc..40f8f4f73fe8 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -49,6 +49,7 @@ config SPARC
49 49
50config SPARC32 50config SPARC32
51 def_bool !64BIT 51 def_bool !64BIT
52 select ARCH_32BIT_OFF_T
52 select ARCH_HAS_SYNC_DMA_FOR_CPU 53 select ARCH_HAS_SYNC_DMA_FOR_CPU
53 select GENERIC_ATOMIC64 54 select GENERIC_ATOMIC64
54 select CLZ_TAB 55 select CLZ_TAB
diff --git a/arch/unicore32/Kconfig b/arch/unicore32/Kconfig
index c3a41bfe161b..a7f1ae58d211 100644
--- a/arch/unicore32/Kconfig
+++ b/arch/unicore32/Kconfig
@@ -1,6 +1,7 @@
1# SPDX-License-Identifier: GPL-2.0 1# SPDX-License-Identifier: GPL-2.0
2config UNICORE32 2config UNICORE32
3 def_bool y 3 def_bool y
4 select ARCH_32BIT_OFF_T
4 select ARCH_HAS_DEVMEM_IS_ALLOWED 5 select ARCH_HAS_DEVMEM_IS_ALLOWED
5 select ARCH_MIGHT_HAVE_PC_PARPORT 6 select ARCH_MIGHT_HAVE_PC_PARPORT
6 select ARCH_MIGHT_HAVE_PC_SERIO 7 select ARCH_MIGHT_HAVE_PC_SERIO
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 15af091611e2..7aac274c2849 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -47,6 +47,7 @@ config X86
47 select ACPI_LEGACY_TABLES_LOOKUP if ACPI 47 select ACPI_LEGACY_TABLES_LOOKUP if ACPI
48 select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI 48 select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI
49 select ANON_INODES 49 select ANON_INODES
50 select ARCH_32BIT_OFF_T if X86_32
50 select ARCH_CLOCKSOURCE_DATA 51 select ARCH_CLOCKSOURCE_DATA
51 select ARCH_CLOCKSOURCE_INIT 52 select ARCH_CLOCKSOURCE_INIT
52 select ARCH_DISCARD_MEMBLOCK 53 select ARCH_DISCARD_MEMBLOCK
diff --git a/arch/x86/um/Kconfig b/arch/x86/um/Kconfig
index f518b4744ff8..ab14e6f73ca4 100644
--- a/arch/x86/um/Kconfig
+++ b/arch/x86/um/Kconfig
@@ -17,6 +17,7 @@ config 64BIT
17config X86_32 17config X86_32
18 def_bool !64BIT 18 def_bool !64BIT
19 select HAVE_AOUT 19 select HAVE_AOUT
20 select ARCH_32BIT_OFF_T
20 select ARCH_WANT_IPC_PARSE_VERSION 21 select ARCH_WANT_IPC_PARSE_VERSION
21 select MODULES_USE_ELF_REL 22 select MODULES_USE_ELF_REL
22 select CLONE_BACKWARDS 23 select CLONE_BACKWARDS
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig
index 20a0756f27ef..2033b4485cc4 100644
--- a/arch/xtensa/Kconfig
+++ b/arch/xtensa/Kconfig
@@ -1,6 +1,7 @@
1# SPDX-License-Identifier: GPL-2.0 1# SPDX-License-Identifier: GPL-2.0
2config XTENSA 2config XTENSA
3 def_bool y 3 def_bool y
4 select ARCH_32BIT_OFF_T
4 select ARCH_HAS_SYNC_DMA_FOR_CPU 5 select ARCH_HAS_SYNC_DMA_FOR_CPU
5 select ARCH_HAS_SYNC_DMA_FOR_DEVICE 6 select ARCH_HAS_SYNC_DMA_FOR_DEVICE
6 select ARCH_NO_COHERENT_DMA_MMAP if !MMU 7 select ARCH_NO_COHERENT_DMA_MMAP if !MMU
diff --git a/include/linux/fcntl.h b/include/linux/fcntl.h
index 27dc7a60693e..d019df946cb2 100644
--- a/include/linux/fcntl.h
+++ b/include/linux/fcntl.h
@@ -12,7 +12,7 @@
12 O_NOATIME | O_CLOEXEC | O_PATH | __O_TMPFILE) 12 O_NOATIME | O_CLOEXEC | O_PATH | __O_TMPFILE)
13 13
14#ifndef force_o_largefile 14#ifndef force_o_largefile
15#define force_o_largefile() (BITS_PER_LONG != 32) 15#define force_o_largefile() (!IS_ENABLED(CONFIG_ARCH_32BIT_OFF_T))
16#endif 16#endif
17 17
18#if BITS_PER_LONG == 32 18#if BITS_PER_LONG == 32