RE: [PATCH v4.19.x] make 'user_access_begin()' do 'access_ok()'
> -Original Message- > From: Ashwin H > Sent: Thursday, May 28, 2020 1:01 PM > To: Greg KH > Cc: x...@kernel.org; dri-devel@lists.freedesktop.org; intel- > g...@lists.freedesktop.org; linux-ker...@vger.kernel.org; sta...@kernel.org; > Srivatsa Bhat ; sriva...@csail.mit.edu; > rost...@goodmis.org; Steven Rostedt ; Linus > Torvalds > Subject: RE: [PATCH v4.19.x] make 'user_access_begin()' do 'access_ok()' > > > > > -Original Message- > > From: Greg KH > > Sent: Wednesday, May 27, 2020 9:02 PM > > To: Ashwin H > > Cc: x...@kernel.org; dri-devel@lists.freedesktop.org; intel- > > g...@lists.freedesktop.org; linux-ker...@vger.kernel.org; > > sta...@kernel.org; Srivatsa Bhat ; > > sriva...@csail.mit.edu; rost...@goodmis.org; Steven Rostedt > > ; Linus Torvalds > > Subject: Re: [PATCH v4.19.x] make 'user_access_begin()' do 'access_ok()' > > > > On Wed, May 13, 2020 at 05:08:19PM +, Ashwin H wrote: > > > > Ok, but what does that mean for us? > > > > > > > > You need to say why you are sending a patch, otherwise we will > > > > guess > > wrong. > > > > > > In drivers/gpu/drm/i915/i915_gem_execbuffer.c, ioctl functions does > > user_access_begin() without doing access_ok(Checks if a user space > > pointer is valid) first. > > > A local attacker can craft a malicious ioctl function call to > > > overwrite arbitrary kernel memory, resulting in a Denial of Service > > > or privilege escalation (CVE-2018-20669) > > > > > > This patch makes sure that user_access_begin always does access_ok. > > > user_access_begin has been modified to do access_ok internally. > > > > I had this in the tree, but it broke the build on alpha, sh, and maybe > > a few others :( > > > Thanks Greg for including this patch. > I am sorry that this patch caused the failure. As I see this is not a build > failure > but tests have failed. > Build results: > total: 155 pass: 155 fail: 0 > Qemu test results: > total: 421 pass: 390 fail: 31 > Failed tests: > > > > > > See: > > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F > > %2Flore.kernel.org%2Fr%2F20200527140225.GA214763%40roeck- > > > us.netdata=02%7C01%7Cashwinh%40vmware.com%7Cd8f60bb8a4584 > > > 7caa10f08d802530997%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7 > > > C637261902960990057sdata=Vjv9v0QhebfcOGSq1UUDKshTDA%2FOV > > 4aKbqzKKJkEQxM%3Dreserved=0 > > for the details. > > > > Can you dig out all of the needed follow-on patches as well, and send > > them all as a patch series for 4.19.y so that I can queue them all up at > > once? > > > > I will check for follow-on patches and get back. This seems to be the issue in alpha and SH https://lore.kernel.org/lkml/6a4fe075-a644-1b06-305b-9e55b8c95...@roeck-us.net/#t alpha and SH had buggy implementation of access_ok Thanks, Ashwin > > > thanks, > > > > greg k-h > > Thanks, > Ashwin ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
RE: [PATCH v4.19.x] make 'user_access_begin()' do 'access_ok()'
> -Original Message- > From: Greg KH > Sent: Wednesday, May 27, 2020 9:02 PM > To: Ashwin H > Cc: x...@kernel.org; dri-devel@lists.freedesktop.org; intel- > g...@lists.freedesktop.org; linux-ker...@vger.kernel.org; sta...@kernel.org; > Srivatsa Bhat ; sriva...@csail.mit.edu; > rost...@goodmis.org; Steven Rostedt ; Linus > Torvalds > Subject: Re: [PATCH v4.19.x] make 'user_access_begin()' do 'access_ok()' > > On Wed, May 13, 2020 at 05:08:19PM +, Ashwin H wrote: > > > Ok, but what does that mean for us? > > > > > > You need to say why you are sending a patch, otherwise we will guess > wrong. > > > > In drivers/gpu/drm/i915/i915_gem_execbuffer.c, ioctl functions does > user_access_begin() without doing access_ok(Checks if a user space pointer > is valid) first. > > A local attacker can craft a malicious ioctl function call to > > overwrite arbitrary kernel memory, resulting in a Denial of Service or > > privilege escalation (CVE-2018-20669) > > > > This patch makes sure that user_access_begin always does access_ok. > > user_access_begin has been modified to do access_ok internally. > > I had this in the tree, but it broke the build on alpha, sh, and maybe a few > others :( > Thanks Greg for including this patch. I am sorry that this patch caused the failure. As I see this is not a build failure but tests have failed. Build results: total: 155 pass: 155 fail: 0 Qemu test results: total: 421 pass: 390 fail: 31 Failed tests: > See: > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F > %2Flore.kernel.org%2Fr%2F20200527140225.GA214763%40roeck- > us.netdata=02%7C01%7Cashwinh%40vmware.com%7Cd8f60bb8a4584 > 7caa10f08d802530997%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7 > C637261902960990057sdata=Vjv9v0QhebfcOGSq1UUDKshTDA%2FOV > 4aKbqzKKJkEQxM%3Dreserved=0 > for the details. > > Can you dig out all of the needed follow-on patches as well, and send them > all as a patch series for 4.19.y so that I can queue them all up at once? > I will check for follow-on patches and get back. > thanks, > > greg k-h Thanks, Ashwin ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v4.19.x] make 'user_access_begin()' do 'access_ok()'
On Wed, May 13, 2020 at 05:08:19PM +, Ashwin H wrote: > > Ok, but what does that mean for us? > > > > You need to say why you are sending a patch, otherwise we will guess wrong. > > In drivers/gpu/drm/i915/i915_gem_execbuffer.c, ioctl functions does > user_access_begin() without doing access_ok(Checks if a user space pointer is > valid) first. > A local attacker can craft a malicious ioctl function call to overwrite > arbitrary kernel memory, resulting in a Denial of Service or privilege > escalation (CVE-2018-20669) > > This patch makes sure that user_access_begin always does access_ok. > user_access_begin has been modified to do access_ok internally. I had this in the tree, but it broke the build on alpha, sh, and maybe a few others :( See: https://lore.kernel.org/r/20200527140225.ga214...@roeck-us.net for the details. Can you dig out all of the needed follow-on patches as well, and send them all as a patch series for 4.19.y so that I can queue them all up at once? thanks, greg k-h ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
RE: [PATCH v4.19.x] make 'user_access_begin()' do 'access_ok()'
> Ok, but what does that mean for us? > > You need to say why you are sending a patch, otherwise we will guess wrong. In drivers/gpu/drm/i915/i915_gem_execbuffer.c, ioctl functions does user_access_begin() without doing access_ok(Checks if a user space pointer is valid) first. A local attacker can craft a malicious ioctl function call to overwrite arbitrary kernel memory, resulting in a Denial of Service or privilege escalation (CVE-2018-20669) This patch makes sure that user_access_begin always does access_ok. user_access_begin has been modified to do access_ok internally. Thanks, Ashwin ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v4.19.x] make 'user_access_begin()' do 'access_ok()'
On Wed, May 13, 2020 at 06:13:17AM +, Ashwin H wrote: > This patch fixes CVE-2018-20669 in 4.19 tree. Ok, but what does that mean for us? You need to say why you are sending a patch, otherwise we will guess wrong. greg k-h ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v4.19.x] make 'user_access_begin()' do 'access_ok()'
This patch fixes CVE-2018-20669 in 4.19 tree. On 13/05/20, 11:36 AM, "Greg KH" wrote: On Wed, May 13, 2020 at 07:19:21AM +0530, ashwin-h wrote: > From: Linus Torvalds > > commit 594cc251fdd0d231d342d88b2fdff4bc42fb0690 upstream. > > Originally, the rule used to be that you'd have to do access_ok() > separately, and then user_access_begin() before actually doing the > direct (optimized) user access. > > But experience has shown that people then decide not to do access_ok() > at all, and instead rely on it being implied by other operations or > similar. Which makes it very hard to verify that the access has > actually been range-checked. > > If you use the unsafe direct user accesses, hardware features (either > SMAP - Supervisor Mode Access Protection - on x86, or PAN - Privileged > Access Never - on ARM) do force you to use user_access_begin(). But > nothing really forces the range check. > > By putting the range check into user_access_begin(), we actually force > people to do the right thing (tm), and the range check vill be visible > near the actual accesses. We have way too long a history of people > trying to avoid them. > > Signed-off-by: Linus Torvalds > Signed-off-by: Ashwin H > --- > arch/x86/include/asm/uaccess.h | 11 ++- > drivers/gpu/drm/i915/i915_gem_execbuffer.c | 15 +-- > include/linux/uaccess.h| 2 +- > kernel/compat.c| 6 ++ > kernel/exit.c | 6 ++ > lib/strncpy_from_user.c| 9 + > lib/strnlen_user.c | 9 + > 7 files changed, 38 insertions(+), 20 deletions(-) Are you wanting this merged to a specific stable kernel tree? If so, why? thanks, greg k-h ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v4.19.x] make 'user_access_begin()' do 'access_ok()'
On Wed, May 13, 2020 at 07:19:21AM +0530, ashwin-h wrote: > From: Linus Torvalds > > commit 594cc251fdd0d231d342d88b2fdff4bc42fb0690 upstream. > > Originally, the rule used to be that you'd have to do access_ok() > separately, and then user_access_begin() before actually doing the > direct (optimized) user access. > > But experience has shown that people then decide not to do access_ok() > at all, and instead rely on it being implied by other operations or > similar. Which makes it very hard to verify that the access has > actually been range-checked. > > If you use the unsafe direct user accesses, hardware features (either > SMAP - Supervisor Mode Access Protection - on x86, or PAN - Privileged > Access Never - on ARM) do force you to use user_access_begin(). But > nothing really forces the range check. > > By putting the range check into user_access_begin(), we actually force > people to do the right thing (tm), and the range check vill be visible > near the actual accesses. We have way too long a history of people > trying to avoid them. > > Signed-off-by: Linus Torvalds > Signed-off-by: Ashwin H > --- > arch/x86/include/asm/uaccess.h | 11 ++- > drivers/gpu/drm/i915/i915_gem_execbuffer.c | 15 +-- > include/linux/uaccess.h| 2 +- > kernel/compat.c| 6 ++ > kernel/exit.c | 6 ++ > lib/strncpy_from_user.c| 9 + > lib/strnlen_user.c | 9 + > 7 files changed, 38 insertions(+), 20 deletions(-) Are you wanting this merged to a specific stable kernel tree? If so, why? thanks, greg k-h ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel