kopia lustrzana https://gitlab.com/sane-project/backends
Address memory corruption and information leakage.
Addresses CVE-2017-6318, Alioth#315576 and Debian's BTS#854804.merge-requests/1/head
rodzic
eaa4d4407d
commit
4289693982
|
@ -1992,6 +1992,38 @@ process_request (Wire * w)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Addresses CVE-2017-6318 (#315576, Debian BTS #853804) */
|
||||||
|
/* This is done here (rather than in sanei/sanei_wire.c where
|
||||||
|
* it should be done) to minimize scope of impact and amount
|
||||||
|
* of code change.
|
||||||
|
*/
|
||||||
|
if (w->direction == WIRE_DECODE
|
||||||
|
&& req.value_type == SANE_TYPE_STRING
|
||||||
|
&& req.action == SANE_ACTION_GET_VALUE)
|
||||||
|
{
|
||||||
|
if (req.value)
|
||||||
|
{
|
||||||
|
/* FIXME: If req.value contains embedded NUL
|
||||||
|
* characters, this is wrong but we do not have
|
||||||
|
* access to the amount of memory allocated in
|
||||||
|
* sanei/sanei_wire.c at this point.
|
||||||
|
*/
|
||||||
|
w->allocated_memory -= (1 + strlen (req.value));
|
||||||
|
free (req.value);
|
||||||
|
}
|
||||||
|
req.value = malloc (req.value_size);
|
||||||
|
if (!req.value)
|
||||||
|
{
|
||||||
|
w->status = ENOMEM;
|
||||||
|
DBG (DBG_ERR,
|
||||||
|
"process_request: (control_option) "
|
||||||
|
"h=%d (%s)\n", req.handle, strerror (w->status));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
memset (req.value, 0, req.value_size);
|
||||||
|
w->allocated_memory += req.value_size;
|
||||||
|
}
|
||||||
|
|
||||||
can_authorize = 1;
|
can_authorize = 1;
|
||||||
|
|
||||||
memset (&reply, 0, sizeof (reply)); /* avoid leaking bits */
|
memset (&reply, 0, sizeof (reply)); /* avoid leaking bits */
|
||||||
|
|
Ładowanie…
Reference in New Issue