linux/arch/xtensa/include/asm
Linus Torvalds 30c44659f4 Merge branch 'strscpy' of git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile
Pull strscpy string copy function implementation from Chris Metcalf.

Chris sent this during the merge window, but I waffled back and forth on
the pull request, which is why it's going in only now.

The new "strscpy()" function is definitely easier to use and more secure
than either strncpy() or strlcpy(), both of which are horrible nasty
interfaces that have serious and irredeemable problems.

strncpy() has a useless return value, and doesn't NUL-terminate an
overlong result.  To make matters worse, it pads a short result with
zeroes, which is a performance disaster if you have big buffers.

strlcpy(), by contrast, is a mis-designed "fix" for strlcpy(), lacking
the insane NUL padding, but having a differently broken return value
which returns the original length of the source string.  Which means
that it will read characters past the count from the source buffer, and
you have to trust the source to be properly terminated.  It also makes
error handling fragile, since the test for overflow is unnecessarily
subtle.

strscpy() avoids both these problems, guaranteeing the NUL termination
(but not excessive padding) if the destination size wasn't zero, and
making the overflow condition very obvious by returning -E2BIG.  It also
doesn't read past the size of the source, and can thus be used for
untrusted source data too.

So why did I waffle about this for so long?

Every time we introduce a new-and-improved interface, people start doing
these interminable series of trivial conversion patches.

And every time that happens, somebody does some silly mistake, and the
conversion patch to the improved interface actually makes things worse.
Because the patch is mindnumbing and trivial, nobody has the attention
span to look at it carefully, and it's usually done over large swatches
of source code which means that not every conversion gets tested.

So I'm pulling the strscpy() support because it *is* a better interface.
But I will refuse to pull mindless conversion patches.  Use this in
places where it makes sense, but don't do trivial patches to fix things
that aren't actually known to be broken.

* 'strscpy' of git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile:
  tile: use global strscpy() rather than private copy
  string: provide strscpy()
  Make asm/word-at-a-time.h available on all architectures
