summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
...
* | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-15
|\ \ \ \ \ \ \ \ | |/ / / / / / /
| * | | | | | | Merge remote branch 'origin/maint-0.2.1' into maint-0.2.2Nick Mathewson2011-01-15
| |\ \ \ \ \ \ \ | | |/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/or/routerparse.c src/or/test.c
| | * | | | | | Merge branch 'bug2352_obsize' into maint-0.2.1Nick Mathewson2011-01-15
| | |\ \ \ \ \ \
| | | * | | | | | catch another overlong malloc possibility. found by cypherpunksNick Mathewson2011-01-15
| | | | | | | | |
| | | * | | | | | Impose maximum sizes on parsed objectsNick Mathewson2011-01-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An object, you'll recall, is something between -----BEGIN----- and -----END----- tags in a directory document. Some of our code, as doorss has noted in bug 2352, could assert if one of these ever overflowed SIZE_T_CEILING but not INT_MAX. As a solution, I'm setting a maximum size on a single object such that neither of these limits will ever be hit. I'm also fixing the INT_MAX checks, just to be sure.
| | | * | | | | | Add logic in routerparse to not read overlong private keysNick Mathewson2011-01-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I am not at all sure that it is possible to trigger a bug here, but better safe than sorry.
* | | | | | | | | Remove some unnecessary occurrences of +1.Robert Ransom2011-01-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I dug through the OpenSSL source and verified that RSA_private_decrypt will not write more than RSA_size(key) bytes to its output buffer.
* | | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-15
|\ \ \ \ \ \ \ \ \ | |/ / / / / / / /
| * | | | | | | | Merge remote branch 'origin/maint-0.2.1' into maint-0.2.2Nick Mathewson2011-01-15
| |\ \ \ \ \ \ \ \ | | |/ / / / / / /
| | * | | | | | | Add missing check for hostname answer_len in dnsserv sizeNick Mathewson2011-01-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is checked elsewhere too, but let's be RFC-conformant.
* | | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-15
|\ \ \ \ \ \ \ \ \ | |/ / / / / / / /
| * | | | | | | | Merge remote branch 'origin/maint-0.2.1' into maint-0.2.2Nick Mathewson2011-01-15
| |\ \ \ \ \ \ \ \ | | |/ / / / / / /
| | * | | | | | | Merge branch 'bug2332_part2' into maint-0.2.1Nick Mathewson2011-01-15
| | |\ \ \ \ \ \ \
| | | * | | | | | | Always nul-terminate the result passed to evdns_server_add_ptr_replyNick Mathewson2011-01-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In dnsserv_resolved(), we carefully made a nul-terminated copy of the answer in a PTR RESOLVED cell... then never used that nul-terminated copy. Ouch. Surprisingly this one isn't as huge a security problem as it could be. The only place where the input to dnsserv_resolved wasn't necessarily nul-terminated was when it was called indirectly from relay.c with the contents of a relay cell's payload. If the end of the payload was filled with junk, eventdns.c would take the strdup() of the name [This part is bad; we might crash there if the cell is in a bad part of the stack or the heap] and get a name of at least length 495[*]. eventdns.c then rejects any name of length over 255, so the bogus data would be neither transmitted nor altered. [*] If the name was less than 495 bytes long, the client wouldn't actually be reading off the end of the cell. Nonetheless this is a reasonably annoying bug. Better fix it. Found while looking at bug 2332, reported by doorss. Bugfix on 0.2.0.1-alpha.
* | | | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-15
|\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / /
| * | | | | | | | | Merge remote branch 'origin/maint-0.2.1' into maint-0.2.2Nick Mathewson2011-01-15
| |\ \ \ \ \ \ \ \ \ | | |/ / / / / / / /
| | * | | | | | | | Merge branch 'bug2324_uncompress' into maint-0.2.1Nick Mathewson2011-01-15
| | |\ \ \ \ \ \ \ \
| | | * | | | | | | | clean up message; explain a magic number in a commentNick Mathewson2011-01-15
| | | | | | | | | | |
| | | * | | | | | | | Fix a SIZE_T_CEILING check in torgzip.c; noticed by cypherpunksNick Mathewson2011-01-05
| | | | | | | | | | |
| | | * | | | | | | | Detect and disallow compression bombsNick Mathewson2011-01-03
| | | | | | | | | | |
* | | | | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-15
|\ \ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / / /
| * | | | | | | | | | Merge remote branch 'origin/maint-0.2.1' into maint-0.2.2Nick Mathewson2011-01-15
| |\ \ \ \ \ \ \ \ \ \ | | |/ / / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/or/config.c src/or/networkstatus.c src/or/rendcommon.c src/or/routerparse.c src/or/test.c
| | * | | | | | | | | make the description of tolen_asserts more direNick Mathewson2011-01-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We have a CVE # for this bug.
| | * | | | | | | | | Fix a heap overflow found by debuger, and make it harder to make that ↵Nick Mathewson2011-01-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | mistake again Our public key functions assumed that they were always writing into a large enough buffer. In one case, they weren't. (Incorporates fixes from sebastian)
| | * | | | | | | | | Always nul-terminate the result passed to evdns_server_add_ptr_replyNick Mathewson2011-01-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In dnsserv_resolved(), we carefully made a nul-terminated copy of the answer in a PTR RESOLVED cell... then never used that nul-terminated copy. Ouch. Surprisingly this one isn't as huge a security problem as it could be. The only place where the input to dnsserv_resolved wasn't necessarily nul-terminated was when it was called indirectly from relay.c with the contents of a relay cell's payload. If the end of the payload was filled with junk, eventdns.c would take the strdup() of the name [This part is bad; we might crash there if the cell is in a bad part of the stack or the heap] and get a name of at least length 495[*]. eventdns.c then rejects any name of length over 255, so the bogus data would be neither transmitted nor altered. [*] If the name was less than 495 bytes long, the client wouldn't actually be reading off the end of the cell. Nonetheless this is a reasonably annoying bug. Better fix it. Found while looking at bug 2332, reported by doorss. Bugfix on 0.2.0.1-alpha.
* | | | | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-15
|\ \ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / / /
| * | | | | | | | | | Fix another instance of "128" in buffers.c. More bug2330.Nick Mathewson2011-01-15
| | | | | | | | | | |
* | | | | | | | | | | typosRoger Dingledine2011-01-12
| | | | | | | | | | |
* | | | | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-12
|\ \ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / / /
| * | | | | | | | | | Merge remote branch 'origin/maint-0.2.1' into maint-0.2.2Nick Mathewson2011-01-12
| |\ \ \ \ \ \ \ \ \ \ | | |/ / / / / / / / /
| | * | | | | | | | | Make our replacement INT32_MAX always signedNick Mathewson2011-01-12
| | | |/ / / / / / / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The C standard says that INT32_MAX is supposed to be a signed integer. On platforms that have it, we get the correct platform-defined value. Our own replacement, however, was unsigned. That's going to cause a bug somewhere eventually.
* | | | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-12
|\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / /
| * | | | | | | | | Merge remote branch 'public/bug2363' into maint-0.2.2Nick Mathewson2011-01-12
| |\ \ \ \ \ \ \ \ \
| | * | | | | | | | | Add missing parens to evdns_base_resolve_* macros while I am at itNick Mathewson2011-01-09
| | | | | | | | | | |
| | * | | | | | | | | Fix check for failed evdns request creationNick Mathewson2011-01-09
| | | |_|_|_|/ / / / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When using libevent 2, we use evdns_base_resolve_*(). When not, we fake evdns_base_resolve_*() using evdns_resolve_*(). Our old check was looking for negative values (like libevent 2 returns), but our eventdns.c code returns 1. This code makes the check just test for nonzero. Note that this broken check was not for _resolve_ failures or even for failures to _launch_ a resolve: it was for failures to _create_ or _encode_ a resolve request. Bug introduced in 81eee0ecfff3dac1e9438719d2f7dc0ba7e84a71; found by lodger; uploaded to trac by rransom. Bug 2363. Fix on 0.2.2.6-alpha.
* | | | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-12
|\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / /
| * | | | | | | | | Merge remote branch 'sebastian/bug2337' into maint-0.2.2Nick Mathewson2011-01-12
| |\ \ \ \ \ \ \ \ \
| | * | | | | | | | | Fix a autoconf warningSebastian Hahn2011-01-12
| | | | | | | | | | |
| | * | | | | | | | | Detect signed size_t and report an error at configure time.Nick Mathewson2011-01-03
| | | |_|/ / / / / / | | |/| | | | | | |
* | | | | | | | | | Merge branch 'bug2320'Nick Mathewson2011-01-12
|\ \ \ \ \ \ \ \ \ \
| * | | | | | | | | | Use autoconf's FLEXIBLE_ARRAY_MEMBER for unspecified-length arraysNick Mathewson2011-01-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | C99 allows a syntax for structures whose last element is of unspecified length: struct s { int elt1; ... char last_element[]; }; Recent (last-5-years) autoconf versions provide an AC_C_FLEXIBLE_ARRAY_MEMBER test that defines FLEXIBLE_ARRAY_MEMBER to either no tokens (if you have c99 flexible array support) or to 1 (if you don't). At that point you just use offsetof [STRUCT_OFFSET() for us] to see where last_element begins, and allocate your structures like: struct s { int elt1; ... char last_element[FLEXIBLE_ARRAY_MEMBER]; }; tor_malloc(STRUCT_OFFSET(struct s, last_element) + n_elements*sizeof(char)); The advantages are: 1) It's easier to see which structures and elements are of unspecified length. 2) The compiler and related checking tools can also see which structures and elements are of unspecified length, in case they wants to try weird bounds-checking tricks or something. 3) The compiler can warn us if we do something dumb, like try to stack-allocate a flexible-length structure.
* | | | | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-12
|\ \ \ \ \ \ \ \ \ \ \ | | |/ / / / / / / / / | |/| | | | | | | | |
| * | | | | | | | | | Merge branch 'bug2331' into maint-0.2.2Nick Mathewson2011-01-12
| |\ \ \ \ \ \ \ \ \ \
| | * | | | | | | | | | add a missing "not" in bug2331 changelogNick Mathewson2011-01-12
| | | | | | | | | | | |
| | * | | | | | | | | | Fix size_t vs unsigned comparison tooNick Mathewson2011-01-05
| | | | | | | | | | | |
| | * | | | | | | | | | Fix up size and sign issues in base32 codeNick Mathewson2011-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes bug 2331.
* | | | | | | | | | | | Merge remote branch 'origin/maint-0.2.2'Nick Mathewson2011-01-12
|\ \ \ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / / / /
| * | | | | | | | | | | Merge branch 'bug2346' into maint-0.2.2Nick Mathewson2011-01-12
| |\ \ \ \ \ \ \ \ \ \ \
| | * | | | | | | | | | | Explain bug2346 fix better based on suggestions from armaNick Mathewson2011-01-12
| | | | | | | | | | | | |
| | * | | | | | | | | | | Wait 60 minutes before retrying failed state save; bug2346Nick Mathewson2011-01-10
| | | |_|_|_|_|_|_|_|/ / | | |/| | | | | | | | |