author | Brian Utterback <Brian.Utterback@Oracle.COM> |
Fri, 29 Jun 2012 18:38:09 -0700 | |
branch | s11-sru |
changeset 2301 | e630b9a06d32 |
permissions | -rw-r--r-- |
2301
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
1 |
The following patch is pulled directly from the GIT repository |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
2 |
for the quagga community. It fixes the following CVE: |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
3 |
|
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
4 |
CVE-2012-1820. |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
5 |
|
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
6 |
The patched CVE is included in Quagga 0.99.22. This patch |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
7 |
file can be removed if Quagga is upgraded to that version. |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
8 |
|
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
9 |
|
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
10 |
--- bgpd/bgp_open.c |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
11 |
+++ bgpd/bgp_open.c |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
12 |
@@ -244,7 +244,7 @@ bgp_capability_orf_entry (struct peer *p |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
13 |
} |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
14 |
|
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
15 |
/* validate number field */ |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
16 |
- if (sizeof (struct capability_orf_entry) + (entry.num * 2) > hdr->length) |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
17 |
+ if (sizeof (struct capability_orf_entry) + (entry.num * 2) != hdr->length) |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
18 |
{ |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
19 |
zlog_info ("%s ORF Capability entry length error," |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
20 |
" Cap length %u, num %u", |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
21 |
@@ -348,28 +348,6 @@ bgp_capability_orf_entry (struct peer *p |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
22 |
} |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
23 |
|
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
24 |
static int |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
25 |
-bgp_capability_orf (struct peer *peer, struct capability_header *hdr) |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
26 |
-{ |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
27 |
- struct stream *s = BGP_INPUT (peer); |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
28 |
- size_t end = stream_get_getp (s) + hdr->length; |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
29 |
- |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
30 |
- assert (stream_get_getp(s) + sizeof(struct capability_orf_entry) <= end); |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
31 |
- |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
32 |
- /* We must have at least one ORF entry, as the caller has already done |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
33 |
- * minimum length validation for the capability code - for ORF there must |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
34 |
- * at least one ORF entry (header and unknown number of pairs of bytes). |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
35 |
- */ |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
36 |
- do |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
37 |
- { |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
38 |
- if (bgp_capability_orf_entry (peer, hdr) == -1) |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
39 |
- return -1; |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
40 |
- } |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
41 |
- while (stream_get_getp(s) + sizeof(struct capability_orf_entry) < end); |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
42 |
- |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
43 |
- return 0; |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
44 |
-} |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
45 |
- |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
46 |
-static int |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
47 |
bgp_capability_restart (struct peer *peer, struct capability_header *caphdr) |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
48 |
{ |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
49 |
struct stream *s = BGP_INPUT (peer); |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
50 |
@@ -580,7 +558,7 @@ bgp_capability_parse (struct peer *peer, |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
51 |
break; |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
52 |
case CAPABILITY_CODE_ORF: |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
53 |
case CAPABILITY_CODE_ORF_OLD: |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
54 |
- if (bgp_capability_orf (peer, &caphdr)) |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
55 |
+ if (bgp_capability_orf_entry (peer, &caphdr)) |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
56 |
return -1; |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
57 |
break; |
e630b9a06d32
7153585 Problem with network/quagga
Brian Utterback <Brian.Utterback@Oracle.COM>
parents:
diff
changeset
|
58 |
case CAPABILITY_CODE_RESTART: |