From 75cc88546b893280add608becfd5887470573813 Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Thu, 31 Jan 2013 14:28:59 -0800 Subject: [PATCH] property_get: do argument checking. Try to verify, at compile time, that the supplied value buffer is large enough. There's more we can do here, but this is a good first pass. Change-Id: Iac8153826c89114b2755735032423c6744f7a61b --- include/cutils/properties.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/cutils/properties.h b/include/cutils/properties.h index 25fd67ae0..5ec8c2cc3 100644 --- a/include/cutils/properties.h +++ b/include/cutils/properties.h @@ -17,6 +17,9 @@ #ifndef __CUTILS_PROPERTIES_H #define __CUTILS_PROPERTIES_H +#include +#include + #ifdef __cplusplus extern "C" { #endif @@ -62,6 +65,23 @@ enum { }; #endif /*HAVE_SYSTEM_PROPERTY_SERVER*/ +#ifdef __BIONIC_FORTIFY_INLINE + +extern int __property_get_real(const char *, char *, const char *) + __asm__(__USER_LABEL_PREFIX__ "property_get"); +extern void __property_get_too_small_error() + __attribute__((__error__("property_get() called with too small of a buffer"))); + +__BIONIC_FORTIFY_INLINE +int property_get(const char *key, char *value, const char *default_value) { + size_t bos = __builtin_object_size(value, 0); + if (bos < PROPERTY_VALUE_MAX) { + __property_get_too_small_error(); + } + return __property_get_real(key, value, default_value); +} + +#endif /* __BIONIC_FORTIFY_INLINE */ #ifdef __cplusplus }