LWN: Comments on "Cloudflare Reverse Proxies are Dumping Uninitialized Memory" https://lwn.net/Articles/715535/ This is a special feed containing comments posted to the individual LWN article titled "Cloudflare Reverse Proxies are Dumping Uninitialized Memory". en-us Fri, 24 Oct 2025 06:06:41 +0000 Fri, 24 Oct 2025 06:06:41 +0000 https://www.rssboard.org/rss-specification lwn@lwn.net Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/716075/ https://lwn.net/Articles/716075/ thestinger <div class="FormattedComment"> You can also switch a single subdomain like assets.yourdomain.com to using the Cloudflare proxy and then only reference those assets with subresource integrity hashes in the HTML. Hashes should also be in the path to the file like ?hash and then you can set Cache-Control max-age to a year and Cloudflare will cache them for a long time after the first request. It doesn't force you to pass all traffic through it, but for DDoS mitigation that's needed. One option is only turning it on for the HTML and other non-static-asset requests when under attack. That's leaving a lot of caching on the table though. Even dynamic requests can often be cached. You can make Cloudflare cache anything via Cache-Control + a cache everything page rule, the only limitation is that it clamps lower max-age to a 30 minute minimum with lower minimums requiring higher tier plans than free (no-cache, etc. work fine to disable it). Anyway since they don't charge based on bandwidth Cloudflare can save enormous amounts of money for people, which is a big part of why it's being used everywhere. Cloudflare needs a ton of spare capacity to absorb DDoS so they can give it away from free and those users get low priority if a DDoS occurs that they can't handle.<br> </div> Thu, 02 Mar 2017 05:26:30 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715913/ https://lwn.net/Articles/715913/ paulj <div class="FormattedComment"> +1 to this. This bug is about sharing buffers between different users, and not handling exceptional cases correctly. It could have happened with a "safe" language too.<br> <p> To reduce the risk of this kind of error, one must use engineering and programming techniques that transcend C or Java or Python (i.e. could apply to any). To tell one self "Well, it was just cause they used C" would be to miss that lesson.<br> </div> Tue, 28 Feb 2017 16:49:19 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715854/ https://lwn.net/Articles/715854/ HelloWorld <div class="FormattedComment"> Again, libraries are not the issue here, the language is. The nice thing about an array or a pointer in C is that they're not just types, they're parameterized types. So if you have a declaration like T *t; or T t[42], where T is some type, *t will be an expression of type T, and you can't do that sort of thing for user defined types. So you either get something that isn't type-safe (and thus also not memory-safe) or a shitload of C preprocessor macros, which people generally agree are messy, because they behave inconsistently with the rest of the language.<br> </div> Tue, 28 Feb 2017 12:35:02 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715814/ https://lwn.net/Articles/715814/ ssmith32 <div class="FormattedComment"> They also provide a DNS service, which I don't believe would be affected by this. I'd stay away from any service that mitm any private data. Been looking at shifting my DNS to them, though.<br> </div> Mon, 27 Feb 2017 20:57:24 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715812/ https://lwn.net/Articles/715812/ NightMonkey <div class="FormattedComment"> Dumb SysAdmin here. It would seem in other languages this problem would be resolved by a "standard library" for C to deal with arrays. (Yah, not THE "C Standard Library", but some "standard by convention/consensus only".) Something where a programmer say "Ah, I hate dealing with array protections. Good thing HackerGSmith maintains the excellent Array library on GitHub so I don't have to."<br> <p> Does such a thing exist? Or is this question daft?<br> </div> Mon, 27 Feb 2017 20:15:00 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715748/ https://lwn.net/Articles/715748/ mathstuf <div class="FormattedComment"> You need to use RefCell as well (as shown in the other reply), but that also triggers extra review (from me at least) since Rust's compile guarantees are moved to runtime there. A test suite checking for proper dropping of a cyclic graph would be warranted.<br> </div> Mon, 27 Feb 2017 03:01:59 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715740/ https://lwn.net/Articles/715740/ josh <div class="FormattedComment"> Exactly.<br> <p> This comes down to "easy to use versus hard to misuse". ( <a href="https://ozlabs.org/~rusty/index.cgi/tech/2008-03-30.html">https://ozlabs.org/~rusty/index.cgi/tech/2008-03-30.html</a> and <a href="https://ozlabs.org/~rusty/index.cgi/tech/2008-04-01.html">https://ozlabs.org/~rusty/index.cgi/tech/2008-04-01.html</a> )<br> <p> C falls far lower on that scale than many other languages, generally somewhere on the "easy to misuse" scale. That doesn't mean other languages hit the "It's impossible to get wrong." level for every kind of bug, but they usually hit some point on the "hard to misuse" scale.<br> </div> Sun, 26 Feb 2017 23:16:04 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715733/ https://lwn.net/Articles/715733/ Jonno <div class="FormattedComment"> <font class="QuotedText">&gt; Creating a cyclic data structure in Rust, AFAIK, requires unsafe code (which calls for additional review) because you need a mutable reference to write to and conflicts with the non-mutable reference you'd like to write with</font><br> <p> You can't do it with references, but you can do it with Rc and RefCell. For example, the following safe function would leak whatever argument you gave it:<br> <p> fn leak&lt;T&gt;(val: T) {<br>   struct Foo&lt;T&gt;(T, RefCell&lt;Option&lt;Rc&lt;Foo&lt;T&gt;&gt;&gt;&gt;);<br>   let x = Rc::new(Foo(val, RefCell::new(None)));<br>   *x.1.borrow_mut() = Some(x.clone());<br> }<br> <p> Obviously using a RefCell&lt;Weak&lt;Foo&lt;T&gt;&gt;&gt; instead of the RefCell&lt;Option&lt;Rc&lt;Foo&lt;T&gt;&gt;&gt;&gt; avoids the leak:<br> <p> fn no_leak&lt;T&gt;(val: T) {<br>   struct Foo&lt;T&gt;(T, RefCell&lt;Weak&lt;Foo&lt;T&gt;&gt;&gt;);<br>   let x = Rc::new(Foo(val, RefCell::new(Default::default())));<br>   *x.1.borrow_mut() = Rc::downgrade(&amp;x);<br> }<br> <p> <font class="QuotedText">&gt; The typical solution I've seen so far is to use a pool of objects and then indexes into that pool for an adjacency list or other data layouts.</font><br> <p> That was a common workaround used before the stabilization of Weak in Rust 1.4...<br> </div> Sun, 26 Feb 2017 22:11:54 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715737/ https://lwn.net/Articles/715737/ roc <div class="FormattedComment"> <font class="QuotedText">&gt; Creating a cyclic data structure in Rust, AFAIK, requires unsafe code (which calls for additional review)</font><br> <p> You can create cycles using Rc and Arc refcounting; they don't call for additional review.<br> </div> Sun, 26 Feb 2017 21:45:27 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715735/ https://lwn.net/Articles/715735/ roc <div class="FormattedComment"> <font class="QuotedText">&gt; The problem with Java memory management isn't that it puts objects on the heap and not the stack, it is that it never deallocates stuff except during garbage collection.</font><br> <p> That's one of the problems.<br> <p> <font class="QuotedText">&gt; If most objects would be deallocated once their last pointer went out of scope, and the GC only had to deal with edge cases (such as unreachable cyclic data structures), you wouldn't need to do manual object reuse just to reduce the load on the GC.</font><br> <p> That would certainly help. Indeed, quite a lot of work has been done on such reference-counting-based GC for Java and other languages. See e.g. the paper "Down for the count? Getting reference counting back in the ring" by Blackburn et al. The problem for Java is that because the heap is shared between threads, object reference count updates have to be atomic operations, which makes them expensive, so to keep overhead down the compiler/runtime have to work really hard to avoid such updates. Swift does something similar (but without collecting cyclic garbage).<br> <p> In Rust this is much less of a problem because you can avoid all reference-counting for single-owner objects; when an object isn't shared across threads you can use a cheap non-atomic refcount; and the lifetime+borrow system means you can often pass and return references to objects without altering refcounts, with static checking that everything's OK.<br> <p> <font class="QuotedText">&gt; On the other hand it doesn't provide a GC at all, so if you create a cyclic data structure of (non-weak) reference counted pointers, the object will never be deallocated...</font><br> <p> Yes, it's like Swift in that respect --- except that as noted above, you're using refcounting a lot less in Rust.<br> </div> Sun, 26 Feb 2017 21:44:21 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715702/ https://lwn.net/Articles/715702/ mathstuf <div class="FormattedComment"> Creating a cyclic data structure in Rust, AFAIK, requires unsafe code (which calls for additional review) because you need a mutable reference to write to and conflicts with the non-mutable reference you'd like to write with. The typical solution I've seen so far is to use a pool of objects and then indexes into that pool for an adjacency list or other data layouts. The indexes should be opaque types which disallow algebra and other problems. I imagine it would then need to have a "compact" method to fill in gaps in the pool when necessary.<br> </div> Sun, 26 Feb 2017 15:35:35 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715667/ https://lwn.net/Articles/715667/ Jonno <div class="FormattedComment"> <font class="QuotedText">&gt; A main reason people use manual object recycling in languages like Java is to reduce load on the garbage collector, reducing memory or throughput overhead depending on how it's tuned. With Rust this is a non-issue because you can stack-allocate in many cases, and for heap objects a good allocator like jemalloc uses free lists to give you most of the benefits of recycling.</font><br> <p> The problem with Java memory management isn't that it puts objects on the heap and not the stack, it is that it never deallocates stuff except during garbage collection. If most objects would be deallocated once their last pointer went out of scope, and the GC only had to deal with edge cases (such as unreachable cyclic data structures), you wouldn't need to do manual object reuse just to reduce the load on the GC.<br> <p> Sure, a good allocator do reduce overhead a bit, but when 99% of your problem is fighting the GC, improving the last 1% doesn't do you much good...<br> <p> Rust does all the "deallocate once out of scope" stuff perfectly. On the other hand it doesn't provide a GC at all, so if you create a cyclic data structure of (non-weak) reference counted pointers, the object will never be deallocated...<br> </div> Sun, 26 Feb 2017 14:33:56 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715645/ https://lwn.net/Articles/715645/ roc <div class="FormattedComment"> To be fair, some W3C groups (e.g. Webapps) have done useful work in the last decade.<br> </div> Sun, 26 Feb 2017 03:33:22 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715644/ https://lwn.net/Articles/715644/ roc <div class="FormattedComment"> In this case, clearing buffers would have reduced the amount of data leaked by some fraction, but they'd still have leaked data in the live allocations.<br> </div> Sun, 26 Feb 2017 03:32:22 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715643/ https://lwn.net/Articles/715643/ roc <div class="FormattedComment"> Oh yeah, and such 'wrappers' tend not to protect you against things like use-after-free which are a huge source of exploitable bugs. Those that do are even more intrusive and high overhead.<br> </div> Sun, 26 Feb 2017 03:29:50 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715623/ https://lwn.net/Articles/715623/ roc <div class="FormattedComment"> Not all "memory-safe" languages are created equal, and Rust has some big advantages of GC-based languages here. See my comment above.<br> <p> <font class="QuotedText">&gt; The only fault of C is that people use arrays directly instead of having wrappers that checks out-of-range access.</font><br> <p> * Using such wrappers in C is horrendously ugly. C++ at least is better.<br> * The compiler and standard libraries are not designed to work well with such wrappers. For example Rust's iterators let you traverse an array (or other data structure) without explicit indexing so that you don't manipulate offsets directly and hence don't need bounds checks.<br> * Since "wrappers" etc aren't built in, projects choose different ones and then you get conflicts combining code.<br> * Since "wrappers" aren't built in, people just aren't accustomed to using them. They'll choose the convenient built-in thing first.<br> <p> In reality how many projects use such wrappers? I can't think of any. It must be a small fraction at best. There are good reasons for that. Even C++ "vector" doesn't do bounds checking (if you use operator[], the natural syntax)!<br> </div> Sun, 26 Feb 2017 03:28:32 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715629/ https://lwn.net/Articles/715629/ flussence <div class="FormattedComment"> I'm not sure what's more sad here; the possibility that the W3C would have people like this as members, or the assumption that namedropping them would work in your favour when people outside the academic bubble know well that the WHATWG has done all the actual work for the past 15 years.<br> </div> Sat, 25 Feb 2017 22:45:28 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715625/ https://lwn.net/Articles/715625/ dmaas <div class="FormattedComment"> Our experience with DDoS attacks is that if you aren't using some kind of distributed, edge-filtering ingestion system like CloudFlare, you won't even be able to log in to your web server or load balancer to change any settings or try to set up blocking. Massive TCP attacks just overwhelm anything you can do when a single piece of hardware is receiving the traffic.<br> </div> Sat, 25 Feb 2017 21:09:46 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715624/ https://lwn.net/Articles/715624/ Cyberax <div class="FormattedComment"> That's what Cloudflare does. It's a load balancer for sites with some caching.<br> </div> Sat, 25 Feb 2017 20:29:48 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715622/ https://lwn.net/Articles/715622/ roc <div class="FormattedComment"> True and fair enough, but not all memory-safe languages are created equal.<br> <p> Rust, for example, lets you create references to slices of arrays. Accesses to slices are bounds-checked, so you get more safety using those instead of buffer offsets. Of course it's possible for people to use buffer offsets when they should use slices, but slices are built-in and have nice syntax so they're the idiomatic approach.<br> <p> A main reason people use manual object recycling in languages like Java is to reduce load on the garbage collector, reducing memory or throughput overhead depending on how it's tuned. With Rust this is a non-issue because you can stack-allocate in many cases, and for heap objects a good allocator like jemalloc uses free lists to give you most of the benefits of recycling.<br> </div> Sat, 25 Feb 2017 20:02:03 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715619/ https://lwn.net/Articles/715619/ josh <div class="FormattedComment"> Depends on the approach you use. If the whole DDoS uses the same set of credentials, it'd be easy enough to detect and drop that traffic at the web server or load balancer.<br> <p> But yes, otherwise agreed. If you actually do need DDoS mitigation, rather than just normal bandwidth/scaling improvements, then that becomes a much harder problem to solve without interposing a whole-site CDN.<br> </div> Sat, 25 Feb 2017 19:45:35 +0000 Please https://lwn.net/Articles/715620/ https://lwn.net/Articles/715620/ corbet This comment is neither respectful nor informative; no more of these, please? Sat, 25 Feb 2017 19:39:57 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715616/ https://lwn.net/Articles/715616/ clintpatton <div class="FormattedComment"> I like the Cloudflare advertising slogan, "Making the Internet Work the Way It Should". As a Computer Scientist, I know Cloudflare is actually "Breaking the Internet and Making It Worse".<br> <p> I bet Cloudflare is run by Chinese Communists who are former Google China employees? Or maybe Cloudflare has outsourced its programming to India and the clueless idiots who break HTML 5 every 24 hours?<br> <p> Long live HTML 4 and the Free and Open Internet. I'm now cancelling my W3C membership.<br> <p> </div> Sat, 25 Feb 2017 19:26:42 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715615/ https://lwn.net/Articles/715615/ Cyberax <div class="FormattedComment"> A typical DDoS simply overwhelms _any_ dynamic functionality, even simple password check.<br> </div> Sat, 25 Feb 2017 19:21:07 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715613/ https://lwn.net/Articles/715613/ josh <div class="FormattedComment"> You can point to the CDN domain for cacheable items. That'll even speed up loading, via sharding: the browser can make another set of concurrent requests to the CDN.<br> <p> As for DDoS protection: depends on the nature of the DDoS. If it's request-based, it may suffice to cache all the static content, and if someone is DDoSing authenticated content, revoke those authentication credentials temporarily while investigating.<br> <p> However, if it's a non-request-based DDoS, with attackers just throwing raw data at you to drown you in bandwidth consumption, that's a bigger problem. Sometimes the requests can be blackholed at the routing level, if you have a good technical relationship with your bandwidth provider. If the requests are coming from multiple otherwise-legitimate ASes and can't easily be blackholed at the routing level, then you don't have much choice other than "go offline" or "have more bandwidth than the attack can consume". CDNs take the latter approach, but only if you put the CDN in front of your site rather than to the side, which is exactly the problem here.<br> <p> Short of becoming big enough to be your own mini-CDN (with load balancers and caching layers in various data centers), I don't know. I can imagine some technical solutions, but they'd certainly require more work.<br> <p> However, how many sites using Cloudflare actually needed the DDoS protection, and how many just wanted to save bandwidth? The latter is much easier to solve.<br> </div> Sat, 25 Feb 2017 18:55:53 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715609/ https://lwn.net/Articles/715609/ zlynx <div class="FormattedComment"> This requires assembly coding or knowing that you should use a security library. Regular memory clears are optimized away, almost always.<br> </div> Sat, 25 Feb 2017 17:17:14 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715606/ https://lwn.net/Articles/715606/ luto <div class="FormattedComment"> I'll add a third lesson: when using a language like C, clear sensitive buffers when you're done with them. Heck, even with a memory-safe language, clear your buffers if only to avoid exposure in coredumps, swap files, and the like.<br> </div> Sat, 25 Feb 2017 16:26:05 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715601/ https://lwn.net/Articles/715601/ HelloWorld <div class="FormattedComment"> And besides, even "safe" wrappers around arrays don't help against all other kinds of mistakes that basically happen only in C, like dereferencing invalid pointers (e. g. pointers to freed memory or to a local variable that has gone out of scope). <br> </div> Sat, 25 Feb 2017 14:14:30 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715600/ https://lwn.net/Articles/715600/ HelloWorld <div class="FormattedComment"> <font class="QuotedText">&gt; The only fault of C is that people use arrays directly instead of having wrappers that checks out-of-range access.</font><br> The reason people often don't use them is that C doesn't provide good abstractions to do that. Without language support for generics or templates, that sort of thing will invariably suck.<br> <p> </div> Sat, 25 Feb 2017 14:04:03 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715596/ https://lwn.net/Articles/715596/ pizza <div class="FormattedComment"> <font class="QuotedText">&gt; You could interject that no one would implement anything like that, but that is ignoring reality. I've seen much worse.</font><br> <p> I agree, and I've personally written "worse" in Java.<br> <p> And it was absolutely necessary too, because when profiling our code to identify performance bottlenecks, I discovered that over half our server load was due to overhead in constructing messages using the "correct" JavaWay(tm). I roughly quadrupled the number of users each server could handle by using shared buffers with offset pointers because we were being absolutely murdered by the java allocator/gc overhead. Just by itself, that saved the company enough money to more than pay my salary the entire time I worked there.<br> <p> (The next major Java revision added features that would have obviated the whole mess, but by then the dotcom crash was long over and I had very happily abandoned Java middleware in favor of bare metal C)<br> <p> </div> Sat, 25 Feb 2017 12:56:09 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715593/ https://lwn.net/Articles/715593/ job <div class="FormattedComment"> <font class="QuotedText">&gt; This bug read off the end of a buffer into memory. That can't happen in memory-safe code.</font><br> <p> Of course it can. If the buffer is not cleared between requests for example. Or if it is a shared buffer managed with offset pointers. It couldn't happen in exactly the same way, but there are countless similar potential screw ups possible.<br> <p> You could interject that no one would implement anything like that, but that is ignoring reality. I've seen much worse. One could just as easily argue that surely no one deploys something handling sensitive data in 2017 without Valgrind (which on the face of it would seem to have caught this) yet here we are.<br> <p> The poster child for managed languages is Java. No pointers so we're safe, right? Yet Tomcat has had nasty bugs with implications almost identical to this. A memory safe language may help but won't get rid of the problem. You simply have to be careful with production code, design things to fail safe where possible and use whatever tools at your disposal to discover problems early. (Cloudflare seems to have been running this for at least half a year until Google called them out on it.) It's much too easy to post facto declare your favorite language superior, but it has no basis in reality.<br> </div> Sat, 25 Feb 2017 12:09:12 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715592/ https://lwn.net/Articles/715592/ sorokin <div class="FormattedComment"> I have a story about how people using safe language (.NET) got out-of-range accesses, double frees and degraded performance at the same time.<br> <p> They needed to store some data in arrays. And arrays were quite big. And big arrays aren't kept in gen0 heap, they are created in gen2. And this causes full GC. And full GC causes UI to hang. The solution? Split a big array into an array of small arrays of fixed-sizes (great idea: each access does 2 indirections, 2 branches, 1 division). And to make anything fast and smooth let's make a pool of these small fixed size arrays. Surely the container doesn't check for index out-of-range condition, so you can access a few element after the last and won't get any error. And of course they got double free errors. And for .NET you have no valgrind/sanitizer to detect errors like this.<br> <p> The only fault of C is that people use arrays directly instead of having wrappers that checks out-of-range access. And I would like to note, that sometimes you really do want to access array without these checks.<br> <p> </div> Sat, 25 Feb 2017 11:52:15 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715588/ https://lwn.net/Articles/715588/ gioele <div class="FormattedComment"> <font class="QuotedText">&gt; Stop using Cloudflare. By all means use CDNs to cache non-sensitive, non-customer-specific data, but don't use a CDN that effectively acts as an HTTPS MITM on half the Internet.</font><br> <p> In the current "everything should use HTTPS" Web, how do you provide a CDN service without acting as a MITM? Also, how do you provide DDoS protection?<br> </div> Sat, 25 Feb 2017 10:53:08 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715586/ https://lwn.net/Articles/715586/ phg <div class="FormattedComment"> <font class="QuotedText">&gt; The Incident report on Cloudflare's blog quite clearly states "the bug is not in Ragel itself. It is in Cloudflare's use of Ragel. This is our bug and not the fault of Ragel." </font><br> <p> Not initially. One of Ragel’s authors had to reach out first<br> for Cloudflare to add the clarifying remarks:<br> <a href="https://www.reddit.com/r/programming/comments/5vtv16/cloudflare_have_been_leaking_customer_https/de5ctmc/">https://www.reddit.com/r/programming/comments/5vtv16/clou...</a><br> </div> Sat, 25 Feb 2017 09:40:58 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715580/ https://lwn.net/Articles/715580/ josh <div class="FormattedComment"> <font class="QuotedText">&gt; A bug like this that can be trivially made in most memory-safe languages as it is not about memory safety. Rather it is about not enforcing proper partitions for accessing data allowing other users to read it.</font><br> <p> This bug read off the end of a buffer into memory. That can't happen in memory-safe code.<br> <p> The broken parsing could still have happened, but the data exposure wouldn't have.<br> <p> That doesn't mean *other* bugs couldn't happen in memory-safe code; you can write bugs in any language. But this particular bug couldn't have happened in memory-safe code.<br> </div> Sat, 25 Feb 2017 03:59:03 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715578/ https://lwn.net/Articles/715578/ ibukanov <div class="FormattedComment"> A bug like this that can be trivially made in most memory-safe languages as it is not about memory safety. Rather it is about not enforcing proper partitions for accessing data allowing other users to read it.<br> <p> One needs at least dependable types that turns code in a messy mathematical proofs even for simple things.<br> </div> Sat, 25 Feb 2017 02:51:35 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715577/ https://lwn.net/Articles/715577/ bronson <div class="FormattedComment"> Maybe combine those two suggestions: "CloudFlare"<br> <p> Sounds scary!<br> </div> Sat, 25 Feb 2017 02:02:16 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715572/ https://lwn.net/Articles/715572/ rgmoore <p>If this doesn't wind up in next week's "quotes of the week", somebody is slipping. Sat, 25 Feb 2017 01:03:25 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715571/ https://lwn.net/Articles/715571/ geek <div class="FormattedComment"> well, certainly type-safe languages are available that have been used for large programs and have no known errors. C is not one of them.<br> <p> <p> </div> Sat, 25 Feb 2017 00:43:31 +0000 Cloudflare Reverse Proxies are Dumping Uninitialized Memory https://lwn.net/Articles/715570/ https://lwn.net/Articles/715570/ tialaramex <div class="FormattedComment"> Unfortunately for Cloudflare the advice to avoid them probably makes more sense for their larger, paying customers than the small people on a "free" plan. This is because a lot of those "free" Cloudflare sites are also running in a cheap hosted environment anyway, they're vulnerable to equivalent goofs in their hosting environment which, like Cloudflare, they share with random people from the Internet but unlike Cloudflare it's not a huge Internet brand that will attract massive press attention &amp; react quickly to problems. So Cloudflare probably isn't the weakest link for them.<br> </div> Sat, 25 Feb 2017 00:21:33 +0000