This is a note to let you know that I've just added the patch titled sparc64: Delete now unused user copy fixup functions. to the 4.8-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: sparc64-delete-now-unused-user-copy-fixup-functions.patch and it can be found in the queue-4.8 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From foo@baz Sat Nov 19 09:52:59 CET 2016 From: "David S. Miller" <davem@xxxxxxxxxxxxx> Date: Mon, 24 Oct 2016 21:25:31 -0700 Subject: sparc64: Delete now unused user copy fixup functions. From: "David S. Miller" <davem@xxxxxxxxxxxxx> [ Upstream commit 0fd0ff01d4c3c01e7fe69b762ee1a13236639acc ] Now that all of the user copy routines are converted to return accurate residual lengths when an exception occurs, we no longer need the broken fixup routines. Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- arch/sparc/include/asm/uaccess_64.h | 36 +----------------- arch/sparc/lib/Makefile | 2 - arch/sparc/lib/user_fixup.c | 71 ------------------------------------ 3 files changed, 4 insertions(+), 105 deletions(-) delete mode 100644 arch/sparc/lib/user_fixup.c --- a/arch/sparc/include/asm/uaccess_64.h +++ b/arch/sparc/include/asm/uaccess_64.h @@ -204,64 +204,34 @@ int __get_user_bad(void); unsigned long __must_check ___copy_from_user(void *to, const void __user *from, unsigned long size); -unsigned long copy_from_user_fixup(void *to, const void __user *from, - unsigned long size); static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long size) { - unsigned long ret; - check_object_size(to, size, false); - ret = ___copy_from_user(to, from, size); - if (unlikely(ret)) { - if ((long)ret < 0) - ret = copy_from_user_fixup(to, from, size); - return ret; - } - - return ret; + return ___copy_from_user(to, from, size); } #define __copy_from_user copy_from_user unsigned long __must_check ___copy_to_user(void __user *to, const void *from, unsigned long size); -unsigned long copy_to_user_fixup(void __user *to, const void *from, - unsigned long size); static inline unsigned long __must_check copy_to_user(void __user *to, const void *from, unsigned long size) { - unsigned long ret; - check_object_size(from, size, true); - ret = ___copy_to_user(to, from, size); - if (unlikely(ret)) { - if ((long)ret < 0) - ret = copy_to_user_fixup(to, from, size); - return ret; - } - return ret; + return ___copy_to_user(to, from, size); } #define __copy_to_user copy_to_user unsigned long __must_check ___copy_in_user(void __user *to, const void __user *from, unsigned long size); -unsigned long copy_in_user_fixup(void __user *to, void __user *from, - unsigned long size); static inline unsigned long __must_check copy_in_user(void __user *to, void __user *from, unsigned long size) { - unsigned long ret = ___copy_in_user(to, from, size); - - if (unlikely(ret)) { - if ((long)ret < 0) - ret = copy_in_user_fixup(to, from, size); - return ret; - } - return ret; + return ___copy_in_user(to, from, size); } #define __copy_in_user copy_in_user --- a/arch/sparc/lib/Makefile +++ b/arch/sparc/lib/Makefile @@ -38,7 +38,7 @@ lib-$(CONFIG_SPARC64) += NG4patch.o NG4 lib-$(CONFIG_SPARC64) += GENmemcpy.o GENcopy_from_user.o GENcopy_to_user.o lib-$(CONFIG_SPARC64) += GENpatch.o GENpage.o GENbzero.o -lib-$(CONFIG_SPARC64) += copy_in_user.o user_fixup.o memmove.o +lib-$(CONFIG_SPARC64) += copy_in_user.o memmove.o lib-$(CONFIG_SPARC64) += mcount.o ipcsum.o xor.o hweight.o ffs.o obj-$(CONFIG_SPARC64) += iomap.o --- a/arch/sparc/lib/user_fixup.c +++ /dev/null @@ -1,71 +0,0 @@ -/* user_fixup.c: Fix up user copy faults. - * - * Copyright (C) 2004 David S. Miller <davem@xxxxxxxxxx> - */ - -#include <linux/compiler.h> -#include <linux/kernel.h> -#include <linux/string.h> -#include <linux/errno.h> -#include <linux/module.h> - -#include <asm/uaccess.h> - -/* Calculating the exact fault address when using - * block loads and stores can be very complicated. - * - * Instead of trying to be clever and handling all - * of the cases, just fix things up simply here. - */ - -static unsigned long compute_size(unsigned long start, unsigned long size, unsigned long *offset) -{ - unsigned long fault_addr = current_thread_info()->fault_address; - unsigned long end = start + size; - - if (fault_addr < start || fault_addr >= end) { - *offset = 0; - } else { - *offset = fault_addr - start; - size = end - fault_addr; - } - return size; -} - -unsigned long copy_from_user_fixup(void *to, const void __user *from, unsigned long size) -{ - unsigned long offset; - - size = compute_size((unsigned long) from, size, &offset); - if (likely(size)) - memset(to + offset, 0, size); - - return size; -} -EXPORT_SYMBOL(copy_from_user_fixup); - -unsigned long copy_to_user_fixup(void __user *to, const void *from, unsigned long size) -{ - unsigned long offset; - - return compute_size((unsigned long) to, size, &offset); -} -EXPORT_SYMBOL(copy_to_user_fixup); - -unsigned long copy_in_user_fixup(void __user *to, void __user *from, unsigned long size) -{ - unsigned long fault_addr = current_thread_info()->fault_address; - unsigned long start = (unsigned long) to; - unsigned long end = start + size; - - if (fault_addr >= start && fault_addr < end) - return end - fault_addr; - - start = (unsigned long) from; - end = start + size; - if (fault_addr >= start && fault_addr < end) - return end - fault_addr; - - return size; -} -EXPORT_SYMBOL(copy_in_user_fixup); Patches currently in stable-queue which might be from davem@xxxxxxxxxxxxx are queue-4.8/sparc64-delete-now-unused-user-copy-fixup-functions.patch queue-4.8/net-__skb_flow_dissect-must-cap-its-return-value.patch queue-4.8/tcp-take-care-of-truncations-done-by-sk_filter.patch queue-4.8/net-clear-sk_err_soft-in-sk_clone_lock.patch queue-4.8/dccp-do-not-release-listeners-too-soon.patch queue-4.8/sparc64-convert-copy_in_user-to-accurate-exception-reporting.patch queue-4.8/net-stmmac-fix-lack-of-link-transition-for-fixed-phys.patch queue-4.8/sparc64-handle-extremely-large-kernel-tlb-range-flushes-more-gracefully.patch queue-4.8/sparc-handle-negative-offsets-in-arch_jump_label_transform.patch queue-4.8/sparc64-delete-__ret_efault.patch queue-4.8/dctcp-avoid-bogus-doubling-of-cwnd-after-loss.patch queue-4.8/sparc64-delete-now-unused-user-copy-assembler-helpers.patch queue-4.8/revert-bnx2-reset-device-during-driver-initialization.patch queue-4.8/net-mangle-zero-checksum-in-skb_checksum_help.patch queue-4.8/revert-include-uapi-linux-atm_zatm.h-include-linux-time.h.patch queue-4.8/ipv4-allow-local-fragmentation-in-ip_finish_output_gso.patch queue-4.8/tcp-fix-return-value-for-partial-writes.patch queue-4.8/ip6_tunnel-clear-ip6cb-in-ip6tunnel_xmit.patch queue-4.8/sctp-assign-assoc_id-earlier-in-__sctp_connect.patch queue-4.8/sparc64-convert-ng4copy_-from-to-_user-to-accurate-exception-reporting.patch queue-4.8/bpf-fix-htab-map-destruction-when-extra-reserve-is-in-use.patch queue-4.8/ipv6-dccp-fix-out-of-bound-access-in-dccp_v6_err.patch queue-4.8/sparc64-convert-u3copy_-from-to-_user-to-accurate-exception-reporting.patch queue-4.8/sparc64-convert-ng2copy_-from-to-_user-to-accurate-exception-reporting.patch queue-4.8/sparc64-fix-illegal-relative-branches-in-hypervisor-patched-tlb-code.patch queue-4.8/sparc64-convert-gencopy_-from-to-_user-to-accurate-exception-reporting.patch queue-4.8/sparc64-convert-u1copy_-from-to-_user-to-accurate-exception-reporting.patch queue-4.8/sctp-change-sk-state-only-when-it-has-assocs-in-sctp_shutdown.patch queue-4.8/sparc64-prepare-to-move-to-more-saner-user-copy-exception-handling.patch queue-4.8/bnx2-wait-for-in-flight-dma-to-complete-at-probe-stage.patch queue-4.8/bgmac-stop-clearing-dma-receive-control-register-right-after-it-is-set.patch queue-4.8/ipv6-dccp-add-missing-bind_conflict-to-dccp_ipv6_mapped.patch queue-4.8/tcp-fix-potential-memory-corruption.patch queue-4.8/sparc64-convert-ngcopy_-from-to-_user-to-accurate-exception-reporting.patch queue-4.8/fib_trie-correct-proc-net-route-off-by-one-error.patch queue-4.8/mlxsw-spectrum_router-correctly-dump-neighbour-activity.patch queue-4.8/sparc64-fix-illegal-relative-branches-in-hypervisor-patched-tlb-cross-call-code.patch queue-4.8/mlxsw-spectrum-fix-refcount-bug-on-span-entries.patch queue-4.8/sparc64-handle-extremely-large-kernel-tsb-range-flushes-sanely.patch queue-4.8/sparc64-fix-instruction-count-in-comment-for-__hypervisor_flush_tlb_pending.patch queue-4.8/dccp-do-not-send-reset-to-already-closed-sockets.patch queue-4.8/ipv4-use-new_gw-for-redirect-neigh-lookup.patch queue-4.8/net-icmp6_send-should-use-dst-dev-to-determine-l3-domain.patch queue-4.8/dccp-fix-out-of-bound-access-in-dccp_v4_err.patch queue-4.8/net-icmp_route_lookup-should-use-rt-dev-to-determine-l3-domain.patch queue-4.8/sock-fix-sendmmsg-for-partial-sendmsg.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html