diff options
| author | David Lamparter <equinox@opensourcerouting.org> | 2020-01-16 14:30:57 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-16 14:30:57 +0100 | 
| commit | 7390ea4f6fc6d980af215b8d8b55eccb9a484ddb (patch) | |
| tree | d34b76657bd042fbd61900e37449e371ac3d547d | |
| parent | 9da75626313daca848085c47c8570117f5db1dcb (diff) | |
| parent | b74d522b7e378e0588876d38d61d32f8f99dc2c0 (diff) | |
bgpd: [7.2] fix unaligned access to addpath id (#5693)
bgpd: [7.2] fix unaligned access to addpath id
| -rw-r--r-- | bgpd/bgp_evpn.c | 3 | ||||
| -rw-r--r-- | bgpd/bgp_label.c | 3 | ||||
| -rw-r--r-- | bgpd/bgp_mplsvpn.c | 3 | ||||
| -rw-r--r-- | bgpd/bgp_route.c | 2 | 
4 files changed, 7 insertions, 4 deletions
diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c index 4d02e39ae2..739f8e605f 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c @@ -4925,7 +4925,8 @@ int bgp_nlri_parse_evpn(struct peer *peer, struct attr *attr,  			if (pnt + BGP_ADDPATH_ID_LEN > lim)  				return BGP_NLRI_PARSE_ERROR_PACKET_OVERFLOW; -			addpath_id = ntohl(*((uint32_t *)pnt)); +			memcpy(&addpath_id, pnt, BGP_ADDPATH_ID_LEN); +			addpath_id = ntohl(addpath_id);  			pnt += BGP_ADDPATH_ID_LEN;  		} diff --git a/bgpd/bgp_label.c b/bgpd/bgp_label.c index 489ac6ea9f..ff1ab1a37d 100644 --- a/bgpd/bgp_label.c +++ b/bgpd/bgp_label.c @@ -368,7 +368,8 @@ int bgp_nlri_parse_label(struct peer *peer, struct attr *attr,  			if (pnt + BGP_ADDPATH_ID_LEN > lim)  				return BGP_NLRI_PARSE_ERROR_PACKET_OVERFLOW; -			addpath_id = ntohl(*((uint32_t *)pnt)); +			memcpy(&addpath_id, pnt, BGP_ADDPATH_ID_LEN); +			addpath_id = ntohl(addpath_id);  			pnt += BGP_ADDPATH_ID_LEN;  		} diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c index e8d3062561..3ad41ca620 100644 --- a/bgpd/bgp_mplsvpn.c +++ b/bgpd/bgp_mplsvpn.c @@ -142,7 +142,8 @@ int bgp_nlri_parse_vpn(struct peer *peer, struct attr *attr,  			if (pnt + BGP_ADDPATH_ID_LEN > lim)  				return BGP_NLRI_PARSE_ERROR_PACKET_OVERFLOW; -			addpath_id = ntohl(*((uint32_t *)pnt)); +			memcpy(&addpath_id, pnt, BGP_ADDPATH_ID_LEN); +			addpath_id = ntohl(addpath_id);  			pnt += BGP_ADDPATH_ID_LEN;  		} diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index d7f7fb0112..ea451f5f8d 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -4468,7 +4468,7 @@ int bgp_nlri_parse_ip(struct peer *peer, struct attr *attr,  			if (pnt + BGP_ADDPATH_ID_LEN > lim)  				return BGP_NLRI_PARSE_ERROR_PACKET_OVERFLOW; -			memcpy(&addpath_id, pnt, 4); +			memcpy(&addpath_id, pnt, BGP_ADDPATH_ID_LEN);  			addpath_id = ntohl(addpath_id);  			pnt += BGP_ADDPATH_ID_LEN;  		}  | 
