* [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.