linux-stable/net/rxrpc
David Howells 6c9a2d3202 af_rxrpc: Fix UDP MTU calculation from ICMP_FRAG_NEEDED
AF_RXRPC sends UDP packets with the "Don't Fragment" bit set in an attempt to
determine the maximum packet size between the local socket and the peer by
invoking the generation of ICMP_FRAG_NEEDED packets.

Once a packet is sent with the "Don't Fragment" bit set, it is then
inconvenient to break it up as that requires recalculating all the rxrpc serial
and sequence numbers and reencrypting all the fragments, so we switch off the
"Don't Fragment" service temporarily and send the bounced packet again.  Future
packets then use the new MTU.

That's all fine.  The problem lies in rxrpc_UDP_error_report() where the code
that deals with ICMP_FRAG_NEEDED packets lives.  Packets of this type have a
field (ee_info) to indicate the maximum packet size at the reporting node - but
sometimes ee_info isn't filled in and is just left as 0 and the code must allow
for this.

When ee_info is 0, the code should take the MTU size we're currently using and
reduce it for the next packet we want to send.  However, it takes ee_info
(which is known to be 0) and tries to reduce that instead.

This was discovered by Coverity.

Reported-by: Dave Jones <davej@redhat.com>
Signed-off-by: David Howells <dhowells@redhat.com>
2014-02-26 17:25:01 +00:00
..
af_rxrpc.c net: proc: change proc_net_remove to remove_proc_entry 2013-02-18 14:53:08 -05:00
ar-accept.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
ar-ack.c rxrpc: out of bound read in debug code 2014-01-21 17:02:52 -08:00
ar-call.c net: cleanup unsigned to unsigned int 2012-04-15 12:44:40 -04:00
ar-connection.c RxRPC: do not unlock unheld spinlock in rxrpc_connect_exclusive() 2014-01-26 11:39:51 +00:00
ar-connevent.c rxrpc: Kill set but unused variable 'sp' in rxrpc_process_connection() 2011-05-19 18:35:58 -04:00
ar-error.c af_rxrpc: Fix UDP MTU calculation from ICMP_FRAG_NEEDED 2014-02-26 17:25:01 +00:00
ar-input.c af_rxrpc: Prevent RxRPC peers from ABORT-storming one another 2014-02-07 18:58:43 +00:00
ar-internal.h net: misc: Remove extern from function prototypes 2013-10-19 19:12:11 -04:00
ar-key.c Merge branch 'modules-next' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux 2012-10-14 13:39:34 -07:00
ar-local.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
ar-output.c net: add build-time checks for msg->msg_name size 2014-01-18 23:04:16 -08:00
ar-peer.c net/rxrpc/ar-peer.c: remove invalid reference to list iterator variable 2012-07-09 15:24:33 -07:00
ar-proc.c
ar-recvmsg.c af_rxrpc: Remove incorrect checksum calculation from rxrpc_recvmsg() 2014-02-07 18:58:43 +00:00
ar-security.c
ar-skbuff.c
ar-transport.c rxrpc: Fix set but unused variable 'usage' in rxrpc_get_transport() 2011-05-19 18:51:50 -04:00
Kconfig net/rxrpc: remove depends on CONFIG_EXPERIMENTAL 2013-01-11 11:40:02 -08:00
Makefile Net: rxrpc: Makefile: Remove deprecated kbuild goal definitions 2010-11-22 08:16:15 -08:00
rxkad.c net: cleanup unsigned to unsigned int 2012-04-15 12:44:40 -04:00