[OPNFLWPLUG-855] Conntrack Action deserialization - IndexOutOfBoundsException - seen in netvirt CSIT Created: 16/Feb/17  Updated: 27/Sep/21  Resolved: 21/Feb/17

Status: Resolved
Project: OpenFlowPlugin
Component/s: General
Affects Version/s: None
Fix Version/s: None

Type: Bug
Reporter: Alon Kochba Assignee: Aswin Suryanarayanan
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


Issue Links:
Duplicate
is duplicated by NETVIRT-487 IndexOutOfBoundsException: readerInde... Resolved
External issue ID: 7811

 Description   

Seen flooding the log here - https://logs.opendaylight.org/releng/jenkins092/netvirt-csit-1node-openstack-newton-nodl-v2-gate-stateful-carbon/96/archives/odl1_karaf.log.gz

Relates to decoding of conntrack actions from the stack below
ConntrackCodec.dserializeCtAction(ConntrackCodec.java:159)

017-02-16 11:52:12,812 | WARN | entLoopGroup-7-2 | OFDecoder | 309 - org.opendaylight.openflowjava.openflow-protocol-impl - 0.9.0.SNAPSHOT | Message deserialization failed
java.lang.IndexOutOfBoundsException: readerIndex(110) + length(2) exceeds writerIndex(110): UnpooledSlicedByteBuf(ridx: 110, widx: 110, cap: 110/110, unwrapped: PooledUnsafeDirectByteBuf(ridx: 10592, widx: 10592, cap: 16384))
at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1389)[144:io.netty.buffer:4.1.8.Final]
at io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1383)[144:io.netty.buffer:4.1.8.Final]
at io.netty.buffer.AbstractByteBuf.skipBytes(AbstractByteBuf.java:924)[144:io.netty.buffer:4.1.8.Final]
at org.opendaylight.openflowjava.nx.codec.action.AbstractActionCodec.deserializeHeader(AbstractActionCodec.java:37)[325:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.codec.action.ConntrackCodec.dserializeCtAction(ConntrackCodec.java:159)[325:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.codec.action.ConntrackCodec.deserialize(ConntrackCodec.java:151)[325:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.codec.action.ConntrackCodec.deserialize(ConntrackCodec.java:43)[325:org.opendaylight.openflowplugin.openflowjava-extension-nicira:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.api.impl.ActionDeserializer.deserialize(ActionDeserializer.java:59)[324:org.opendaylight.openflowplugin.openflowjava-extension-nicira-api:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.nx.api.impl.ActionDeserializer.deserialize(ActionDeserializer.java:22)[324:org.opendaylight.openflowplugin.openflowjava-extension-nicira-api:0.4.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.util.ListDeserializer.deserializeList(ListDeserializer.java:53)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.AbstractActionInstructionDeserializer.deserializeActions(AbstractActionInstructionDeserializer.java:38)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.ApplyActionsInstructionDeserializer.deserialize(ApplyActionsInstructionDeserializer.java:36)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.instruction.ApplyActionsInstructionDeserializer.deserialize(ApplyActionsInstructionDeserializer.java:25)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.util.ListDeserializer.deserializeList(ListDeserializer.java:53)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory.setFlow(MultipartReplyMessageFactory.java:304)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory.deserialize(MultipartReplyMessageFactory.java:198)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory.deserialize(MultipartReplyMessageFactory.java:148)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializationFactory.deserialize(DeserializationFactory.java:55)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.OFDecoder.decode(OFDecoder.java:49)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at org.opendaylight.openflowjava.protocol.impl.core.OFDecoder.decode(OFDecoder.java:26)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)[148:io.netty.codec:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[146:io.netty.transport:4.1.8.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[148:io.netty.codec:4.1.8.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[148:io.netty.codec:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[146:io.netty.transport:4.1.8.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)[148:io.netty.codec:4.1.8.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)[148:io.netty.codec:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[146:io.netty.transport:4.1.8.Final]
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:287)[150:io.netty.handler:4.1.8.Final]
at org.opendaylight.openflowjava.protocol.impl.core.IdleHandler.channelRead(IdleHandler.java:39)[309:org.opendaylight.openflowjava.openflow-protocol-impl:0.9.0.SNAPSHOT]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)[146:io.netty.transport:4.1.8.Final]
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:1018)[151:io.netty.transport-native-epoll:4.1.8.Final]
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:394)[151:io.netty.transport-native-epoll:4.1.8.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:288)[151:io.netty.transport-native-epoll:4.1.8.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)[145:io.netty.common:4.1.8.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)[145:io.netty.common:4.1.8.Final]
at java.lang.Thread.run(Thread.java:745)[:1.8.0_121]



 Comments   
Comment by Aswin Suryanarayanan [ 18/Feb/17 ]

The deserializer was not checking for the presence of NAT action before trying to parse it, hence the exception and the patch [1] addresses the issue.

[1]https://git.opendaylight.org/gerrit/#/c/52026/

Generated at Wed Feb 07 20:33:33 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.