mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-05-09 03:38:01 +02:00
util: abort if we try to allocate more than a MB
The ssize_t cast upsets coverity for some reason but we can be a lot more restrictive here anyway. Quick analysis of the zalloc calls in the test suite show the largest allocation is 9204 bytes. Let's put a cap on for one MB, anything above that is likely some memory corruption and should be caught early. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Matheus Santana <embs@cin.ufpe.br>
This commit is contained in:
parent
4203ab52bf
commit
793c8d51e8
2 changed files with 18 additions and 1 deletions
|
|
@ -142,7 +142,9 @@ zalloc(size_t size)
|
||||||
{
|
{
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
if ((ssize_t)size < 0)
|
/* We never need to alloc anything even near one MB so we can assume
|
||||||
|
* if we ever get above that something's going wrong */
|
||||||
|
if (size > 1024 * 1024)
|
||||||
abort();
|
abort();
|
||||||
|
|
||||||
p = calloc(1, size);
|
p = calloc(1, size);
|
||||||
|
|
|
||||||
|
|
@ -350,6 +350,19 @@ START_TEST(zalloc_overflow)
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(zalloc_max_size)
|
||||||
|
{
|
||||||
|
/* Built-in alloc maximum */
|
||||||
|
free(zalloc(1024 * 1024));
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(zalloc_too_large)
|
||||||
|
{
|
||||||
|
zalloc(1024 * 1024 + 1);
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
static Suite *
|
static Suite *
|
||||||
litest_assert_macros_suite(void)
|
litest_assert_macros_suite(void)
|
||||||
{
|
{
|
||||||
|
|
@ -415,7 +428,9 @@ litest_assert_macros_suite(void)
|
||||||
suite_add_tcase(s, tc);
|
suite_add_tcase(s, tc);
|
||||||
|
|
||||||
tc = tcase_create("zalloc ");
|
tc = tcase_create("zalloc ");
|
||||||
|
tcase_add_test(tc, zalloc_max_size);
|
||||||
tcase_add_test_raise_signal(tc, zalloc_overflow, SIGABRT);
|
tcase_add_test_raise_signal(tc, zalloc_overflow, SIGABRT);
|
||||||
|
tcase_add_test_raise_signal(tc, zalloc_too_large, SIGABRT);
|
||||||
suite_add_tcase(s, tc);
|
suite_add_tcase(s, tc);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue