init: verify size of property buffers passed to property_get
Verify that the buffer passed as the value parameter to property_get is always big enough. Change-Id: Ie5b6fcd94bb908215cfd55d0c9b07f717ddb70b1
This commit is contained in:
parent
9f5af63501
commit
88ac54a4e8
2 changed files with 18 additions and 2 deletions
|
@ -272,7 +272,7 @@ static int check_perms(const char *name, unsigned int uid, unsigned int gid, cha
|
|||
return 0;
|
||||
}
|
||||
|
||||
int property_get(const char *name, char value[PROP_VALUE_MAX])
|
||||
int __property_get(const char *name, char *value)
|
||||
{
|
||||
return __system_property_get(name, value);
|
||||
}
|
||||
|
|
|
@ -26,9 +26,25 @@ extern void property_load_boot_defaults(void);
|
|||
extern void load_persist_props(void);
|
||||
extern void start_property_service(void);
|
||||
void get_property_workspace(int *fd, int *sz);
|
||||
extern int property_get(const char *name, char value[PROP_VALUE_MAX]);
|
||||
extern int __property_get(const char *name, char *value);
|
||||
extern int property_set(const char *name, const char *value);
|
||||
extern int properties_inited();
|
||||
int get_property_set_fd(void);
|
||||
|
||||
extern void __property_get_size_error()
|
||||
__attribute__((__error__("property_get called with too small buffer")));
|
||||
|
||||
static inline
|
||||
__attribute__ ((always_inline))
|
||||
__attribute__ ((gnu_inline))
|
||||
__attribute__ ((artificial))
|
||||
int property_get(const char *name, char *value)
|
||||
{
|
||||
size_t value_len = __builtin_object_size(value, 0);
|
||||
if (value_len != PROP_VALUE_MAX)
|
||||
__property_get_size_error();
|
||||
|
||||
return __property_get(name, value);
|
||||
}
|
||||
|
||||
#endif /* _INIT_PROPERTY_H */
|
||||
|
|
Loading…
Reference in a new issue