diff mbox series

drm/i915: check before removing mm notifier

Message ID 20240219125047.28906-1-nirmoy.das@intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915: check before removing mm notifier | expand

Commit Message

Nirmoy Das Feb. 19, 2024, 12:50 p.m. UTC
Error in mmu_interval_notifier_insert() can leave a NULL
notifier.mm pointer. Catch that and return early.

Cc: Andi Shyti <andi.shyti@linux.intel.com>
Cc: Shawn Lee <shawn.c.lee@intel.com>
Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
---
 drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Rodrigo Vivi Feb. 19, 2024, 8:12 p.m. UTC | #1
On Mon, Feb 19, 2024 at 01:50:47PM +0100, Nirmoy Das wrote:
> Error in mmu_interval_notifier_insert() can leave a NULL
> notifier.mm pointer. Catch that and return early.
> 
> Cc: Andi Shyti <andi.shyti@linux.intel.com>
> Cc: Shawn Lee <shawn.c.lee@intel.com>
> Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
> ---
>  drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
> index 0e21ce9d3e5a..61abfb505766 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
> @@ -349,6 +349,9 @@ i915_gem_userptr_release(struct drm_i915_gem_object *obj)
>  {
>  	GEM_WARN_ON(obj->userptr.page_ref);
>  
> +	if (!obj->userptr.notifier.mm)
> +		return;
> +

hmmm... right, it looks that we need this protection. But...

I mean, feel free to use
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

for this patch,

but I believe that if this mmu insert failed we might have other
deeper problems like when checking i915_gem_object_is_userptr() ?

No?!

>  	mmu_interval_notifier_remove(&obj->userptr.notifier);
>  	obj->userptr.notifier.mm = NULL;
>  }
> -- 
> 2.42.0
>
Nirmoy Das Feb. 20, 2024, 9:05 a.m. UTC | #2
Hi Rodrigo,

On 2/19/2024 9:12 PM, Rodrigo Vivi wrote:
> On Mon, Feb 19, 2024 at 01:50:47PM +0100, Nirmoy Das wrote:
>> Error in mmu_interval_notifier_insert() can leave a NULL
>> notifier.mm pointer. Catch that and return early.
>>
>> Cc: Andi Shyti<andi.shyti@linux.intel.com>
>> Cc: Shawn Lee<shawn.c.lee@intel.com>
>> Signed-off-by: Nirmoy Das<nirmoy.das@intel.com>
>> ---
>>   drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 3 +++
>>   1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>> index 0e21ce9d3e5a..61abfb505766 100644
>> --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>> @@ -349,6 +349,9 @@ i915_gem_userptr_release(struct drm_i915_gem_object *obj)
>>   {
>>   	GEM_WARN_ON(obj->userptr.page_ref);
>>   
>> +	if (!obj->userptr.notifier.mm)
>> +		return;
>> +
> hmmm... right, it looks that we need this protection. But...
>
> I mean, feel free to use
> Reviewed-by: Rodrigo Vivi<rodrigo.vivi@intel.com>
>
> for this patch,
>
> but I believe that if this mmu insert failed we might have other
> deeper problems like when checking i915_gem_object_is_userptr() ?
>
> No?!

We are returning an error if mmu insert fails while creating a userptr 
object  so the obj struct is only available to obj cleanup methods.

As far as I see, i915_gem_object_is_userptr() should not happen on such obj struct.

Thanks,
Nirmoy

>>   	mmu_interval_notifier_remove(&obj->userptr.notifier);
>>   	obj->userptr.notifier.mm = NULL;
>>   }
>> -- 
>> 2.42.0
>>
Nirmoy Das Feb. 21, 2024, 11:52 a.m. UTC | #3
Merged it to drm-intel-gt-next with s/check/Check

