On 20.04.21 11:08, Ralf Ramsauer wrote:
> 
> 
> On 20/04/2021 10:49, Bram Hooimeijer wrote:
>> Adds zalloc(size, align) which allocates memory and fills it with zeros.
>> Replaces usage of alloc() in inmates/lib with zalloc().
>>
>> Motivation is that use of alloc without zeroing mem.c:map_range()
>> results in illegal page tables if memory contains artefacts.
>>
>> Signed-off-by: Bram Hooimeijer <[email protected]>
> 
> Reviewed-by: Ralf Ramsauer <[email protected]>
> 
> Thanks
>   Ralf
> 

Thanks to both of you, applied.

Jan

>> ---
>>  inmates/lib/alloc.c                 | 9 +++++++++
>>  inmates/lib/arm-common/mem.c        | 3 +--
>>  inmates/lib/include/inmate_common.h | 1 +
>>  inmates/lib/x86/mem.c               | 4 ++--
>>  inmates/lib/x86/smp.c               | 2 +-
>>  5 files changed, 14 insertions(+), 5 deletions(-)
>>
>> diff --git a/inmates/lib/alloc.c b/inmates/lib/alloc.c
>> index e68e6cc1..5da6828a 100644
>> --- a/inmates/lib/alloc.c
>> +++ b/inmates/lib/alloc.c
>> @@ -5,6 +5,7 @@
>>   *
>>   * Authors:
>>   *  Jan Kiszka <[email protected]>
>> + *  Bram Hooimeijer <[email protected]>
>>   *
>>   * This work is licensed under the terms of the GNU GPL, version 2.  See
>>   * the COPYING file in the top-level directory.
>> @@ -47,3 +48,11 @@ void *alloc(unsigned long size, unsigned long align)
>>      heap_pos = base + size;
>>      return (void *)base;
>>  }
>> +
>> +void *zalloc(unsigned long size, unsigned long align)
>> +{
>> +    void *base = alloc(size, align);
>> +    memset(base, 0, size);
>> +
>> +    return base;
>> +}
>> diff --git a/inmates/lib/arm-common/mem.c b/inmates/lib/arm-common/mem.c
>> index 5951fafc..5064b002 100644
>> --- a/inmates/lib/arm-common/mem.c
>> +++ b/inmates/lib/arm-common/mem.c
>> @@ -56,8 +56,7 @@ void map_range(void *start, unsigned long size, enum 
>> map_type map_type)
>>      while (size) {
>>              pgd_index = PGD_INDEX(vaddr);
>>              if (!(page_directory[pgd_index] & LONG_DESC_TABLE)) {
>> -                    pmd = alloc(PAGE_SIZE, PAGE_SIZE);
>> -                    memset(pmd, 0, PAGE_SIZE);
>> +                    pmd = zalloc(PAGE_SIZE, PAGE_SIZE);
>>                      /* ensure the page table walker will see the zeroes */
>>                      synchronization_barrier();
>>  
>> diff --git a/inmates/lib/include/inmate_common.h 
>> b/inmates/lib/include/inmate_common.h
>> index 5af1213a..1c20a0af 100644
>> --- a/inmates/lib/include/inmate_common.h
>> +++ b/inmates/lib/include/inmate_common.h
>> @@ -103,6 +103,7 @@ void __attribute__((format(printf, 1, 2))) printk(const 
>> char *fmt, ...);
>>  extern unsigned long heap_pos;
>>  
>>  void *alloc(unsigned long size, unsigned long align);
>> +void *zalloc(unsigned long size, unsigned long align);
>>  
>>  void *memset(void *s, int c, unsigned long n);
>>  void *memcpy(void *d, const void *s, unsigned long n);
>> diff --git a/inmates/lib/x86/mem.c b/inmates/lib/x86/mem.c
>> index 7e1c8b83..764bdb4b 100644
>> --- a/inmates/lib/x86/mem.c
>> +++ b/inmates/lib/x86/mem.c
>> @@ -57,7 +57,7 @@ void map_range(void *start, unsigned long size, enum 
>> map_type map_type)
>>              if (*pt_entry & PAGE_FLAG_PRESENT) {
>>                      pt = (unsigned long *)(*pt_entry & PAGE_MASK);
>>              } else {
>> -                    pt = alloc(PAGE_SIZE, PAGE_SIZE);
>> +                    pt = zalloc(PAGE_SIZE, PAGE_SIZE);
>>                      *pt_entry = (unsigned long)pt | PAGE_DEFAULT_FLAGS;
>>              }
>>  
>> @@ -65,7 +65,7 @@ void map_range(void *start, unsigned long size, enum 
>> map_type map_type)
>>              if (*pt_entry & PAGE_FLAG_PRESENT) {
>>                      pt = (unsigned long *)(*pt_entry & PAGE_MASK);
>>              } else {
>> -                    pt = alloc(PAGE_SIZE, PAGE_SIZE);
>> +                    pt = zalloc(PAGE_SIZE, PAGE_SIZE);
>>                      *pt_entry = (unsigned long)pt | PAGE_DEFAULT_FLAGS;
>>              }
>>  
>> diff --git a/inmates/lib/x86/smp.c b/inmates/lib/x86/smp.c
>> index 94ce2913..625ddaf0 100644
>> --- a/inmates/lib/x86/smp.c
>> +++ b/inmates/lib/x86/smp.c
>> @@ -54,7 +54,7 @@ void smp_start_cpu(unsigned int cpu_id, void 
>> (*entry)(void))
>>      u64 base_val = ((u64)cpu_id << 32) | APIC_LVL_ASSERT;
>>  
>>      ap_entry = entry;
>> -    stack = alloc(PAGE_SIZE, PAGE_SIZE) + PAGE_SIZE;
>> +    stack = zalloc(PAGE_SIZE, PAGE_SIZE) + PAGE_SIZE;
>>  
>>      write_msr(X2APIC_ICR, base_val | APIC_DM_INIT);
>>      delay_us(10000);
>>

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/881c7449-a4e3-ca2a-dfbb-fa28f24f6446%40siemens.com.

Reply via email to