linux_dsm_epyc7002/arch/ia64/include/asm
Linus Torvalds 0c389d89ab maccess: make get_kernel_nofault() check for minimal type compatibility
Now that we've renamed probe_kernel_address() to get_kernel_nofault()
and made it look and behave more in line with get_user(), some of the
subtle type behavior differences end up being more obvious and possibly
dangerous.

When you do

        get_user(val, user_ptr);

the type of the access comes from the "user_ptr" part, and the above
basically acts as

        val = *user_ptr;

by design (except, of course, for the fact that the actual dereference
is done with a user access).

Note how in the above case, the type of the end result comes from the
pointer argument, and then the value is cast to the type of 'val' as
part of the assignment.

So the type of the pointer is ultimately the more important type both
for the access itself.

But 'get_kernel_nofault()' may now _look_ similar, but it behaves very
differently.  When you do

        get_kernel_nofault(val, kernel_ptr);

it behaves like

        val = *(typeof(val) *)kernel_ptr;

except, of course, for the fact that the actual dereference is done with
exception handling so that a faulting access is suppressed and returned
as the error code.

But note how different the casting behavior of the two superficially
similar accesses are: one does the actual access in the size of the type
the pointer points to, while the other does the access in the size of
the target, and ignores the pointer type entirely.

Actually changing get_kernel_nofault() to act like get_user() is almost
certainly the right thing to do eventually, but in the meantime this
patch adds logit to at least verify that the pointer type is compatible
with the type of the result.

In many cases, this involves just casting the pointer to 'void *' to
make it obvious that the type of the pointer is not the important part.
It's not how 'get_user()' acts, but at least the behavioral difference
is now obvious and explicit.

Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2020-06-18 12:10:37 -07:00
..
native treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
sn ia64: remove the SGI UV simulator support 2019-08-16 11:33:57 -07:00
uv ia64: remove support for machvecs 2019-08-16 14:32:26 -07:00
acenv.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
acpi-ext.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
acpi.h ACPI/sleep: Convert acpi_wakeup_address into a function 2019-12-10 10:15:48 +01:00
agp.h ia64: agp: Replace empty define with do while 2019-12-04 13:36:16 +10:00
asm-offsets.h
asm-prototypes.h
asmmacro.h
atomic.h locking/atomic, ia64: Use s64 for atomic64 2019-06-03 12:32:56 +02:00
barrier.h
bitops.h
bug.h
bugs.h
cache.h
cacheflush.h mm: rename flush_icache_user_range to flush_icache_user_page 2020-06-08 11:05:58 -07:00
checksum.h take the dummy csum_and_copy_from_user() into net/checksum.h 2020-05-29 16:11:50 -04:00
clocksource.h
cpu.h
cputime.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
current.h
cyclone.h
delay.h
device.h ia64: Hide the archdata.iommu field behind generic IOMMU_API 2020-05-27 16:41:29 +02:00
div64.h
dma-mapping.h ia64: remove the zx1 swiotlb machvec 2019-08-16 11:33:57 -07:00
dma.h ia64: remove CONFIG_PCI ifdefs 2019-08-16 11:33:57 -07:00
dmi.h
early_ioremap.h
elf.h
emergency-restart.h
esi.h
exception.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
export.h
extable.h
fb.h
fpswa.h
ftrace.h
futex.h futex: arch_futex_atomic_op_inuser() calling conventions change 2020-03-27 23:58:51 -04:00
gcc_intrin.h
hardirq.h
hugetlb.h mm/hugetlb: define a generic fallback for arch_clear_hugepage_flags() 2020-06-03 20:09:46 -07:00
hw_irq.h ia64: replace setup_irq() by request_irq() 2020-03-13 15:21:28 -07:00
idle.h
intrinsics.h
io.h arch: rely on asm-generic/io.h for default ioremap_* definitions 2019-11-11 21:18:19 +01:00
iommu_table.h
iommu.h iommu/vt-d: Check VT-d RMRR region in BIOS is reported as reserved 2019-11-11 16:06:07 +01:00
iosapic.h ia64: remove the hpsim platform 2019-08-16 11:33:57 -07:00
irq_regs.h
irq_remapping.h
irq.h ia64: remove support for the SGI SN2 platform 2019-08-16 11:33:57 -07:00
irqflags.h ia64: remove stale paravirt leftovers 2019-12-02 14:18:12 -08:00
Kbuild asm-generic: make more kernel-space headers mandatory 2020-04-02 09:35:25 -07:00
kdebug.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
kexec.h
kmap_types.h
kprobes.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
kregs.h
libata-portmap.h
linkage.h
local64.h
local.h
mca_asm.h
mca.h
meminit.h
mman.h
mmiowb.h ia64: remove now unused machvec indirections 2019-08-16 11:33:57 -07:00
mmu_context.h
mmu.h
mmzone.h ia64: remove support for machvecs 2019-08-16 14:32:26 -07:00
module.h arch: split MODULE_ARCH_VERMAGIC definitions out to <asm/vermagic.h> 2020-04-23 10:50:26 +09:00
msidef.h
nodedata.h
numa.h
page.h mm/vma: define a default value for VM_DATA_DEFAULT_FLAGS 2020-04-10 15:36:21 -07:00
pal.h
param.h
parport.h
patch.h
pci.h ia64: rework iommu probing 2019-08-16 11:33:57 -07:00
percpu.h
perfmon.h
pgalloc.h ia64: add support for folded p4d page tables 2020-06-04 19:06:21 -07:00
pgtable.h mm: consolidate pte_index() and pte_offset_*() definitions 2020-06-09 09:39:14 -07:00
processor.h ia64: remove support for machvecs 2019-08-16 14:32:26 -07:00
ptrace.h ia64: pass log level as arg into ia64_do_show_stack() 2020-06-09 09:39:11 -07:00
sal.h efi: ia64: move SAL systab handling out of generic EFI code 2019-08-08 11:01:48 +03:00
sections.h maccess: make get_kernel_nofault() check for minimal type compatibility 2020-06-18 12:10:37 -07:00
serial.h
shmparam.h
signal.h
smp.h
sparsemem.h
spinlock_types.h
spinlock.h
string.h
switch_to.h ia64: remove now unused machvec indirections 2019-08-16 11:33:57 -07:00
syscall.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 193 2019-05-30 11:29:21 -07:00
termios.h
thread_info.h
timex.h
tlb.h ia64: remove support for machvecs 2019-08-16 14:32:26 -07:00
tlbflush.h
topology.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
types.h
uaccess.h mm: introduce include/linux/pgtable.h 2020-06-09 09:39:13 -07:00
unaligned.h
uncached.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 206 2019-05-30 11:29:53 -07:00
unistd.h
unwind.h
user.h
ustack.h
vermagic.h arch: split MODULE_ARCH_VERMAGIC definitions out to <asm/vermagic.h> 2020-04-23 10:50:26 +09:00
vga.h remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
vmalloc.h mm/vmalloc: Add empty <asm/vmalloc.h> headers and use them from <linux/vmalloc.h> 2019-12-10 10:12:55 +01:00
xor.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 47 2019-05-24 17:27:13 +02:00