All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH -stable v4.14] mm/usercopy: use memory range to be accessed for wraparound check
@ 2019-08-16 18:24 Kees Cook
  2019-08-16 18:41 ` Greg Kroah-Hartman
  0 siblings, 1 reply; 2+ messages in thread
From: Kees Cook @ 2019-08-16 18:24 UTC (permalink / raw)
  To: stable; +Cc: Greg Kroah-Hartman, Trilok Soni

From: Prasad Sodagudi <psodagud@codeaurora.org>

commit 951531691c4bcaa59f56a316e018bc2ff1ddf855 upstream.

Currently, when checking to see if accessing n bytes starting at address
"ptr" will cause a wraparound in the memory addresses, the check in
check_bogus_address() adds an extra byte, which is incorrect, as the
range of addresses that will be accessed is [ptr, ptr + (n - 1)].

This can lead to incorrectly detecting a wraparound in the memory
address, when trying to read 4 KB from memory that is mapped to the the
last possible page in the virtual address space, when in fact, accessing
that range of memory would not cause a wraparound to occur.

Use the memory range that will actually be accessed when considering if
accessing a certain amount of bytes will cause the memory address to
wrap around.

Link: http://lkml.kernel.org/r/1564509253-23287-1-git-send-email-isaacm@codeaurora.org
Fixes: f5509cc18daa ("mm: Hardened usercopy")
Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
Co-developed-by: Prasad Sodagudi <psodagud@codeaurora.org>
Reviewed-by: William Kucharski <william.kucharski@oracle.com>
Acked-by: Kees Cook <keescook@chromium.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Trilok Soni <tsoni@codeaurora.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
[kees: backport to v4.14]
Signed-off-by: Kees Cook <keescook@chromium.org>
---
 mm/usercopy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/usercopy.c b/mm/usercopy.c
index a9852b24715d..975f7dff8059 100644
--- a/mm/usercopy.c
+++ b/mm/usercopy.c
@@ -121,7 +121,7 @@ static inline const char *check_kernel_text_object(const void *ptr,
 static inline const char *check_bogus_address(const void *ptr, unsigned long n)
 {
 	/* Reject if object wraps past end of memory. */
-	if ((unsigned long)ptr + n < (unsigned long)ptr)
+	if ((unsigned long)ptr + (n - 1) < (unsigned long)ptr)
 		return "<wrapped address>";
 
 	/* Reject if NULL or ZERO-allocation. */
-- 
2.17.1


-- 
Kees Cook

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH -stable v4.14] mm/usercopy: use memory range to be accessed for wraparound check
  2019-08-16 18:24 [PATCH -stable v4.14] mm/usercopy: use memory range to be accessed for wraparound check Kees Cook
@ 2019-08-16 18:41 ` Greg Kroah-Hartman
  0 siblings, 0 replies; 2+ messages in thread
From: Greg Kroah-Hartman @ 2019-08-16 18:41 UTC (permalink / raw)
  To: Kees Cook; +Cc: stable, Trilok Soni

On Fri, Aug 16, 2019 at 11:24:08AM -0700, Kees Cook wrote:
> From: Prasad Sodagudi <psodagud@codeaurora.org>
> 
> commit 951531691c4bcaa59f56a316e018bc2ff1ddf855 upstream.
> 
> Currently, when checking to see if accessing n bytes starting at address
> "ptr" will cause a wraparound in the memory addresses, the check in
> check_bogus_address() adds an extra byte, which is incorrect, as the
> range of addresses that will be accessed is [ptr, ptr + (n - 1)].
> 
> This can lead to incorrectly detecting a wraparound in the memory
> address, when trying to read 4 KB from memory that is mapped to the the
> last possible page in the virtual address space, when in fact, accessing
> that range of memory would not cause a wraparound to occur.
> 
> Use the memory range that will actually be accessed when considering if
> accessing a certain amount of bytes will cause the memory address to
> wrap around.
> 
> Link: http://lkml.kernel.org/r/1564509253-23287-1-git-send-email-isaacm@codeaurora.org
> Fixes: f5509cc18daa ("mm: Hardened usercopy")
> Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
> Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
> Co-developed-by: Prasad Sodagudi <psodagud@codeaurora.org>
> Reviewed-by: William Kucharski <william.kucharski@oracle.com>
> Acked-by: Kees Cook <keescook@chromium.org>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Trilok Soni <tsoni@codeaurora.org>
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
> [kees: backport to v4.14]
> Signed-off-by: Kees Cook <keescook@chromium.org>

This and the 4.9 patch now queued up, thanks for the backports.

greg k-h

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-08-16 18:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-16 18:24 [PATCH -stable v4.14] mm/usercopy: use memory range to be accessed for wraparound check Kees Cook
2019-08-16 18:41 ` Greg Kroah-Hartman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.