mm: Add check for NULL for unlocked in fixup_user_fault

Message ID 20221215093930.22026-1-abelova@astralinux.ru
State New
Headers
Series mm: Add check for NULL for unlocked in fixup_user_fault |

Commit Message

Anastasia Belova Dec. 15, 2022, 9:39 a.m. UTC
  Check unlocked for NULL before dereference.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: d92725256b4f ("mm: avoid unnecessary page fault retires on shared memory types")
Signed-off-by: Anastasia Belova <abelova@astralinux.ru>
---
 mm/gup.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Comments

Andrew Morton Dec. 15, 2022, 9:22 p.m. UTC | #1
On Thu, 15 Dec 2022 12:39:30 +0300 Anastasia Belova <abelova@astralinux.ru> wrote:

> Check unlocked for NULL before dereference.
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> ...
>
> --- a/mm/gup.c
> +++ b/mm/gup.c
> @@ -1282,7 +1282,8 @@ int fixup_user_fault(struct mm_struct *mm,
>  		 * could tell the callers so they do not need to unlock.
>  		 */
>  		mmap_read_lock(mm);
> -		*unlocked = true;
> +		if (unlocked)
> +			*unlocked = true;
>  		return 0;
>  	}

I don't believe this is necessary unless the caller passed
FAULT_FLAG_KILLABLE or FAULT_FLAG_ALLOW_RETRY in fault_flags.

It's clear as mud and some code comments would help.
  

Patch

diff --git a/mm/gup.c b/mm/gup.c
index f212d571b563..905d5fb64c4c 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -1282,7 +1282,8 @@  int fixup_user_fault(struct mm_struct *mm,
 		 * could tell the callers so they do not need to unlock.
 		 */
 		mmap_read_lock(mm);
-		*unlocked = true;
+		if (unlocked)
+			*unlocked = true;
 		return 0;
 	}