aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2008-11-14 10:30:26 +0000
committerMartin Willi <martin@strongswan.org>2008-11-14 10:30:26 +0000
commita65e1c5c3ac3b968778c6c2afb58e7cec8f66d03 (patch)
treea472f67a203e50913a6e43807381e47646bf2b97 /src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c
parentf5812086f898543f8afcac29a3f26cc5f4b7bb02 (diff)
downloadstrongswan-a65e1c5c3ac3b968778c6c2afb58e7cec8f66d03.tar.bz2
strongswan-a65e1c5c3ac3b968778c6c2afb58e7cec8f66d03.tar.xz
rta->rta_len is NOT the payload data length, use RTA_PAYLOAD(rta) instead!
Diffstat (limited to 'src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c')
-rw-r--r--src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c b/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c
index aa4dea9af..fbcd676e4 100644
--- a/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c
+++ b/src/charon/plugins/kernel_netlink/kernel_netlink_ipsec.c
@@ -1146,9 +1146,10 @@ static status_t get_replay_state(private_kernel_netlink_ipsec_t *this,
rtasize = XFRM_PAYLOAD(out, struct xfrm_aevent_id);
while(RTA_OK(rta, rtasize))
{
- if (rta->rta_type == XFRMA_REPLAY_VAL)
+ if (rta->rta_type == XFRMA_REPLAY_VAL &&
+ RTA_PAYLOAD(rta) == sizeof(struct xfrm_replay_state))
{
- memcpy(replay, RTA_DATA(rta), rta->rta_len);
+ memcpy(replay, RTA_DATA(rta), RTA_PAYLOAD(rta));
free(out);
return SUCCESS;
}