Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ppp: deflate: never return len larger than output buffer

When we've run out of space in the output buffer to store more data, we
will call zlib_deflate with a NULL output buffer until we've consumed
remaining input.

When this happens, olen contains the size the output buffer would have
consumed iff we'd have had enough room.

This can later cause skb_over_panic when ppp_generic skb_put()s
the returned length.

Reported-by: Iain Douglas <centos@1n6.org.uk>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Florian Westphal and committed by
David S. Miller
e2a4800e d445d63b

+1 -1
+1 -1
drivers/net/ppp/ppp_deflate.c
··· 246 246 /* 247 247 * See if we managed to reduce the size of the packet. 248 248 */ 249 - if (olen < isize) { 249 + if (olen < isize && olen <= osize) { 250 250 state->stats.comp_bytes += olen; 251 251 state->stats.comp_packets++; 252 252 } else {