[libcamera-devel] [PATCH 2/2] libcamera: utils: call secure_getenv() if it exists or workaround with issetugid()

Kieran Bingham kieran.bingham at ideasonboard.com
Fri Apr 26 09:02:55 CEST 2019


Hi Giulio

On 24/04/2019 13:00, Giulio Benetti wrote:
> When secure_getenv() is not available, need to have a workaround.
> 
> Check if secure_getenv() is present, otherwise call issetugid() on its
> place.
> 
> Signed-off-by: Giulio Benetti <giulio.benetti at micronovasrl.com>
> ---
>  src/libcamera/utils.cpp | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/src/libcamera/utils.cpp b/src/libcamera/utils.cpp
> index 66123b1..529dd4a 100644
> --- a/src/libcamera/utils.cpp
> +++ b/src/libcamera/utils.cpp
> @@ -8,7 +8,7 @@
>  #include "utils.h"
>  
>  #include <string.h>
> -#include <sys/auxv.h>
> +#include <unistd.h>
>  
>  /**
>   * \file utils.h
> @@ -57,10 +57,14 @@ const char *basename(const char *path)
>   */
>  char *secure_getenv(const char *name)
>  {
> -	if (getauxval(AT_SECURE))
> +#if HAVE_SECURE_GETENV
> +	return secure_getenv(name);

This causes segfaults in the tests, which is odd as reading the code I
expected an infinite loop.

(you can run the tests with ninja test)

I believe the correct expression here is to add '::' to choose the top
level name-space explicitly:

+	return ::secure_getenv(name);


> +#else
> +	if (issetugid())
>  		return NULL;
>  
>  	return getenv(name);
> +#endif
>  }
>  
>  /**
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list