All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jerome Marchand <jmarchan@redhat.com>
To: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Cc: "linux-mm@kvack.org" <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	linux-sh@vger.kernel.org
Subject: Re: [PATCH] mm: vmalloc: don't remove inexistent guard hole in remove_vm_area()
Date: Thu, 12 Nov 2015 16:28:46 +0000	[thread overview]
Message-ID: <5644BE3E.7010708@redhat.com> (raw)
In-Reply-To: <CAPAsAGxNWhHSNHZWfaOb3NmbubSBGRd8O81L5rw1wMs-n_UgmA@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1937 bytes --]

On 11/12/2015 04:55 PM, Andrey Ryabinin wrote:
> 2015-11-12 18:17 GMT+03:00 Jerome Marchand <jmarchan@redhat.com>:
>> Commit 71394fe50146 ("mm: vmalloc: add flag preventing guard hole
>> allocation") missed a spot. Currently remove_vm_area() decreases
>> vm->size to remove the guard hole page, even when it isn't present.
>> This patch only decreases vm->size when VM_NO_GUARD isn't set.
>>
>> Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
>> ---
>>  mm/vmalloc.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
>> index d045634..1388c3d 100644
>> --- a/mm/vmalloc.c
>> +++ b/mm/vmalloc.c
>> @@ -1443,7 +1443,8 @@ struct vm_struct *remove_vm_area(const void *addr)
>>                 vmap_debug_free_range(va->va_start, va->va_end);
>>                 kasan_free_shadow(vm);
>>                 free_unmap_vmap_area(va);
>> -               vm->size -= PAGE_SIZE;
>> +               if (!(vm->flags & VM_NO_GUARD))
>> +                       vm->size -= PAGE_SIZE;
>>
> 
> I'd fix this in another way. I think that remove_vm_area() shouldn't
> change vm's size, IMO it doesn't make sense.
> The only caller who cares about vm's size after removing is __vunmap():
>          area = remove_vm_area(addr);
>          ....
>          debug_check_no_locks_freed(addr, area->size);
>          debug_check_no_obj_freed(addr, area->size);
> 
> We already have proper get_vm_area_size() helper which takes
> VM_NO_GUARD into account.
> So I think we should use that helper for debug_check_no_*() and just
> remove 'vm->size -= PAGE_SIZE;' line
> from remove_vm_area()

Sure, that would be cleaner.

Btw, there might be a leak in sq_unmap() (arch/sh/kernel/cpu/sh4/sq.c)
as the vm_struct doesn't seem to be freed. CCed the SuperH folks.

Thanks,
Jerome

> 
> 
> 
>>                 return vm;
>>         }
>> --
>> 2.4.3
>>



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Jerome Marchand <jmarchan@redhat.com>
To: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Cc: "linux-mm@kvack.org" <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	linux-sh@vger.kernel.org
Subject: Re: [PATCH] mm: vmalloc: don't remove inexistent guard hole in remove_vm_area()
Date: Thu, 12 Nov 2015 17:28:46 +0100	[thread overview]
Message-ID: <5644BE3E.7010708@redhat.com> (raw)
In-Reply-To: <CAPAsAGxNWhHSNHZWfaOb3NmbubSBGRd8O81L5rw1wMs-n_UgmA@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1937 bytes --]

On 11/12/2015 04:55 PM, Andrey Ryabinin wrote:
> 2015-11-12 18:17 GMT+03:00 Jerome Marchand <jmarchan@redhat.com>:
>> Commit 71394fe50146 ("mm: vmalloc: add flag preventing guard hole
>> allocation") missed a spot. Currently remove_vm_area() decreases
>> vm->size to remove the guard hole page, even when it isn't present.
>> This patch only decreases vm->size when VM_NO_GUARD isn't set.
>>
>> Signed-off-by: Jerome Marchand <jmarchan@redhat.com>
>> ---
>>  mm/vmalloc.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
>> index d045634..1388c3d 100644
>> --- a/mm/vmalloc.c
>> +++ b/mm/vmalloc.c
>> @@ -1443,7 +1443,8 @@ struct vm_struct *remove_vm_area(const void *addr)
>>                 vmap_debug_free_range(va->va_start, va->va_end);
>>                 kasan_free_shadow(vm);
>>                 free_unmap_vmap_area(va);
>> -               vm->size -= PAGE_SIZE;
>> +               if (!(vm->flags & VM_NO_GUARD))
>> +                       vm->size -= PAGE_SIZE;
>>
> 
> I'd fix this in another way. I think that remove_vm_area() shouldn't
> change vm's size, IMO it doesn't make sense.
> The only caller who cares about vm's size after removing is __vunmap():
>          area = remove_vm_area(addr);
>          ....
>          debug_check_no_locks_freed(addr, area->size);
>          debug_check_no_obj_freed(addr, area->size);
> 
> We already have proper get_vm_area_size() helper which takes
> VM_NO_GUARD into account.
> So I think we should use that helper for debug_check_no_*() and just
> remove 'vm->size -= PAGE_SIZE;' line
> from remove_vm_area()

Sure, that would be cleaner.

Btw, there might be a leak in sq_unmap() (arch/sh/kernel/cpu/sh4/sq.c)
as the vm_struct doesn't seem to be freed. CCed the SuperH folks.

Thanks,
Jerome

> 
> 
> 
>>                 return vm;
>>         }
>> --
>> 2.4.3
>>



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

  reply	other threads:[~2015-11-12 16:28 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-12 15:17 [PATCH] mm: vmalloc: don't remove inexistent guard hole in remove_vm_area() Jerome Marchand
2015-11-12 15:17 ` Jerome Marchand
2015-11-12 15:55 ` Andrey Ryabinin
2015-11-12 15:55   ` Andrey Ryabinin
2015-11-12 16:28   ` Jerome Marchand [this message]
2015-11-12 16:28     ` Jerome Marchand
2015-11-12 16:37 ` [PATCH V2] " Jerome Marchand
2015-11-12 16:37   ` Jerome Marchand
2015-11-12 18:48   ` Andrey Ryabinin
2015-11-12 18:48     ` Andrey Ryabinin
2015-11-12 20:55   ` David Rientjes
2015-11-12 20:55     ` David Rientjes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5644BE3E.7010708@redhat.com \
    --to=jmarchan@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=ryabinin.a.a@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.