diff options
author | Yury Norov <ynorov@caviumnetworks.com> | 2018-05-16 04:18:49 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2019-02-19 04:10:05 -0500 |
commit | 942fa985e9f161ac018ce2230d3e6f7668cca6ac (patch) | |
tree | c4f0d0fead0b4a0af0a1f6ecf87d8f79295b9485 | |
parent | 0d0216c03a7a14e121abb2e3eb38e491767c36e8 (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/Kconfig | 10 | ||||
-rw-r--r-- | arch/arc/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/Kconfig | 1 | ||||
-rw-r--r-- | arch/c6x/Kconfig | 1 | ||||
-rw-r--r-- | arch/csky/Kconfig | 1 | ||||
-rw-r--r-- | arch/h8300/Kconfig | 1 | ||||
-rw-r--r-- | arch/hexagon/Kconfig | 1 | ||||
-rw-r--r-- | arch/m68k/Kconfig | 1 | ||||
-rw-r--r-- | arch/microblaze/Kconfig | 1 | ||||
-rw-r--r-- | arch/mips/Kconfig | 1 | ||||
-rw-r--r-- | arch/nds32/Kconfig | 1 | ||||
-rw-r--r-- | arch/nios2/Kconfig | 1 | ||||
-rw-r--r-- | arch/openrisc/Kconfig | 1 | ||||
-rw-r--r-- | arch/parisc/Kconfig | 1 | ||||
-rw-r--r-- | arch/powerpc/Kconfig | 1 | ||||
-rw-r--r-- | arch/riscv/Kconfig | 1 | ||||
-rw-r--r-- | arch/sh/Kconfig | 1 | ||||
-rw-r--r-- | arch/sparc/Kconfig | 1 | ||||
-rw-r--r-- | arch/unicore32/Kconfig | 1 | ||||
-rw-r--r-- | arch/x86/Kconfig | 1 | ||||
-rw-r--r-- | arch/x86/um/Kconfig | 1 | ||||
-rw-r--r-- | arch/xtensa/Kconfig | 1 | ||||
-rw-r--r-- | include/linux/fcntl.h | 2 |
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 | |||
276 | config ARCH_WANTS_DYNAMIC_TASK_STRUCT | 276 | config ARCH_WANTS_DYNAMIC_TASK_STRUCT |
277 | bool | 277 | bool |
278 | 278 | ||
279 | config 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 | |||
279 | config HAVE_REGS_AND_STACK_ACCESS_API | 289 | config 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 @@ | |||
2 | config ARM | 2 | config 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 | ||
7 | config C6X | 7 | config 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 @@ | |||
1 | config CSKY | 1 | config 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 |
2 | config H8300 | 2 | config 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 | ||
5 | config HEXAGON | 5 | config 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 @@ | |||
2 | config M68K | 2 | config 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 @@ | |||
1 | config MICROBLAZE | 1 | config 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 @@ | |||
2 | config MIPS | 2 | config 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 | ||
6 | config NDS32 | 6 | config 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 |
2 | config NIOS2 | 2 | config 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 | ||
7 | config OPENRISC | 7 | config 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 |
2 | config PARISC | 2 | config 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 | ||
12 | config RISCV | 12 | config 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 | ||
63 | config SUPERH32 | 63 | config 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 | ||
50 | config SPARC32 | 50 | config 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 |
2 | config UNICORE32 | 2 | config 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 | |||
17 | config X86_32 | 17 | config 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 |
2 | config XTENSA | 2 | config 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 |