Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5a860ef authored by Colin Cross's avatar Colin Cross
Browse files

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.

(cherry picked from commit 88ac54a4)

Change-Id: Iacc2b42bfe4069e0bfcbb1c48474f30126a93139
parent 993b6cee
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -265,7 +265,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);
}
+17 −1
Original line number Diff line number Diff line
@@ -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 */