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
..
842
lib: correct 842 decompress for 32 bit
2015-05-13 10:31:59 +08:00
fonts
fonts: Add 6x10 font
2014-10-09 11:35:48 +03:00
lz4
lz4: fix system halt at boot kernel on x86_64
2015-05-24 11:56:29 -07:00
lzo
lzo: check for length overrun in variable length encoding.
2014-09-28 11:08:01 +02:00
mpi
MPI: Fix mpi_read_buffer
2015-08-25 21:13:16 +08:00
raid6
md/raid6: delta syndrome for ARM NEON
2015-08-31 19:29:05 +02:00
reed_solomon
xz
lib/xz: enable all filters by default in Kconfig
2014-06-04 16:54:18 -07:00
zlib_deflate
zlib_deflate/deftree: remove bi_reverse()
2015-09-10 13:29:01 -07:00
zlib_inflate
zlib: clean up some dead code
2014-08-06 18:01:24 -07:00
.gitignore
argv_split.c
asn1_decoder.c
ASN.1: Handle 'ANY OPTIONAL' in grammar
2015-08-05 13:38:07 +01:00
assoc_array.c
assoc_array: Include rcupdate.h for call_rcu() definition
2015-01-07 16:08:41 +00:00
atomic64.c
atomic: Provide atomic_{or,xor,and}
2015-07-27 14:06:24 +02:00
atomic64_test.c
atomic: Add simple atomic_t tests
2015-07-27 14:06:24 +02:00
audit.c
syscalls: implement execveat() system call
2014-12-13 12:42:51 -08:00
bcd.c
bch.c
bitmap.c
lib/bitmap.c: bitmap_parselist can accept string with whitespaces on head or tail
2015-09-10 13:29:01 -07:00
bitrev.c
ARM: 8187/1: add CONFIG_HAVE_ARCH_BITREVERSE to support rbit instruction
2014-12-22 16:43:06 +00:00
bsearch.c
btree.c
lib/btree.c: fix leak of whole btree nodes
2014-06-04 16:54:18 -07:00
bug.c
module: Sanitize RCU usage and locking
2015-05-28 11:31:52 +09:30
build_OID_registry
bust_spinlocks.c
check_signature.c
checksum.c
lib/checksum.c: fix build for generic csum_tcpudp_nofold
2015-01-29 11:57:38 -08:00
clz_ctz.c
lib/clz_ctz.c: add prototype declarations in lib/clz_ctz.c
2014-04-03 16:21:12 -07:00
clz_tab.c
cmdline.c
lib: Add a generic cmdline parse function parse_option_str
2014-10-03 18:40:58 +01:00
compat_audit.c
cordic.c
cpu-notifier-error-inject.c
cpu_rmap.c
sched/topology: Rename topology_thread_cpumask() to topology_sibling_cpumask()
2015-05-27 15:22:15 +02:00
cpumask.c
revert "cpumask: don't perform while loop in cpumask_next_and()"
2015-06-18 17:00:23 -10:00
crc-ccitt.c
crc-itu-t.c
lib: crc-itu-t.[ch] fix 0x0x prefix in integer constants
2015-05-26 15:26:43 +02:00
crc-t10dif.c
lib: introduce crc_t10dif_update()
2015-05-30 22:42:24 -07:00
crc7.c
lib/crc7: Shift crc7() output left 1 bit
2014-05-16 14:26:52 -04:00
crc8.c
crc16.c
crc32.c
lib: crc32: Add some additional __pure annotations
2014-06-25 16:04:00 -07:00
crc32defs.h
ctype.c
debug_info.c
kbuild: include core debug info when DEBUG_INFO_REDUCED
2015-06-11 15:08:32 +02:00
debug_locks.c
debugobjects.c
lib/debugobjects.c: convert printk(KERN_DEBUG to pr_debug
2014-06-04 16:53:53 -07:00
dec_and_lock.c
decompress.c
lib/decompress: set the compressor name to NULL on error
2015-07-17 16:39:54 -07:00
decompress_bunzip2.c
lib/decompressors: use real out buf size for gunzip with kernel
2015-09-10 13:29:01 -07:00
decompress_inflate.c
lib/decompressors: use real out buf size for gunzip with kernel
2015-09-10 13:29:01 -07:00
decompress_unlz4.c
lib/decompressors: use real out buf size for gunzip with kernel
2015-09-10 13:29:01 -07:00
decompress_unlzma.c
lib/decompress_unlzma: Do a NULL check for pointer
2015-09-10 13:29:01 -07:00
decompress_unlzo.c
lib/decompressors: use real out buf size for gunzip with kernel
2015-09-10 13:29:01 -07:00
decompress_unxz.c
lib/decompressors: use real out buf size for gunzip with kernel
2015-09-10 13:29:01 -07:00
devres.c
cleanup IORESOURCE_CACHEABLE vs ioremap()
2015-08-10 23:07:06 -04:00
digsig.c
lib/digsig.c: kernel-doc warning fixes
2014-06-04 16:54:19 -07:00
div64.c
lib: correct link to the original source for div64_u64
2015-03-06 23:19:27 +01:00
dma-debug.c
dma-debug: skip debug_dma_assert_idle() when disabled
2015-07-17 16:39:53 -07:00
dump_stack.c
asmlinkage: Add explicit __visible to drivers/*, lib/*, kernel/*
2014-05-05 16:07:46 -07:00
dynamic_debug.c
module: add extra argument for parse_params() callback
2015-05-20 00:25:24 -07:00
dynamic_queue_limits.c
lib/dynamic_queue_limits.c: simplify includes
2015-02-12 18:54:15 -08:00
earlycpio.c
extable.c
fault-inject.c
fault-inject: add ratelimit option
2014-12-13 12:42:52 -08:00
fdt.c
fdt_empty_tree.c
lib: add fdt_empty_tree.c
2014-04-30 19:49:37 +01:00
fdt_ro.c
fdt_rw.c
fdt_strerror.c
fdt_sw.c
fdt_wip.c
find_bit.c
lib: rename lib/find_next_bit.c to lib/find_bit.c
2015-04-17 09:03:54 -04:00
flex_array.c
flex_proportions.c
proportions: add @gfp to init functions
2014-09-08 09:51:30 +09:00
gcd.c
gen_crc32table.c
lib: crc32: constify crc32 lookup table
2015-02-13 21:21:35 -08:00
genalloc.c
genalloc: add support of multiple gen_pools per device
2015-09-04 16:54:41 -07:00
glob.c
lib/glob.c: add CONFIG_GLOB_SELFTEST
2014-08-06 18:01:25 -07:00
halfmd4.c
lib/halfmd4.c: simplify includes
2015-02-12 18:54:15 -08:00
hexdump.c
hexdump: fix for non-aligned buffers
2015-07-17 16:39:53 -07:00
hweight.c
Make ARCH_HAS_FAST_MULTIPLIER a real config variable
2014-09-13 11:14:53 -07:00
idr.c
lib/idr.c: remove redundant include
2015-02-12 18:54:15 -08:00
inflate.c
int_sqrt.c
interval_tree.c
lib/interval_tree.c: simplify includes
2015-02-12 18:54:15 -08:00
interval_tree_test.c
lib: Export interval_tree
2014-05-05 09:09:14 +02:00
iomap.c
Kconfig: rename HAS_IOPORT to HAS_IOPORT_MAP
2014-04-07 16:36:11 -07:00
iomap_copy.c
iommu-common.c
lib/iommu-common.c: do not try to deref a null iommu->lazy_flush() pointer when n < pool->hint
2015-09-22 15:09:53 -07:00
iommu-helper.c
ioremap.c
x86, mm: support huge KVA mappings on x86
2015-04-14 16:49:04 -07:00
iov_iter.c
Merge branch 'iov_iter' into for-next
2015-04-11 22:26:51 -04:00
irq_regs.c
is_single_threaded.c
jedec_ddr_data.c
kasprintf.c
Kconfig
libnvdimm for 4.3:
2015-09-08 14:35:59 -07:00
Kconfig.debug
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
Kconfig.kasan
x86/kasan: Move KASAN_SHADOW_OFFSET to the arch Kconfig
2015-07-06 14:53:15 +02:00
Kconfig.kgdb
kdb: Allow access to sensitive commands to be restricted by default
2014-11-11 09:31:52 -06:00
Kconfig.kmemcheck
kfifo.c
kfifo: use BUG_ON
2014-08-08 15:57:25 -07:00
klist.c
klist: implement klist_prev()
2015-07-28 08:50:42 +01:00
kobject.c
include, lib: add __printf attributes to several function prototypes
2015-07-17 16:39:53 -07:00
kobject_uevent.c
lib/kobject_uevent.c: remove redundant include
2015-02-12 18:54:15 -08:00
kstrtox.c
kstrto*: accept "-0" for signed conversion
2015-09-10 13:29:01 -07:00
kstrtox.h
lcm.c
block: fix blk_stack_limits() regression due to lcm() change
2015-03-31 09:45:50 -06:00
libcrc32c.c
crypto: LLVMLinux: Remove VLAIS usage from libcrc32c.c
2014-10-14 10:51:23 +02:00
list_debug.c
list_sort.c
lib/list_sort: use late_initcall to hook in self tests
2015-06-16 14:12:35 -04:00
llist.c
lib/llist.c: remove redundant include
2015-02-12 18:54:15 -08:00
locking-selftest-hardirq.h
locking-selftest-mutex.h
locking-selftest-rlock-hardirq.h
locking-selftest-rlock-softirq.h
locking-selftest-rlock.h
locking-selftest-rsem.h
locking-selftest-softirq.h
locking-selftest-spin-hardirq.h
locking-selftest-spin-softirq.h
locking-selftest-spin.h
locking-selftest-wlock-hardirq.h
locking-selftest-wlock-softirq.h
locking-selftest-wlock.h
locking-selftest-wsem.h
locking-selftest.c
locking/lockdep: Revert qrwlock recusive stuff
2014-10-03 06:09:30 +02:00
lockref.c
locking/lockref: Remove homebrew cmpxchg64_relaxed() macro definition
2015-08-12 11:59:04 +02:00
lru_cache.c
lru_cache: remove use of seq_printf return value
2015-04-15 16:35:25 -07:00
Makefile
Merge branch 'nmi' of git://ftp.arm.linux.org.uk/~rmk/linux-arm
2015-09-08 12:28:10 -07:00
md5.c
lib/md5.c: simplify include
2015-02-12 18:54:15 -08:00
memory-notifier-error-inject.c
memweight.c
net_utils.c
mac_pton: Use bool not int return
2014-06-25 17:45:43 -07:00
nlattr.c
netlink: pad nla_memcpy dest buffer with zeroes
2015-03-31 14:07:24 -04:00
nmi_backtrace.c
nmi: create generic NMI backtrace implementation
2015-07-17 12:23:17 +01:00
notifier-error-inject.c
notifier-error-inject.h
of-reconfig-notifier-error-inject.c
oid_registry.c
parser.c
pci_iomap.c
libnvdimm for 4.3:
2015-09-08 14:35:59 -07:00
percpu-refcount.c
percpu_ref: make INIT_ATOMIC and switch_to_atomic() sticky
2014-09-24 13:31:50 -04:00
percpu_counter.c
percpu_counter: batch size aware __percpu_counter_compare()
2015-05-29 07:39:34 +10:00
percpu_ida.c
lib/percpu_ida.c: remove redundant includes
2015-02-12 18:54:16 -08:00
percpu_test.c
plist.c
lib/plist.c: remove redundant include
2015-02-12 18:54:16 -08:00
pm-notifier-error-inject.c
proportions.c
proportions: add @gfp to init functions
2014-09-08 09:51:30 +09:00
radix-tree.c
radix-tree: replace preallocated node array with linked list
2015-06-25 17:00:40 -07:00
random32.c
random32: improvements to prandom_bytes
2014-08-24 18:36:01 -07:00
ratelimit.c
rational.c
rbtree.c
rbtree: Make lockless searches non-fatal
2015-05-28 11:32:04 +09:30
rbtree_test.c
reciprocal_div.c
rhashtable.c
lib: fix data race in rhashtable_rehash_one
2015-09-22 17:36:07 -07:00
scatterlist.c
scatterlist: allow limited chaining without ARCH_HAS_SG_CHAIN
2015-08-17 08:12:51 -06:00
seq_buf.c
seq_buf: Fix seq_buf_bprintf() truncation
2015-03-04 23:40:19 -05:00
sg_split.c
lib: scatterlist: add sg splitting function
2015-08-24 14:28:01 -06:00
sha1.c
lib: EXPORT_SYMBOL sha_init
2015-03-23 22:12:08 -04:00
show_mem.c
lib/show_mem.c: correct reserved memory calculation
2015-09-08 15:35:28 -07:00
smp_processor_id.c
percpu: add preemption checks to __this_cpu ops
2014-04-07 16:36:14 -07:00
sort.c
lib/sort: Add 64 bit swap function
2015-06-25 17:00:40 -07:00
stmp_device.c
lib/stmp_device.c: replace module.h include
2015-02-12 18:54:16 -08:00
string.c
string: provide strscpy()
2015-09-10 15:36:59 -04:00
string_helpers.c
lib/string_helpers.c: fix infinite loop in string_get_size()
2015-09-17 21:16:07 -07:00
strncpy_from_user.c
lib: move strncpy_from_unsafe() into mm/maccess.c
2015-08-31 12:36:10 -07:00
strnlen_user.c
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2015-06-22 15:52:04 -07:00
swiotlb.c
Merge branch 'for-4.2/sg' of git://git.kernel.dk/linux-block
2015-06-25 15:22:36 -07:00
syscall.c
lib/syscall.c: unexport task_current_syscall()
2014-04-03 16:21:06 -07:00
test-hexdump.c
hexdump: Make test data really const
2015-06-25 17:00:40 -07:00
test-kstrtox.c
kstrto*: accept "-0" for signed conversion
2015-09-10 13:29:01 -07:00
test-string_helpers.c
lib/string_helpers.c: change semantics of string_escape_mem
2015-04-15 16:35:24 -07:00
test_bpf.c
test_bpf: add tests checking that JIT/interpreter sets A and X to 0.
2015-08-06 22:02:32 -07:00
test_firmware.c
test: add firmware_class loader test
2014-07-17 18:44:19 -07:00
test_kasan.c
lib/test_kasan.c: make kmalloc_oob_krealloc_less more correctly
2015-09-10 13:29:01 -07:00
test_module.c
test_rhashtable.c
rhashtable-test: extend to test concurrency
2015-08-17 14:33:47 -07:00
test_static_key_base.c
locking/static_keys: Provide a selftest
2015-08-03 11:51:12 +02:00
test_static_keys.c
locking/static_keys: Make verify_keys() static
2015-08-05 09:53:40 +02:00
test_user_copy.c
textsearch.c
lib/textsearch.c: remove textsearch_put reference from comments
2014-10-14 02:18:14 +02:00
timerqueue.c
timerqueue: Let timerqueue_add/del return information
2015-04-22 17:06:49 +02:00
ts_bm.c
ts_fsm.c
ts_kmp.c
ucs2_string.c
usercopy.c
uuid.c
vsprintf.c
lib/vsprintf.c: Include clk.h
2015-07-20 10:52:48 -07:00