----- On Mar 13, 2017, at 9:12 PM, Mathieu Desnoyers 
[email protected] wrote:

> ----- On Mar 13, 2017, at 6:11 PM, Jonathan Rajotte
> [email protected] wrote:
> 
>> fscanf on an empty file returns directly without assigning value to
>> 'index' leading to assigning the value of an uninitialized variable to
>> syscall_table_nb_entry. This can result in memory allocation problems
>> when listing syscalls on 'lttng list --kernel --syscall'[1][2].

Actually, you should also state in this changelog that it fixes
a second issue: we lose the last element due to off-by-one on
index.

Thanks,

Mathieu

>> 
>> Fixes #1091
>> 
>> [1] https://bugs.lttng.org/issues/1091
>> [2] https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1671063/
>> 
>> Signed-off-by: Jonathan Rajotte <[email protected]>
>> ---
>> src/bin/lttng-sessiond/syscall.c | 13 ++++++++++---
>> 1 file changed, 10 insertions(+), 3 deletions(-)
>> 
>> diff --git a/src/bin/lttng-sessiond/syscall.c 
>> b/src/bin/lttng-sessiond/syscall.c
>> index 6ee38bd..c21e4d8 100644
>> --- a/src/bin/lttng-sessiond/syscall.c
>> +++ b/src/bin/lttng-sessiond/syscall.c
>> @@ -16,6 +16,8 @@
>>  */
>> 
>> #define _LGPL_SOURCE
>> +#include <stdbool.h>
>> +
>> #include <common/bitfield.h>
>> #include <common/common.h>
>> #include <common/kernel-ctl/kernel-ctl.h>
>> @@ -43,7 +45,8 @@ int syscall_init_table(void)
>>      size_t nbmem;
>>      FILE *fp;
>>      /* Syscall data from the kernel. */
>> -    size_t index;
>> +    size_t index = 0;
>> +    bool at_least_one_syscall = false;
>>      uint32_t bitness;
>>      char name[SYSCALL_NAME_LEN];
>> 
>> @@ -76,7 +79,8 @@ int syscall_init_table(void)
>>                              name = %" XSTR(SYSCALL_NAME_LEN) "[^;]; \
>>                              bitness = %u; };\n",
>>                              &index, name, &bitness) == 3) {
>> -            if (index >= nbmem ) {
>> +            at_least_one_syscall = true;
>> +            if (index >= nbmem) {
>>                      struct syscall *new_list;
>>                      size_t new_nbmem;
>> 
>> @@ -123,7 +127,10 @@ int syscall_init_table(void)
>>              */
>>      }
>> 
>> -    syscall_table_nb_entry = index;
>> +    /* Index start at 0. */
> 
> start -> starts
> 
> other than that:
> 
> Acked-by: Mathieu Desnoyers <[email protected]>
> 
>> +    if (at_least_one_syscall) {
>> +            syscall_table_nb_entry = index + 1;
>> +    }
>> 
>>      ret = 0;
>> 
>> --
>> 2.7.4
>> 
>> _______________________________________________
>> lttng-dev mailing list
>> [email protected]
>> https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
> 
> --
> Mathieu Desnoyers
> EfficiOS Inc.
> http://www.efficios.com
> _______________________________________________
> lttng-dev mailing list
> [email protected]
> https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
_______________________________________________
lttng-dev mailing list
[email protected]
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to