2015-10-04 16:31:13 +01:00
..
asm-offsets.h kbuild: move asm-offsets.h to include/generated 2009-12-12 13:08:14 +01:00
asmmacro.h
atomic.h Merge branch 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-09-03 15:46:07 -07:00
barrier.h arch,xtensa: Convert smp_mb__*() 2014-04-18 14:20:47 +02:00
bitops.h arch,xtensa: Convert smp_mb__*() 2014-04-18 14:20:47 +02:00
bootparam.h xtensa: split bootparam and kernel meminfo 2014-04-02 01:35:51 +04:00
bugs.h
cache.h dma-mapping: rename ARCH_KMALLOC_MINALIGN to ARCH_DMA_MINALIGN 2010-08-11 08:59:21 -07:00
cacheasm.h xtensa: clean up files to make them code-style compliant 2012-12-18 21:10:25 -08:00
cacheflush.h xtensa: nommu: don't build most of the cache flushing code 2014-10-21 13:28:50 +04:00
checksum.h xtensa: add missing include asm/uaccess.h to checksum.h 2013-02-23 19:23:13 -08:00
cmpxchg.h xtensa: implement fake NMI 2015-08-17 07:33:39 +03:00
coprocessor.h xtensa: reorganize SR referencing 2012-10-15 21:48:08 -07:00
current.h xtensa: clean up files to make them code-style compliant 2012-12-18 21:10:25 -08:00
delay.h xtensa: implement ndelay 2014-01-15 00:28:11 +04:00
device.h xtensa: reimplement DMA API using common helpers 2015-08-17 07:31:00 +03:00
dma-mapping.h dma-mapping: consolidate dma_set_mask 2015-09-10 13:29:01 -07:00
dma.h Fix common misspellings 2011-03-31 11:26:23 -03:00
elf.h xtensa: add support for TLS 2013-02-23 19:35:57 -08:00
fb.h
fixmap.h xtensa: support aliasing cache in k[un]map_atomic 2014-08-14 11:59:21 +04:00
flat.h xtensa: add flat support 2009-04-02 23:41:29 -07:00
ftrace.h ftrace: Make CALLER_ADDRx macros more generic 2014-05-21 03:10:32 -04:00
futex.h xtensa: implement robust futex atomic uaccess ops 2014-01-14 10:19:51 -08:00
gpio.h gpiolib/arches: Centralise bolierplate asm/gpio.h 2012-05-11 18:00:14 -06:00
highmem.h xtensa: fix kmap_prot definition 2014-12-09 03:22:57 +03:00
hw_irq.h
initialize_mmu.h xtensa: nommu: set up cache and atomctl in initialize_mmu 2014-10-21 13:28:56 +04:00
io.h arch: introduce memremap() 2015-08-14 13:23:28 -04:00
irq.h xtensa: implement CPU hotplug 2014-01-14 10:19:59 -08:00
irqflags.h xtensa: implement fake NMI 2015-08-17 07:33:39 +03:00
Kbuild Merge branch 'strscpy' of git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile 2015-10-04 16:31:13 +01:00
mmu_context.h xtensa: nommu: move init_mmu stub to nommu_context.h 2014-10-21 13:28:44 +04:00
mmu.h xtensa: add SMP support 2014-01-14 10:19:58 -08:00
module.h Make most arch asm/module.h files use asm-generic/module.h 2012-09-28 14:31:03 +09:30
mutex.h
mxregs.h xtensa: add MX irqchip 2014-01-14 10:19:58 -08:00
nommu_context.h xtensa: nommu: move init_mmu stub to nommu_context.h 2014-10-21 13:28:44 +04:00
page.h xtensa: nommu: clean up memory map dump 2014-10-21 13:28:58 +04:00
param.h UAPI: (Scripted) Disintegrate arch/xtensa/include/asm 2012-10-15 21:48:53 -07:00
pci-bridge.h xtensa: clean up files to make them code-style compliant 2012-12-18 21:10:25 -08:00
pci.h remove <asm/scatterlist.h> 2015-05-05 13:35:39 -06:00
perf_event.h xtensa: enable HAVE_PERF_EVENTS 2014-01-15 00:27:03 +04:00
pgalloc.h xtensa: use buddy allocator for PTE table 2013-11-15 09:32:19 +09:00
pgtable.h mm: make FIRST_USER_ADDRESS unsigned long on all archs 2015-02-11 17:06:03 -08:00
platform.h xtensa: remove unused platform_init_irq() 2013-06-05 10:14:20 -07:00
processor.h xtensa: implement fake NMI 2015-08-17 07:33:39 +03:00
ptrace.h xtensa: add SMP support 2014-01-14 10:19:58 -08:00
regs.h xtensa: keep a3 and excsave1 on entry to exception handlers 2013-09-06 09:47:41 -07:00
rwsem.h rwsem: Move duplicate function prototypes to linux/rwsem.h 2011-01-27 12:30:39 +01:00
segment.h
serial.h
shmparam.h
signal.h consolidate kernel-side struct sigaction declarations 2013-02-03 15:09:22 -05:00
smp.h xtensa: implement CPU hotplug 2014-01-14 10:19:59 -08:00
spinlock_types.h xtensa: fix arch spinlock function names 2014-01-14 10:19:53 -08:00
spinlock.h xtensa: fix arch spinlock function names 2014-01-14 10:19:53 -08:00
stacktrace.h xtensa: move oprofile stack tracing to stacktrace.c 2015-08-17 07:32:49 +03:00
string.h xtensa: fix str[n]cmp return value 2013-02-23 19:22:31 -08:00
switch_to.h Disintegrate asm/system.h for Xtensa 2012-03-28 18:30:03 +01:00
syscall.h xtensa: switch to generic sigaltstack 2013-02-03 18:16:27 -05:00
sysmem.h xtensa: keep sysmem banks ordered in add_sysmem_bank 2014-04-02 01:35:52 +04:00
thread_info.h xtensa: Remove signal translation and exec_domain 2015-04-12 21:03:29 +02:00
timex.h xtensa: add SMP support 2014-01-14 10:19:58 -08:00
tlb.h mm: Pass virtual address to [__]p{te,ud,md}_free_tlb() 2009-07-27 12:10:38 -07:00
tlbflush.h xtensa: optimize local_flush_tlb_kernel_range 2014-04-06 21:29:17 +04:00
traps.h xtensa: fix kernel register spilling 2015-08-17 07:33:35 +03:00
types.h UAPI: (Scripted) Disintegrate arch/xtensa/include/asm 2012-10-15 21:48:53 -07:00
uaccess.h xtensa: macro whitespace fixes 2015-01-13 15:24:10 +02:00
ucontext.h
unaligned.h
unistd.h consolidate cond_syscall and SYSCALL_ALIAS declarations 2013-03-03 22:55:19 -05:00
user.h
vectors.h xtensa: nommu: fix load address definitions 2014-10-21 13:28:53 +04:00
vga.h