glamor-egl, parameter checking
Zhigang Gong
zhigang.gong at linux.intel.com
Thu Sep 26 02:01:14 PDT 2013
Thanks for reporting these issues. I will investigate them after I back from
holiday, say after 8/10.
-----Original Message-----
From: xorg-devel-bounces+zhigang.gong=linux.intel.com at lists.x.org
[mailto:xorg-devel-bounces+zhigang.gong=linux.intel.com at lists.x.org] On
Behalf Of Seth Arnold
Sent: Thursday, September 26, 2013 9:29 AM
To: xorg-devel at lists.x.org
Cc: security at ubuntu.com
Subject: glamor-egl, parameter checking
Hello, I recently gave glamor-egl a very quick audit, and found some issues
that I wanted to run past someone who would know the code better than I do.
- _glamor_poly_lines():
- unchecked malloc() return value
- if n = 1 is passed to the function, the malloc might allocate zero
bytes:
rects = malloc(sizeof(xRectangle) * (n - 1));
Can n = 1 be a realistic input to this function? It appears to be
callable from outside the library with arbitrary inputs.
Is this safe?
- _pixman_region_init_clipped_rectangles()
- The unsigned int num_rects argument is passed, unchecked, to
boxes = malloc(sizeof(pixman_box16_t) * num_rects);
-- can a large-enough value of num_rects cause a multiplication
overflow here, allocating less memory than necessary?
It appears to be callable from outside the library with arbitrary
inputs. Is this safe?
- glamor_create_composite_fs() appears to have two unguarded divisions
in relocate_texture that might result in divide-by-zero, wh.x and wh.y
-- are these guarded somewhere else?
- glamor_create_composite_fs() appears to have an unguarded division in
rel_sampler that might result in divide-by-zero, wh.xy -- is this
guarded somewhere else?
- glamor_pixmap_attach_fbo() has a switch statement that uses
fall-through after a block of code, but there's no comment nearby to
assure the reader that it is intentional. Is it intentional? :)
There are several unchecked memory allocations:
- glamor_compile_glsl_prog() unchecked malloc() return value
- glamor_egl_init() unchecked calloc() return value glamor_egl
- glamor_compute_clipped_regions_ext() unchecked calloc() return value
result_regions
- __glamor_compute_clipped_regions() unchecked calloc() return value
clipped_regions
- glamor_composite_largepixmap_region() unchecked malloc() return value
source_pixmap_priv
(While it's true malloc() will almost never return NULL, someone may someday
wish to run this code with overcommit turned off, and it'd be better to be
safe.)
Thanks
More information about the xorg-devel
mailing list