On 2/19/2024 1:50 PM, Nirmoy Das wrote:
> Error in mmu_interval_notifier_insert() can leave a NULL
> notifier.mm pointer. Catch that and return early.
>
> Cc: Andi Shyti <andi.shyti@linux.intel.com>
> Cc: Shawn Lee <shawn.c.lee@intel.com>
> Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
> ---
>   drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 3 +++
>   1 file changed, 3 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
> index 0e21ce9d3e5a..61abfb505766 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
> @@ -349,6 +349,9 @@ i915_gem_userptr_release(struct drm_i915_gem_object *obj)
>   {
>   	GEM_WARN_ON(obj->userptr.page_ref);
>   
> +	if (!obj->userptr.notifier.mm)
> +		return;
> +
>   	mmu_interval_notifier_remove(&obj->userptr.notifier);
>   	obj->userptr.notifier.mm = NULL;
>   }
Tvrtko Ursulin Feb. 27, 2024, 9:04 a.m. UTC | #4
On 21/02/2024 11:52, Nirmoy Das wrote:
> Merged it to drm-intel-gt-next with s/check/Check

Shouldn't this have had:

Fixes: ed29c2691188 ("drm/i915: Fix userptr so we do not have to worry about obj->mm.lock, v7.")
Cc: <stable@vger.kernel.org> # v5.13+

?

Regards,

Tvrtko
  
> On 2/19/2024 1:50 PM, Nirmoy Das wrote:
>> Error in mmu_interval_notifier_insert() can leave a NULL
>> notifier.mm pointer. Catch that and return early.
>>
>> Cc: Andi Shyti <andi.shyti@linux.intel.com>
>> Cc: Shawn Lee <shawn.c.lee@intel.com>
>> Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
>> ---
>>   drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 3 +++
>>   1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c 
>> b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>> index 0e21ce9d3e5a..61abfb505766 100644
>> --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>> @@ -349,6 +349,9 @@ i915_gem_userptr_release(struct 
>> drm_i915_gem_object *obj)
>>   {
>>       GEM_WARN_ON(obj->userptr.page_ref);
>> +    if (!obj->userptr.notifier.mm)
>> +        return;
>> +
>>       mmu_interval_notifier_remove(&obj->userptr.notifier);
>>       obj->userptr.notifier.mm = NULL;
>>   }
Nirmoy Das Feb. 27, 2024, 9:26 a.m. UTC | #5
Hi Tvrtko,

