Merge branch 'issue09-esci2-img-buffer-size-check' into '279-confidential-issue'

epsonds: Prevent possible buffer overflow when reading image data

See merge request paddy-hack/backends!8
merge-requests/463/merge
Olaf Meeuwissen 2020-05-07 09:42:42 +00:00
commit f38c9f0d64
3 zmienionych plików z 13 dodań i 5 usunięć

Wyświetl plik

@ -880,6 +880,11 @@ esci2_img(struct epsonds_scanner *s, SANE_Int *length)
return parse_status;
}
/* more data than was accounted for in s->buf */
if (more > s->bsz) {
return SANE_STATUS_IO_ERROR;
}
/* ALWAYS read image data */
if (s->hw->connection == SANE_EPSONDS_NET) {
epsonds_net_request_read(s, more);

Wyświetl plik

@ -1230,16 +1230,18 @@ sane_start(SANE_Handle handle)
if (s->line_buffer == NULL)
return SANE_STATUS_NO_MEM;
/* ring buffer for front page, twice bsz */
/* transfer buffer size, bsz */
/* XXX read value from scanner */
status = eds_ring_init(&s->front, (65536 * 4) * 2);
s->bsz = (65536 * 4);
/* ring buffer for front page */
status = eds_ring_init(&s->front, s->bsz * 2);
if (status != SANE_STATUS_GOOD) {
return status;
}
/* transfer buffer, bsz */
/* XXX read value from scanner */
s->buf = realloc(s->buf, 65536 * 4);
/* transfer buffer */
s->buf = realloc(s->buf, s->bsz);
if (s->buf == NULL)
return SANE_STATUS_NO_MEM;

Wyświetl plik

@ -160,6 +160,7 @@ struct epsonds_scanner
Option_Value val[NUM_OPTIONS];
SANE_Parameters params;
size_t bsz; /* transfer buffer size */
SANE_Byte *buf, *line_buffer;
ring_buffer *current, front, back;