openvswitch: validate MPLS set/set_masked payload length
validate_set() accepted OVS_KEY_ATTR_MPLS as variable-sized payload for
SET/SET_MASKED actions. In action handling, OVS expects fixed-size
MPLS key data (struct ovs_key_mpls).
Use the already normalized key_len (masked case included) and reject
non-matching MPLS action key sizes.
Reject invalid MPLS action payload lengths early.
Fixes: fbdcdd78da ("Change in Openvswitch to support MPLS label depth of 3 in ingress direction")
Reported-by: Yifan Wu <yifanwucs@gmail.com>
Reported-by: Juefei Pu <tomapufckgml@gmail.com>
Tested-by: Ao Zhou <n05ec@lzu.edu.cn>
Co-developed-by: Yuan Tan <tanyuan98@outlook.com>
Signed-off-by: Yuan Tan <tanyuan98@outlook.com>
Suggested-by: Xin Liu <bird@lzu.edu.cn>
Signed-off-by: Yang Yang <n05ec@lzu.edu.cn>
Reviewed-by: Ilya Maximets <i.maximets@ovn.org>
Link: https://patch.msgid.link/20260319080228.3423307-1-n05ec@lzu.edu.cn
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
6931d21f87
commit
546b68ac89
|
|
@ -2953,6 +2953,8 @@ static int validate_set(const struct nlattr *a,
|
||||||
case OVS_KEY_ATTR_MPLS:
|
case OVS_KEY_ATTR_MPLS:
|
||||||
if (!eth_p_mpls(eth_type))
|
if (!eth_p_mpls(eth_type))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
if (key_len != sizeof(struct ovs_key_mpls))
|
||||||
|
return -EINVAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OVS_KEY_ATTR_SCTP:
|
case OVS_KEY_ATTR_SCTP:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue