mirror of
https://github.com/openvswitch/ovs
synced 2025-09-01 06:45:17 +00:00
ofp-actions: Prevent integer overflow in decode.
When decoding a variable-length action, if the length of the action exceeds the length storable in a uint16_t then something has gone terribly wrong. Assert that this is not the case. Signed-off-by: Joe Stringer <joe@ovn.org> Acked-by: Jarno Rajahalme <jarno@ovn.org>
This commit is contained in:
@@ -7401,8 +7401,12 @@ ofpact_init(struct ofpact *ofpact, enum ofpact_type type, size_t len)
|
|||||||
void
|
void
|
||||||
ofpact_finish(struct ofpbuf *ofpacts, struct ofpact *ofpact)
|
ofpact_finish(struct ofpbuf *ofpacts, struct ofpact *ofpact)
|
||||||
{
|
{
|
||||||
|
ptrdiff_t len;
|
||||||
|
|
||||||
ovs_assert(ofpact == ofpacts->header);
|
ovs_assert(ofpact == ofpacts->header);
|
||||||
ofpact->len = (char *) ofpbuf_tail(ofpacts) - (char *) ofpact;
|
len = (char *) ofpbuf_tail(ofpacts) - (char *) ofpact;
|
||||||
|
ovs_assert(len <= UINT16_MAX);
|
||||||
|
ofpact->len = len;
|
||||||
ofpbuf_padto(ofpacts, OFPACT_ALIGN(ofpacts->size));
|
ofpbuf_padto(ofpacts, OFPACT_ALIGN(ofpacts->size));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user