On 2/27/2024 10:04 AM, Tvrtko Ursulin wrote:
>
> On 21/02/2024 11:52, Nirmoy Das wrote:
>> Merged it to drm-intel-gt-next with s/check/Check
>
> Shouldn't this have had:
>
> Fixes: ed29c2691188 ("drm/i915: Fix userptr so we do not have to worry 
> about obj->mm.lock, v7.")
> Cc: <stable@vger.kernel.org> # v5.13+
>
> ?
>
Yes. Sorry, I missed that. Can we still the tag ?


Thanks,

Nirmoy

> Regards,
>
> Tvrtko
>
>> On 2/19/2024 1:50 PM, Nirmoy Das wrote:
>>> Error in mmu_interval_notifier_insert() can leave a NULL
>>> notifier.mm pointer. Catch that and return early.
>>>
>>> Cc: Andi Shyti <andi.shyti@linux.intel.com>
>>> Cc: Shawn Lee <shawn.c.lee@intel.com>
>>> Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
>>> ---
>>>   drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 3 +++
>>>   1 file changed, 3 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c 
>>> b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>>> index 0e21ce9d3e5a..61abfb505766 100644
>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>>> @@ -349,6 +349,9 @@ i915_gem_userptr_release(struct 
>>> drm_i915_gem_object *obj)
>>>   {
>>>       GEM_WARN_ON(obj->userptr.page_ref);
>>> +    if (!obj->userptr.notifier.mm)
>>> +        return;
>>> +
>>> mmu_interval_notifier_remove(&obj->userptr.notifier);
>>>       obj->userptr.notifier.mm = NULL;
>>>   }
Tvrtko Ursulin Feb. 28, 2024, 1:24 p.m. UTC | #6
On 27/02/2024 09:26, Nirmoy Das wrote:
> Hi Tvrtko,
> 
> On 2/27/2024 10:04 AM, Tvrtko Ursulin wrote:
>>
>> On 21/02/2024 11:52, Nirmoy Das wrote:
>>> Merged it to drm-intel-gt-next with s/check/Check
>>
>> Shouldn't this have had:
>>
>> Fixes: ed29c2691188 ("drm/i915: Fix userptr so we do not have to worry 
>> about obj->mm.lock, v7.")
>> Cc: <stable@vger.kernel.org> # v5.13+
>>
>> ?
>>
> Yes. Sorry, I missed that. Can we still the tag ?

I've added them and force pushed the branch since commit was still at 
the top.

FYI + Jani, Joonas and Rodrigo

Regards,

Tvrtko

> 
> 
> Thanks,
> 
> Nirmoy
> 
>> Regards,
>>
>> Tvrtko
>>
>>> On 2/19/2024 1:50 PM, Nirmoy Das wrote:
>>>> Error in mmu_interval_notifier_insert() can leave a NULL
>>>> notifier.mm pointer. Catch that and return early.
>>>>
>>>> Cc: Andi Shyti <andi.shyti@linux.intel.com>
>>>> Cc: Shawn Lee <shawn.c.lee@intel.com>
>>>> Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
>>>> ---
>>>>   drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 3 +++
>>>>   1 file changed, 3 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c 
>>>> b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>>>> index 0e21ce9d3e5a..61abfb505766 100644
>>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>>>> @@ -349,6 +349,9 @@ i915_gem_userptr_release(struct 
>>>> drm_i915_gem_object *obj)
>>>>   {
>>>>       GEM_WARN_ON(obj->userptr.page_ref);
>>>> +    if (!obj->userptr.notifier.mm)
>>>> +        return;
>>>> +
>>>> mmu_interval_notifier_remove(&obj->userptr.notifier);
>>>>       obj->userptr.notifier.mm = NULL;
>>>>   }
Nirmoy Das Feb. 28, 2024, 2:14 p.m. UTC | #7
On 2/28/2024 2:24 PM, Tvrtko Ursulin wrote:
>
> On 27/02/2024 09:26, Nirmoy Das wrote:
>> Hi Tvrtko,
>>
>> On 2/27/2024 10:04 AM, Tvrtko Ursulin wrote:
>>>
>>> On 21/02/2024 11:52, Nirmoy Das wrote:
>>>> Merged it to drm-intel-gt-next with s/check/Check
>>>
>>> Shouldn't this have had:
>>>
>>> Fixes: ed29c2691188 ("drm/i915: Fix userptr so we do not have to 
>>> worry about obj->mm.lock, v7.")
>>> Cc: <stable@vger.kernel.org> # v5.13+
>>>
>>> ?
>>>
>> Yes. Sorry, I missed that. Can we still the tag ?
>
> I've added them and force pushed the branch since commit was still at 
> the top.

Thanks a lot, Tvrtko!


>
> FYI + Jani, Joonas and Rodrigo
>
> Regards,
>
> Tvrtko
>
>>
>>
>> Thanks,
>>
>> Nirmoy
>>
>>> Regards,
>>>
>>> Tvrtko
>>>
>>>> On 2/19/2024 1:50 PM, Nirmoy Das wrote:
>>>>> Error in mmu_interval_notifier_insert() can leave a NULL
>>>>> notifier.mm pointer. Catch that and return early.
>>>>>
>>>>> Cc: Andi Shyti <andi.shyti@linux.intel.com>
>>>>> Cc: Shawn Lee <shawn.c.lee@intel.com>
>>>>> Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
>>>>> ---
>>>>>   drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 3 +++
>>>>>   1 file changed, 3 insertions(+)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c 
>>>>> b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>>>>> index 0e21ce9d3e5a..61abfb505766 100644
>>>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>>>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
>>>>> @@ -349,6 +349,9 @@ i915_gem_userptr_release(struct 
>>>>> drm_i915_gem_object *obj)
>>>>>   {
>>>>>       GEM_WARN_ON(obj->userptr.page_ref);
>>>>> +    if (!obj->userptr.notifier.mm)
>>>>> +        return;
>>>>> +
>>>>> mmu_interval_notifier_remove(&obj->userptr.notifier);
>>>>>       obj->userptr.notifier.mm = NULL;
>>>>>   }
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
index 0e21ce9d3e5a..61abfb505766 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
@@ -349,6 +349,9 @@  i915_gem_userptr_release(struct drm_i915_gem_object *obj)
 {
 	GEM_WARN_ON(obj->userptr.page_ref);
 
+	if (!obj->userptr.notifier.mm)
+		return;
+
 	mmu_interval_notifier_remove(&obj->userptr.notifier);
 	obj->userptr.notifier.mm = NULL;
 }