Re: [PATCH] libselinux: set free'd data to NULL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



James Carter <jwcart2@xxxxxxxxx> writes:

> On Tue, Jul 9, 2024 at 3:24 PM Petr Lautrbach <lautrbach@xxxxxxxxxx> wrote:
>>
>> Fixes segfault in selabel_open() on systems with SELinux disabled and without any
>> SELinux policy installed introduced by commit 5876aca0484f ("libselinux: free
>> data on selabel open failure"):
>>
>>     $ sestatus
>>     SELinux status:                 disabled
>>
>>     $ cat /etc/selinux/config
>>     cat: /etc/selinux/config: No such file or directory
>>
>>     $ matchpathcon /abc
>>     [1]    907999 segmentation fault (core dumped)  matchpathcon /abc
>>
>
> I was able to recreate the problem and verify that this fixes it.
> Acked-by: James Carter <jwcart2@xxxxxxxxx>

This is merged now.


>
>> Signed-off-by: Petr Lautrbach <lautrbach@xxxxxxxxxx>
>> ---
>>  libselinux/src/label_backends_android.c | 1 +
>>  libselinux/src/label_file.c             | 1 +
>>  libselinux/src/label_media.c            | 1 +
>>  libselinux/src/label_x.c                | 1 +
>>  4 files changed, 4 insertions(+)
>>
>> diff --git a/libselinux/src/label_backends_android.c b/libselinux/src/label_backends_android.c
>> index 49a87686de4c..5bad24f20d73 100644
>> --- a/libselinux/src/label_backends_android.c
>> +++ b/libselinux/src/label_backends_android.c
>> @@ -260,6 +260,7 @@ static void closef(struct selabel_handle *rec)
>>                 free(data->spec_arr);
>>
>>         free(data);
>> +       rec->data = NULL;
>>  }
>>
>>  static struct selabel_lookup_rec *property_lookup(struct selabel_handle *rec,
>> diff --git a/libselinux/src/label_file.c b/libselinux/src/label_file.c
>> index 2732972e61cf..59c9f2ef3442 100644
>> --- a/libselinux/src/label_file.c
>> +++ b/libselinux/src/label_file.c
>> @@ -942,6 +942,7 @@ static void closef(struct selabel_handle *rec)
>>                 free(last_area);
>>         }
>>         free(data);
>> +       rec->data = NULL;
>>  }
>>
>>  // Finds all the matches of |key| in the given context. Returns the result in
>> diff --git a/libselinux/src/label_media.c b/libselinux/src/label_media.c
>> index 852aeada8ff4..bae065c12a55 100644
>> --- a/libselinux/src/label_media.c
>> +++ b/libselinux/src/label_media.c
>> @@ -183,6 +183,7 @@ static void close(struct selabel_handle *rec)
>>             free(spec_arr);
>>
>>         free(data);
>> +       rec->data = NULL;
>>  }
>>
>>  static struct selabel_lookup_rec *lookup(struct selabel_handle *rec,
>> diff --git a/libselinux/src/label_x.c b/libselinux/src/label_x.c
>> index a8decc7a0093..ddae4f6c22b6 100644
>> --- a/libselinux/src/label_x.c
>> +++ b/libselinux/src/label_x.c
>> @@ -210,6 +210,7 @@ static void close(struct selabel_handle *rec)
>>             free(spec_arr);
>>
>>         free(data);
>> +       rec->data = NULL;
>>  }
>>
>>  static struct selabel_lookup_rec *lookup(struct selabel_handle *rec,
>> --
>> 2.45.2
>>
>>






[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux