diff options
| author | Alan Dunn <amdunn@gmail.com> | 2014-02-06 08:12:46 -0600 |
|---|---|---|
| committer | Andreas Schneider <asn@cryptomilk.org> | 2014-02-06 19:41:00 +0100 |
| commit | bb0023b7c703a932b59756b728c95ca7e28e58c4 (patch) | |
| tree | 0bb52537ce4096ff42f743a9564744691660b43f /src/buffer.c | |
| parent | 398e8d50b54c6947b9c6e494fc6adc17e96521be (diff) | |
| download | libssh-bb0023b7c703a932b59756b728c95ca7e28e58c4.tar.gz libssh-bb0023b7c703a932b59756b728c95ca7e28e58c4.tar.xz libssh-bb0023b7c703a932b59756b728c95ca7e28e58c4.zip | |
packet: Do not decrypt zero length rest of buffer
If we receive a packet of length exactly blocksize, then
packet_decrypt gets called on a buffer of size 0. The check at the
beginning of packet_decrypt indicates that the function should be
called on buffers of at least one blocksize, though the check allows
through zero length. As is packet_decrypt can return -1 when len is 0
because malloc can return NULL in this case: according to the ISO C
standard, malloc is free to return NULL or a pointer that can be freed
when size == 0, and uclibc by default will return NULL here (in
"non-glibc-compatible" mode). The net result is that when using
uclibc connections with libssh can anomalously fail.
Alternatively, packet_decrypt (and probably packet_encrypt for
consistency) could be made to always succeed on len == 0 without
depending on the behavior of malloc.
Thanks to Josh Berlin for bringing conneciton failures with uclibc to
my attention.
Signed-off-by: Alan Dunn <amdunn@gmail.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/buffer.c')
0 files changed, 0 insertions, 0 deletions
