[PATCH libinput] util: abort if we try to allocate more than a MB
Peter Hutterer
peter.hutterer at who-t.net
Wed Jun 20 00:32:04 UTC 2018
On Tue, Jun 19, 2018 at 09:22:52PM -0300, Matheus Santana wrote:
> Reviewed-by: Matheus Santana <embs at cin.ufpe.br>
>
> The check for negatives isn't needed anymore?
you mean zalloc_overflow? good point. I'll leave it in though because it
does test a valid error case. I've added more tests for zalloc(some large
number) though.
diff --git a/test/litest-selftest.c b/test/litest-selftest.c
index 72bdabac..ab185d2a 100644
--- a/test/litest-selftest.c
+++ b/test/litest-selftest.c
@@ -350,6 +350,19 @@ START_TEST(zalloc_overflow)
}
END_TEST
+START_TEST(zalloc_max_size)
+{
+ /* Built-in alloc maximum */
+ zalloc(1024 * 1024);
+}
+END_TEST
+
+START_TEST(zalloc_too_large)
+{
+ zalloc(1024 * 1024 + 1);
+}
+END_TEST
+
static Suite *
litest_assert_macros_suite(void)
{
@@ -415,7 +428,9 @@ litest_assert_macros_suite(void)
suite_add_tcase(s, tc);
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_too_large, SIGABRT);
suite_add_tcase(s, tc);
return s;
Cheers,
Peter
>
> On Tue, Jun 19, 2018 at 8:44 PM, Peter Hutterer <peter.hutterer at who-t.net>
> wrote:
>
> > 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 at who-t.net>
> > ---
> > src/libinput-util.h | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/libinput-util.h b/src/libinput-util.h
> > index 8c67dcbd..4f60e8ea 100644
> > --- a/src/libinput-util.h
> > +++ b/src/libinput-util.h
> > @@ -142,7 +142,9 @@ zalloc(size_t size)
> > {
> > 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();
> >
> > p = calloc(1, size);
> > --
> > 2.17.1
More information about the wayland-devel
mailing list