diff options
-rw-r--r-- | net/x25/x25_facilities.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/x25/x25_facilities.c b/net/x25/x25_facilities.c index 66c638730c7a..b8253250d723 100644 --- a/net/x25/x25_facilities.c +++ b/net/x25/x25_facilities.c | |||
@@ -156,6 +156,8 @@ int x25_parse_facilities(struct sk_buff *skb, struct x25_facilities *facilities, | |||
156 | case X25_FAC_CALLING_AE: | 156 | case X25_FAC_CALLING_AE: |
157 | if (p[1] > X25_MAX_DTE_FACIL_LEN || p[1] <= 1) | 157 | if (p[1] > X25_MAX_DTE_FACIL_LEN || p[1] <= 1) |
158 | return -1; | 158 | return -1; |
159 | if (p[2] > X25_MAX_AE_LEN) | ||
160 | return -1; | ||
159 | dte_facs->calling_len = p[2]; | 161 | dte_facs->calling_len = p[2]; |
160 | memcpy(dte_facs->calling_ae, &p[3], p[1] - 1); | 162 | memcpy(dte_facs->calling_ae, &p[3], p[1] - 1); |
161 | *vc_fac_mask |= X25_MASK_CALLING_AE; | 163 | *vc_fac_mask |= X25_MASK_CALLING_AE; |
@@ -163,6 +165,8 @@ int x25_parse_facilities(struct sk_buff *skb, struct x25_facilities *facilities, | |||
163 | case X25_FAC_CALLED_AE: | 165 | case X25_FAC_CALLED_AE: |
164 | if (p[1] > X25_MAX_DTE_FACIL_LEN || p[1] <= 1) | 166 | if (p[1] > X25_MAX_DTE_FACIL_LEN || p[1] <= 1) |
165 | return -1; | 167 | return -1; |
168 | if (p[2] > X25_MAX_AE_LEN) | ||
169 | return -1; | ||
166 | dte_facs->called_len = p[2]; | 170 | dte_facs->called_len = p[2]; |
167 | memcpy(dte_facs->called_ae, &p[3], p[1] - 1); | 171 | memcpy(dte_facs->called_ae, &p[3], p[1] - 1); |
168 | *vc_fac_mask |= X25_MASK_CALLED_AE; | 172 | *vc_fac_mask |= X25_MASK_CALLED_AE; |