diff mbox

[1/1] libsemanage: always check append_arg return value

Message ID 20180422193032.8132-1-nicolas.iooss@m4x.org (mailing list archive)
State Not Applicable
Headers show

Commit Message

Nicolas Iooss April 22, 2018, 7:30 p.m. UTC
When split_args() calls append_arg(), the returned value needs to be
checked in order to detect memory allocation failure. Checks were
missing in two places, which are spotted by clang's static analyzer:

    semanage_store.c:1352:7: warning: Value stored to 'rc' is never
    read
            rc = append_arg(&argv, &num_args, arg);
            ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    semanage_store.c:1368:3: warning: Value stored to 'rc' is never read
            rc = append_arg(&argv, &num_args, arg);
            ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
---
 libsemanage/src/semanage_store.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

William Roberts April 23, 2018, 4:50 p.m. UTC | #1
On Sun, Apr 22, 2018 at 12:30 PM, Nicolas Iooss <nicolas.iooss@m4x.org> wrote:
> When split_args() calls append_arg(), the returned value needs to be
> checked in order to detect memory allocation failure. Checks were
> missing in two places, which are spotted by clang's static analyzer:
>
>     semanage_store.c:1352:7: warning: Value stored to 'rc' is never
>     read
>             rc = append_arg(&argv, &num_args, arg);
>             ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     semanage_store.c:1368:3: warning: Value stored to 'rc' is never read
>             rc = append_arg(&argv, &num_args, arg);
>             ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
> ---
>  libsemanage/src/semanage_store.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/libsemanage/src/semanage_store.c b/libsemanage/src/semanage_store.c
> index 14ad99c152ad..bce648c46464 100644
> --- a/libsemanage/src/semanage_store.c
> +++ b/libsemanage/src/semanage_store.c
> @@ -1350,6 +1350,8 @@ static char **split_args(const char *arg0, char *arg_string,
>                                 if (isspace(*s) && !in_quote && !in_dquote) {
>                                         if (arg != NULL) {
>                                                 rc = append_arg(&argv, &num_args, arg);
> +                                               if (rc)
> +                                                       goto cleanup;
>                                                 free(arg);
>                                                 arg = NULL;
>                                         }
> @@ -1366,6 +1368,8 @@ static char **split_args(const char *arg0, char *arg_string,
>         }
>         if (arg != NULL) {
>                 rc = append_arg(&argv, &num_args, arg);
> +               if (rc)
> +                       goto cleanup;
>                 free(arg);
>                 arg = NULL;
>         }
> --
> 2.17.0
>
>

ack
William Roberts April 25, 2018, 5:09 p.m. UTC | #2
Merged: https://github.com/SELinuxProject/selinux/pull/94

On Mon, Apr 23, 2018 at 9:50 AM, William Roberts
<bill.c.roberts@gmail.com> wrote:
> On Sun, Apr 22, 2018 at 12:30 PM, Nicolas Iooss <nicolas.iooss@m4x.org> wrote:
>> When split_args() calls append_arg(), the returned value needs to be
>> checked in order to detect memory allocation failure. Checks were
>> missing in two places, which are spotted by clang's static analyzer:
>>
>>     semanage_store.c:1352:7: warning: Value stored to 'rc' is never
>>     read
>>             rc = append_arg(&argv, &num_args, arg);
>>             ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>     semanage_store.c:1368:3: warning: Value stored to 'rc' is never read
>>             rc = append_arg(&argv, &num_args, arg);
>>             ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
>> ---
>>  libsemanage/src/semanage_store.c | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/libsemanage/src/semanage_store.c b/libsemanage/src/semanage_store.c
>> index 14ad99c152ad..bce648c46464 100644
>> --- a/libsemanage/src/semanage_store.c
>> +++ b/libsemanage/src/semanage_store.c
>> @@ -1350,6 +1350,8 @@ static char **split_args(const char *arg0, char *arg_string,
>>                                 if (isspace(*s) && !in_quote && !in_dquote) {
>>                                         if (arg != NULL) {
>>                                                 rc = append_arg(&argv, &num_args, arg);
>> +                                               if (rc)
>> +                                                       goto cleanup;
>>                                                 free(arg);
>>                                                 arg = NULL;
>>                                         }
>> @@ -1366,6 +1368,8 @@ static char **split_args(const char *arg0, char *arg_string,
>>         }
>>         if (arg != NULL) {
>>                 rc = append_arg(&argv, &num_args, arg);
>> +               if (rc)
>> +                       goto cleanup;
>>                 free(arg);
>>                 arg = NULL;
>>         }
>> --
>> 2.17.0
>>
>>
>
> ack
diff mbox

Patch

diff --git a/libsemanage/src/semanage_store.c b/libsemanage/src/semanage_store.c
index 14ad99c152ad..bce648c46464 100644
--- a/libsemanage/src/semanage_store.c
+++ b/libsemanage/src/semanage_store.c
@@ -1350,6 +1350,8 @@  static char **split_args(const char *arg0, char *arg_string,
 				if (isspace(*s) && !in_quote && !in_dquote) {
 					if (arg != NULL) {
 						rc = append_arg(&argv, &num_args, arg);
+						if (rc)
+							goto cleanup;
 						free(arg);
 						arg = NULL;
 					}
@@ -1366,6 +1368,8 @@  static char **split_args(const char *arg0, char *arg_string,
 	}
 	if (arg != NULL) {
 		rc = append_arg(&argv, &num_args, arg);
+		if (rc)
+			goto cleanup;
 		free(arg);
 		arg = NULL;
 	}